Java7路線圖更新未包含閉包特性

字號(hào):

在Devoxx大會(huì)上,Java SE首席工程師Mark Reinhol,做了一個(gè)關(guān)于Java 7(2010年初發(fā)布)最新發(fā)展方向的演講。雖然,Mark稱這次演講的內(nèi)容只是暫時(shí)的計(jì)劃、不具約束力,但是仍然在社區(qū)中引起了很多反響,特別是針對(duì)閉包特性(Closures)的遺漏。
    Java 7特性的重要變化:
    模塊化——294和Jigsaw項(xiàng)目
    292——JVM對(duì)動(dòng)態(tài)語(yǔ)言的支持
    JSR 203——更多新的I/O API已基本完成,包括真正異步的I/O(不僅僅是非阻塞I/O)和一個(gè)真正的文件系統(tǒng)API。
    JSR TBD:小的語(yǔ)言變化(見(jiàn)下)
    安全重拋出——允許一個(gè)廣泛的catch語(yǔ)句,編譯器可以更加智能的基于try語(yǔ)句塊中拋出的異常管理重新拋出。(我以前沒(méi)有見(jiàn)過(guò),不過(guò)看起來(lái)不錯(cuò))
    Nulll解引用(dereference)表達(dá)式——Null通過(guò)’?’語(yǔ)法檢查,類似于Groovy...使開(kāi)發(fā)人員避免一連串null檢查。
    更好的類型推斷(type inference)——與泛型實(shí)例化有關(guān),但目前還不清楚這種推斷會(huì)達(dá)到什么程度(我覺(jué)得越多越好)。
    多捕捉(Multi-catch)——(是的?。┰试S在catch語(yǔ)句中用逗號(hào)分割一系列異常類型。
    Joe Darcy正在領(lǐng)導(dǎo)Open JDK開(kāi)發(fā),他的博客地址是http://blogs.sun.com/darcy
    JSR 296——Swing應(yīng)用框架——仍然需要更簡(jiǎn)化以方便Swing應(yīng)用開(kāi)發(fā)。
    6u10特性的向前兼容(Java Kernal、QUickstarter、新Plug-in等)。
    Java 7中可能不會(huì)引入的特性:
    閉包——圍繞提議沒(méi)有形成一致意見(jiàn)
    具體化泛型(Reified generics)
    第一類屬性(1st class properties)
    操作符重載
    BigDecimal語(yǔ)法
    JSR 295——Bean綁定
    Java.net開(kāi)展了一次有關(guān)“哪些Java 7未采納的特性是你最感興趣的”的調(diào)查,其中閉包明顯處于其他特性之前:
    閉包 47.4% (734 Votes)
    具體化泛型 17.2% (266 Votes)
    第一類屬性 10.4% (162 Votes)
    操作符重載 4.3% (67 Votes)
    BigDecimal語(yǔ)法 3.4% (54 Votes)
    JSR-295 Bean綁定 7.3% (113 Votes)
    我對(duì)任何特性都不感興趣 9.7% (150 Votes)
    以下是社區(qū)中的部分反應(yīng):
    Ricky Clarkson:沒(méi)有閉包Java將滅亡
    果然被證實(shí)了。雖然James Gosling想要閉包,雖然已經(jīng)有了3個(gè)閉包原型編譯器,雖然其他JVM語(yǔ)言支持閉包,Java 7還是沒(méi)有閉包。
    Martin Kneissl:Java 7中沒(méi)有閉包是個(gè)壞消息
    應(yīng)該增加閉包而不是Java 5中的“for”循環(huán)新形式。在Java 6中就應(yīng)該有閉包。現(xiàn)在似乎Java 7中也不會(huì)有了。
    閉包并不難以理解。至少當(dāng)你把它們與Java中的匿名內(nèi)部類作比較時(shí)是這樣的。有的人不贊同。他們覺(jué)得總有一些愚蠢的程序員,所以應(yīng)該限制語(yǔ)言以防止他們引起太多破壞,我不認(rèn)同這個(gè)理由。這是不可能的。不稱職的程序員在任何語(yǔ)言中都會(huì)搬起石頭砸自己的腳。
    幸運(yùn)的是,JVM上還有其他語(yǔ)言可以使用Java的優(yōu)點(diǎn):庫(kù)、可移植性和工具(某種程度上)。
    Dustin Marx則對(duì)閉包有一些矛盾的看法
    就在我寫(xiě)這篇帖子的時(shí)候,已經(jīng)有160票投完(不過(guò)很快就會(huì)出現(xiàn)新的投票),其中Java SE 7中最期待的落選特性是閉包。目前,閉包特性已經(jīng)得到了總票數(shù)的幾乎一半。從某種意義上說(shuō),這并不奇怪。閉包似乎主宰了Java SE 7的討論直到被宣布不會(huì)在Java SE 7中引入。但是討論是圍繞著閉包的概念和如何實(shí)現(xiàn)閉包進(jìn)行的爭(zhēng)論。雖然閉包是Java SE 7最期待的落選特性之一,但是我個(gè)人對(duì)此非常矛盾。我有時(shí)會(huì)偶然的在工作中意識(shí)到閉包是多么有用,但是多數(shù)情況下沒(méi)有它我也可以應(yīng)付。也就是說(shuō),我不介意它被引入,但是當(dāng)我聽(tīng)到?jīng)]有被包含在Java SE 7中時(shí)這并沒(méi)有困擾我。但是,如果我們相信目前的投票結(jié)果,那么接近一半的Java開(kāi)發(fā)人員最想要這個(gè)特性。這與Java.net有關(guān)開(kāi)發(fā)人員最想要Java SE 7引入閉包的問(wèn)卷調(diào)查是一致的。
    Osvaldo Doederlein對(duì)新特性感到興奮,不過(guò)仍然很期望閉包
    Java 7是多年基礎(chǔ)設(shè)施智能化的版本:294/Jigsaw,并發(fā)類加載——我認(rèn)為這會(huì)提高大應(yīng)用程序的啟動(dòng)時(shí)間,特別是類似于JavaEE服務(wù)器和IDE 等基于微內(nèi)核的應(yīng)用,XRender——將最終使Java成為L(zhǎng)inux桌面應(yīng)用的一等公民,G1,全64位支持(將在6u12中首次亮相,獲取beta版),F(xiàn)orkJoin。
    這么多的好特性,我?guī)缀醵伎焱耸ラ]包的悲傷了。我猜是時(shí)候轉(zhuǎn)移到Scala、JavaFX或者其他現(xiàn)代JVM語(yǔ)言上了(只要不是類似于Ruby 或者Python的動(dòng)態(tài)類型語(yǔ)言)。我認(rèn)為從現(xiàn)在開(kāi)始五年,如果我編寫(xiě)某種低層次的運(yùn)行時(shí),我會(huì)只寫(xiě)“標(biāo)準(zhǔn)”Java代碼。多虧社區(qū)的保護(hù),Java語(yǔ)言 正在慢慢轉(zhuǎn)為一種遺產(chǎn)和低層次的角色。
    Matt Grommes關(guān)注于BigDecimal語(yǔ)法
    Devoxx和JavaEdge的與會(huì)者對(duì)JDK7語(yǔ)言的可能變化進(jìn)行投票
    絕對(duì)的勝者是——null處理。Null處理獲得了50張先支持票,是排在第二位的字符串切換(string switch)特性票數(shù)的兩倍,幾乎是全部先支持票數(shù)的三分之一。而且,幾乎有三分之二的與會(huì)者把它放在了前四位優(yōu)先支持的特性里。
    其他受歡迎的特性包括字符串切換、異常的多捕捉、考試,大提示對(duì)Map的增強(qiáng)型for-each循環(huán)(能夠刪除或者查找索引)和ARM風(fēng)格的資源管理。
    不受歡迎的特性(特別認(rèn)為是糟糕建議的)是通過(guò)[]訪問(wèn)List/Map和字符串插值(字符串中的${variable} )。
    泛型推斷和多行字符串處于相對(duì)較低優(yōu)先級(jí)但與會(huì)者不是特別反感。
    值得一提的是,在Devoxx上對(duì)閉包特性的投票結(jié)果是50:50