譯/馬國耀 在一篇題為《重新思考JDK7》的博文(以及jdk7-dev的跨站轉(zhuǎn)貼)中,,Mark Reinhold提出了將先前計劃在JDK7中實(shí)現(xiàn)的某些特性推遲到JDK8的建議,以期JDK7的早日面世,。該建議是好是壞,?在社區(qū)里引起了廣泛的討論。 當(dāng)人們已經(jīng)接受到JDK的推遲已經(jīng)導(dǎo)致了早前聲明的時間表的拖延(當(dāng)然,,這個時間表是無論如何也無法實(shí)現(xiàn)的)之后,,目前討論的焦點(diǎn)是是否要提前推出一個版本,還是等到萬事俱備時才發(fā)布,。Mark的建議是: 就目前我們對“B計劃”的評估來看,,我們可以在2011年中期發(fā)布簡化版的JDK7,然后在2012年下半年發(fā)布JDK8,。 頗具諷刺的是,,Mark的博客的副標(biāo)題是“刻不容緩,!”。然而,,從對該博文的回復(fù)看,,好幾個回帖都認(rèn)為早發(fā)布、頻繁發(fā)布比一次性發(fā)布好,。雖然人們更期望B計劃中的某些特性,,而對另外一些則差一些,但是毫無疑問,,B計劃中的Coin項(xiàng)目將對Java語言帶來極大的好處,。Joseph D. Darcy對Coin的特性澄清如下:
B計劃還包含jsr166y類 (ForkJoin、TransferQueue、Phaser等),。此外,,它還對JVM做了一些改進(jìn),如對動態(tài)調(diào)用的JSR292的支持將出現(xiàn)在JVM這一層,。雖然對于靜態(tài)類型的Java語言,,它的用處似乎不大,但它可用來優(yōu)化當(dāng)前使用的Method.invoke()方法(當(dāng)在RMI或其他企業(yè)服務(wù)器使用時),。如果這一特性還包含對MethodHandle的語言支持,,那么在Java類中調(diào)用函數(shù)將方便很多,因?yàn)椴辉傩枰ㄟ^反射機(jī)制查找名稱正確的消息(MethodHandle的底層使用invokedynamic,,但需要更改JLS,所以B計劃有可能包含invokedynamicVM指令和MethodHandle類,,但不包含對文字的支持),。 在JVM上實(shí)現(xiàn)其他語言的人們應(yīng)該為該時間表的更改感到興奮,因?yàn)閕nvokedynamic可用的日期更早了,,他們不再需要等到2012年了,。(不過,兩個計劃都將Lambda等放到了2012年),。對于同時工作在基于JVM的JRuby上的Mirah的Charles Nutter,,對于這一改變,他只能苦中尋樂: 對我所做的工作而言,,函數(shù)處理也許是即將到來的JDK7的最重要的特性之一,。對于所有希望無需生成單個方法類就能描述函數(shù)或函數(shù)指針的JVM語言的人們而言,這無疑會成為關(guān)鍵的一部分(因?yàn)?,?dāng)前所有的JVM語言必須要做這個工作,,若不是在這里,就是在那里),。但是它們的推遲則意味這像JRuby這樣的語言實(shí)現(xiàn)不得不依然要苦苦掙扎,,構(gòu)建前所未有的聰明的代碼來生成策略才能躲過內(nèi)存溢出(或避免吃掉過多的內(nèi)存)。該特性發(fā)布的越早越好,。 甚至有些人認(rèn)為,,盡早發(fā)布,頻繁發(fā)布的頻率應(yīng)該更高,。盡管Java 6的存在已經(jīng)有一段時間了,,其版本模式卻隱藏了這段時間內(nèi)VM上進(jìn)行的一些重大改變。Osvaldo Pinali Doederlein寫道: 主要原因當(dāng)然是JDK6.1,。我一直在跟隨“后-6uN”的發(fā)布,,在這些發(fā)布中Sun/Oracle不斷地擴(kuò)展Java 6的包裹,在不破壞其TCK的同時不斷進(jìn)行改進(jìn),。我已經(jīng)對6u23的第一次構(gòu)建進(jìn)行了測試,,(除了一些Swing的補(bǔ)丁外)它還帶來了另一重大的VM的更新,目前已抵達(dá)最尖端的HotSpot 19了(在當(dāng)時看來是JDK7的最新技術(shù)),。它包括了JDK 7中如此尖端的特性,,譬如,最新的G1收集器,、對JSR-292完整的VM支持,,以及其他諸如64 Gb堆的CompressedOops、CMS補(bǔ)丁和數(shù)千萬的更小的虛擬機(jī)/運(yùn)行時補(bǔ)丁以及改進(jìn),。 推遲的另一好處是,,這樣就能正確地完成該做的事情,,而不需要匆匆忙忙敷衍了事。Lambda項(xiàng)目和核心Java庫中有些沖突的地方(例如,,如何在短期內(nèi)改造Collections類,,以使之能利用Lambda的優(yōu)勢),這種沖突在短期內(nèi)可能會引起問題,。通過為Lambda項(xiàng)目爭取更多時間,,就可在JDK8中解決這些問題,而不會耽誤JDK7的發(fā)布,。不單如此,最新的提案中全面刪除了Java中的函數(shù)類型(早前在InfoQ中已經(jīng)提到這事),。由于到有了更多的時間,,曾經(jīng)有人呼吁重新考慮這個決定??墒?,首要問題是,刪除它的原因尚不明確(類型系統(tǒng)的問題,?亦或是時間的問題?),,它能否回來同樣不明朗。 Jigsaw也是一樣,。Jigsaw是JDK在模塊系統(tǒng)方面的一個嘗試,。雖然OSGi長期以來作為Java在模塊系統(tǒng)方面的標(biāo)準(zhǔn),但是Jigsaw試圖從拆分JVM庫和Java庫的角度重新締造輪子,。Qwylt試圖將二者統(tǒng)一,,但是正如某些地方提到的,事實(shí)上,,JVM和Java庫的目標(biāo)完全不同,。從這個角度,從Java庫中分離出JVM的C計劃將是最好的,。這樣,,諸如 IO、NIO、NNIO,、NNNIO之類的庫就能按照自己的步伐進(jìn)行升級了,,而不再需要依賴于JVM+Java庫的綜合版的每次更新了。 Peter Kriens寫道: Java正在遭到一個錯誤的觀念的緩慢破壞——“Java平臺越大越好”,??墒牵笠馕吨嗟膬?nèi)部依賴,,而依賴來又快速地帶來了平臺的復(fù)雜度,。繩索越多,死結(jié)也就越多,。一次次推遲時間表就是一個征兆,。 在這次簡短的申明中,,Oracle正在考慮將一些早前計劃在JDK7中實(shí)現(xiàn)的某些特性推遲,,因?yàn)樗鼈儗栴}轉(zhuǎn)變成政變。大量支持“盡早發(fā)布,,頻繁發(fā)布”的評論使得他們有勇氣在JavaOne上正式宣布推遲的計劃而且宣稱社區(qū)是支持他們的,。(如果他們單單在Lambda-Dev郵件列表中申明,他們收到的反對聲音一定會多于支持的聲音,。)同時,,這也給了Java平臺一個希望,讓它有更多的時間讓一些不太完善的類(Lambda)變得成熟并且考慮一些東西是否必要(如 Jigsaw),。有一件事是肯定的:將問題公之于眾,,Oracle終于理解了社區(qū)意見的價值。 查看英文原文:JDK7 Feature Slip |
|