Java 2007:新年展望
開源 Java 編程意味著由開發(fā)人員掌舵 —— 但他們將駛向何方?
|
|
級(jí)別: 初級(jí)
Elliotte Harold
(elharo@metalab.unc.edu), 副教授, Polytechnic 大學(xué)
2007 年 2 月 26 日
2007 年將是載入史冊(cè)的一年,Sun Microsystems 公司將于這一年在開源許可協(xié)議下發(fā)布 Java 開發(fā)包(JDK),從而放棄了對(duì) Java? 平臺(tái)的統(tǒng)馭,將權(quán)力交給了 Java 開發(fā)人員社區(qū)!在本文中,Java 開發(fā)人員 Elliotte Rusty Harold 從各個(gè)方面預(yù)測(cè)了 Java 平臺(tái)的新方向,從腳本到 bug 修復(fù)到新語法。
2006 年又是 Java 平臺(tái)繁榮的一年。盡管遭遇了來自 Microsoft(C#)和腳本語言社區(qū)(Ruby)的沖擊,但 Java 語言仍然保持著其世界頭號(hào)編程語言的地位。同時(shí),盡管 Java 6 的發(fā)布很值得慶祝,但比起宣布 Java 將在 GNU General Public License 下完全開源這一事件來說,卻不免有些黯然失色。Java 在 2007 年還能保持這種勢(shì)頭嗎?讓我們來看一下成敗的可能。
Java 平臺(tái)將成為開源平臺(tái)
2007 年上半年,Sun 將在一個(gè)開源許可協(xié)議下發(fā)布 Java 開發(fā)包(JDK)。解除 JDK 的禁錮對(duì)于 Java 開發(fā)人員社區(qū)來說是巨大的一步,它將在今后的十年中推動(dòng) Java 平臺(tái)的發(fā)展。
JDK 的質(zhì)量將會(huì)顯著改善,因?yàn)槌绦騿T們不再僅僅報(bào)告 bug 并開始修復(fù)。Java Developer Connection 的 bug 報(bào)告將會(huì)包括對(duì) JDK 中的問題部分的詳細(xì)分析,并提供修復(fù)的補(bǔ)丁。正如Linus 法則 所陳述的那樣,“只要給予足夠的關(guān)注,任何 bug 都是顯而易見”,即調(diào)試是可并行進(jìn)行的。優(yōu)化也是一樣。開源使兩者得以 并行。
分支項(xiàng)目
遺憾的是,設(shè)計(jì)并不是和調(diào)試、優(yōu)化一樣可以并行完成的。清潔的 API 有時(shí)也需要有一只獨(dú)裁的手。但獨(dú)裁者的缺點(diǎn)是:有時(shí)他們知道在做什么,有時(shí)卻不知道。意圖成為獨(dú)裁者的各方面之間的競(jìng)爭(zhēng)往往是發(fā)現(xiàn)問題最佳解決方案的惟一方式。
很少有公司能夠負(fù)擔(dān)得起這樣的代價(jià),為一個(gè)產(chǎn)品開發(fā)多個(gè)獨(dú)立的實(shí)現(xiàn),以便在多個(gè)產(chǎn)品中選定保留一個(gè)而摒棄其余的產(chǎn)品,但開源社區(qū)卻在朝這個(gè)方向努力。所以,您會(huì)在 Java 平臺(tái)的各個(gè)層次中發(fā)現(xiàn)分支產(chǎn)品:語言、虛擬機(jī)和庫(kù)。大多數(shù)的分支產(chǎn)品會(huì)失敗,但這沒什么。好主意會(huì)脫穎而出。一些分支產(chǎn)品會(huì)一直存在下去,一些會(huì)重新并入標(biāo)準(zhǔn) JDK 中。明年的這個(gè)時(shí)候,分支產(chǎn)品與主流產(chǎn)品之間的差異也許不會(huì)很明顯,但這個(gè)過程會(huì)繼續(xù)下去。
Sun 會(huì)在幾個(gè)月后發(fā)布 Java 7,Dolphin 的一個(gè)早期的 beta 版,以此作為開端。Sun 無法發(fā)布更早的 JDK 版本,因?yàn)榇嬖谝恍┲挥性?Dolphin 中才能解決的構(gòu)建問題和許可協(xié)議問題。盡管如此,仍有望看到第三方著手進(jìn)一步細(xì)分 Sun 的版本,來提供 Java 6、Java 5、Java 1.4,甚至更早版本的流行開源實(shí)現(xiàn)。
早期的一些探尋分支產(chǎn)品的人們可能會(huì)侵犯 Sun 公司的商標(biāo),收到 Sun 的律師寄來的討厭的律師信。我們需要一個(gè)通用的未注冊(cè)為商標(biāo)的名字,讓所有人都能使用。我建議用 “J” —— 我希望沒人用單字母作商標(biāo)。
開源項(xiàng)目從未消亡,只是有些褪色。就像之前的 Blackdown Project、GNU Classpath、Kaffe 和其他開源 JDK 項(xiàng)目一樣,他們的開發(fā)人員都轉(zhuǎn)向其他事情了。如果一個(gè)項(xiàng)目至今還沒有達(dá)到 1.0,那么恐怕以后永遠(yuǎn)也達(dá)不到了。
期待 Java 7
Dolphin 不會(huì)在 2007 年發(fā)布。2008 年是更為現(xiàn)實(shí)的目標(biāo)。那就是說,工作尚在進(jìn)行中,它的一些功能也許會(huì)作為早期的標(biāo)準(zhǔn)擴(kuò)展或至少作為 beta 登場(chǎng)。
遺憾的是,為一門語言添加功能遠(yuǎn)比刪除功能要簡(jiǎn)單得多。幾乎不可避免地,隨著時(shí)間的推移,語言不是朝著簡(jiǎn)單的方向發(fā)展,而是越來越復(fù)雜,越來越讓人困惑。即使是那些單獨(dú)看起來很好的功能,在彼此疊加后也會(huì)出現(xiàn)問題。
令人遺憾,Java 社區(qū)沒有接受這個(gè)教訓(xùn),盡管這種失敗并無特殊性。但總有一些太酷又太讓人激動(dòng)的新語法令語言設(shè)計(jì)者難以抗拒 —— 即便這樣的新語法不能解決任何實(shí)際問題。于是對(duì) Java 7 的新語言功能就有了巨大的要求,包括閉包、多繼承和操作符重載。
我猜想在這一年結(jié)束前,會(huì)在 Java 7 beta 中看到閉包,也許還能看到操作符重載(有五成的把握),但不會(huì)出現(xiàn)多繼承。Java 中有太多東西是基于單個(gè)根的繼承層次。沒有可行的方式改進(jìn)多繼承,使之適應(yīng)這門語言。
目前有許多語法糖方面的提議,有一些有意義,有一些沒有。許多提議都專注于將像 getFoo()
這樣的方法替換為像 ->
這樣的操作符。
列表
最有可能的是使用數(shù)組語法來實(shí)現(xiàn)集合訪問。例如,不再采用下面這樣的代碼:
List content = new LinkedList(10);
content.add(0, "Fred");
content.add(1, "Barney");
String name = content.get(0);
|
而是編寫如下代碼:
List content = new LinkedList(10);
content[0] = "Fred";
content[1] = "Barney";
String name = content[0];
|
另一種可能性是:允許為列表使用數(shù)組初始化程序語法。例如:
LinkedList content = {"Fred", "Barney", "Wilma", "Betty"}
|
這兩項(xiàng)提議都可以在不改變虛擬機(jī)(VM)的前提下由編譯器稍顯神通即可實(shí)現(xiàn),這是任何修訂過的語法的一項(xiàng)重要特征。這兩項(xiàng)提議都不能使任何現(xiàn)有的源代碼失效或重定義現(xiàn)有的源代碼,對(duì)于新語法來說,這是一個(gè)更為重要的問題。
真正能夠影響開發(fā)人員生產(chǎn)力的特性功能應(yīng)該是用于管理表、樹和映射表的內(nèi)置原語,比如在使用 XML 和 SQL 時(shí)遇到的那些。JavaScript 下的 E4X 項(xiàng)目和 Microsoft 的 Cω 和 Linq 項(xiàng)目是實(shí)現(xiàn)這一想法的先驅(qū),但可悲的是,Java 平臺(tái)似乎錯(cuò)過了這個(gè)機(jī)會(huì)。如果有人想要通過編譯器來玩一個(gè)潛在的救場(chǎng)的游戲,這里是一個(gè)不容錯(cuò)過的好地方。
屬性
很可以還有一些針對(duì)屬性訪問的語法糖。一個(gè)建議是使用 ->
作為調(diào)用 getFoo
和 setFoo
的縮寫。例如,不再使用如下代碼:
Point p = new Point();
p.setX(56);
p.setY(87);
int z = p.getX();
|
而是使用如下代碼:
Point p = new Point();
p->X = 56;
p->Y = 87;
int z = p->X;
|
也有人建議用另外一些符號(hào)來代替 ->
,包括 .
和 #
。
將來,您有可能必須將 Point
類中的相關(guān)字段顯式地標(biāo)識(shí)為屬性,如:
public class Point {
public int property x;
public int property y;
}
|
我個(gè)人對(duì)此并未產(chǎn)生什么深刻的印象。我寧愿 Java 平臺(tái)采納一項(xiàng)更為激進(jìn)的方法,讓我們可以真正地使用公共字段。然而,如果將 getter 或 setter 定義為與字段相同的名稱,然后讀寫字段就會(huì)自動(dòng)地分派到相應(yīng)方法中。這樣做所使用的語法更少,也更加靈活。
隨機(jī)精度算法
|
非操作符重載
值得一提的是,對(duì)標(biāo)準(zhǔn)數(shù)學(xué)符號(hào)的重用不同于 操作符重載,至少不是在 C++ 中引起問題的那種重載。加號(hào)和其他操作符在任何程序中都具有明確的意義。無論在哪一個(gè)程序中,它們的意義都不會(huì)有所更改。對(duì)于相似的操作重用相同的語法讓代碼更易于閱讀。若重新定義語法,使之在不同的程序中有不同的意義,代碼就會(huì)較難理解。
|
|
另一項(xiàng)將方法替換為操作符的建議致力于 BigDecimal
和 BigInteger
。例如,目前您不得不像這樣編寫不限精度的算法:
BigInteger low = BigInteger.ONE;
BigInteger high = BigInteger.ONE;
for (int i = 0; i < 500; i++) {
System.out.print(low);
BigInteger temp = high;
high = high.add(low);
low = temp;
};
|
寫成這樣會(huì)更清晰:
BigInteger low = 1;
BigInteger high = 1;
for (int i = 0; i < 500; i++) {
System.out.print(low);
BigInteger temp = high;
high = high + low;
low = temp;
};
|
這項(xiàng)建議似乎無關(guān)緊要,但它可能會(huì)導(dǎo)致過度使用這些類,進(jìn)而導(dǎo)致尚不成熟的代碼中性能降低。
將 JAM 從 JAR 中分離出來
Java 7 會(huì)撫平 Java 開發(fā)人員長(zhǎng)久以來積聚的憤怒:各種各樣的類加載器和相關(guān)的 classpath。Sun 公司在 Java Module System 這個(gè)問題上經(jīng)受了又一次打擊。數(shù)據(jù)將存儲(chǔ)到 .jam 文件,而不是 .jar 文件中。這是一種 “superjar”,它包含了所有的代碼和元數(shù)據(jù)。最重要的是,Java Module System 將首次支持版本,所以可以說一個(gè)程序需要 Xerces 2.7.1 而不是 2.6。它也允許指定依賴項(xiàng);例如,可以說一個(gè) JAM 程序需要 JDOM。它也要允許在加載一個(gè)模塊時(shí)不必加載全部模塊。最終,它要支持一個(gè)集中式的存儲(chǔ)庫(kù),其中要能提供多個(gè)不同的 JAM 的不同版本,應(yīng)用程序能夠從中挑選所需。如果 JMS 適用,jre/lib/ext 將會(huì)成為過去時(shí)。
包訪問
我也希望 Java 7 能夠稍微放松一下訪問限制。子包也許能夠看到上層包里的包保護(hù)字段和類方法。也就是說,子包也許能夠看到上層包里明確聲明友好性的包保護(hù)成員。不論用哪種方式,將應(yīng)用程序分割成多個(gè)包都會(huì)變得簡(jiǎn)單的多,也會(huì)顯著地改善可測(cè)試性。只要子包中含有單元測(cè)試,就不必使用公共方法去進(jìn)行測(cè)試。
文件系統(tǒng)訪問
自從 1995 年開始,文件系統(tǒng)訪問就成為 Java 平臺(tái)的一個(gè)主要問題。十多年后,還是沒有可信賴的跨平臺(tái)方式來執(zhí)行如復(fù)制或移動(dòng)文件這類基本操作。處理這個(gè)問題是過去至少三個(gè)版本的 JDK(1.4、1.5 和 1.6)的公開問題。遺憾的是,為了迎合不怎么普遍卻更具誘惑的操作,如內(nèi)存映射 I/O,有些乏味但卻很必要的 API 被擱到了一邊。JSR 203 可能會(huì)最終解決這個(gè)問題,給我們一個(gè)可行的、跨平臺(tái)文件系統(tǒng) API。工作組也許會(huì)再一次對(duì)其無比崇尚的真正的異步輸入/輸出文件系統(tǒng)這個(gè)相對(duì)不重要的問題上花費(fèi)過多時(shí)間,從而讓該 API 再一次束之高閣。下一年的這個(gè)時(shí)候我們就會(huì)知道。
實(shí)驗(yàn)
無論做出什么樣的改變,如果它們首先是在開源社區(qū)里實(shí)現(xiàn),那么都是令人愉快的,所以我們只要看一下真正的區(qū)別有多大或多小。為此,Sun 公司的 Peter Ahè 開始了 java.net 上的 Kitchen Sink Project。目標(biāo)是要分別地分派和指定 javac 編譯器,來測(cè)試像這樣的許多不同想法。在博客里寫寫這些可愛的功能是一回事;但真正制造運(yùn)行的代碼則全然是另一回事。
客戶機(jī) GUI
盡管許多人還沒注意到,但 Java 平臺(tái)真正出現(xiàn)在桌面上到現(xiàn)在已經(jīng)有四五年了。已經(jīng)有幾個(gè)優(yōu)質(zhì)的桌面應(yīng)用程序是用 Java 代碼編寫的,包括 RSSOwl、Limewire、Azureus、Eclipse、NetBeans、CyberDuck 等等。這些應(yīng)用程序幾乎用了每一個(gè)可用的 GUI 工具包來編寫,包括 Swing、AWT、SWT,甚至是平臺(tái)原生的工具包,如 Mac OS X 的 Cocoa。我看不出下一年會(huì)有哪個(gè)工具包在眾多工具包中勝出,盡管 Swing 在制造一些保留本色的應(yīng)用程序方面似乎比其他工具包表現(xiàn)得更為出色。
用 Swing 進(jìn)行開發(fā)仍是相對(duì)挑戰(zhàn)的,但隨著 Swing 應(yīng)用程序框架的到來,這種情況也許會(huì)在下一年得到改善。這一框架目前尚在 Java Community Process 中作為 JSR 296 開發(fā)。下面是 JSR 關(guān)于此的描述:
編寫良好的 Swing 應(yīng)用程序試圖為啟動(dòng)和停止,以及管理資源、行為和會(huì)話狀態(tài)的代碼使用相同的核心元素。新應(yīng)用程序從頭開始創(chuàng)建所有這些核心元素。Java SE 不支持構(gòu)造應(yīng)用程序,這常常讓開發(fā)新手們感到有點(diǎn)茫然,特別是在他們打算構(gòu)建一個(gè)規(guī)模遠(yuǎn)超于 SE 文檔中提供的例子的應(yīng)用程序時(shí)。
通過定義 Swing 應(yīng)用程序的基本結(jié)構(gòu),這項(xiàng)規(guī)范(最終)會(huì)添補(bǔ)該空白。它會(huì)定義一小套可擴(kuò)展的類或 “框架”,用于定義相對(duì)于大多數(shù)桌面應(yīng)用程序較普遍的基礎(chǔ)設(shè)施。
Swing 應(yīng)用程序框架應(yīng)支持典型應(yīng)用程序中的大多數(shù)東西,允許開發(fā)人員恰在一些自定義的點(diǎn)處插入,如啟動(dòng)和停止時(shí)。在啟動(dòng)和停止之間,它將處理 windows 的保存和恢復(fù),以及應(yīng)用程序的其他部分。最后,它將允許開發(fā)人員編寫在 Swing 事件分派線程外運(yùn)行的異步行為。
改善 JavaBeans 以及所有依賴它的東西(包括 Swing)的工作尚在繼續(xù)。JSR 295 正在定義一種將 bean 綁定到一起的標(biāo)準(zhǔn)方式,這樣,對(duì)一個(gè) bean 的修改就會(huì)自動(dòng)地反映到其他的 bean。例如,一個(gè) GUI 網(wǎng)格 bean 會(huì)在其相關(guān)數(shù)據(jù)庫(kù) bean 改變時(shí)自動(dòng)更新。
最終,JSR 303 正在實(shí)現(xiàn)一門基于 XML 的驗(yàn)證語言,來聲明式地指定任何給定的 bean 將取什么值。int 屬性將必須介于 1 到 10 之間,或者 String 屬性必須包含一個(gè)合法的電子郵件地址。如果幸運(yùn),這一切都將在年底以 beta 形式提供,并將在來年的 Java 7 中按時(shí)完成。
作為桌面語言的 Java 平臺(tái)
一些程序員們選擇用 Java 代碼編寫他們的桌面應(yīng)用程序是因?yàn)樗鼈兤珢圻@門語言,但大多數(shù)程序員則是被多平臺(tái)轉(zhuǎn)換這一強(qiáng)烈的渴望所驅(qū)動(dòng)。對(duì) Java 平臺(tái)作為桌面語言的興趣于是就同非 Microsoft 桌面的數(shù)目緊緊地聯(lián)系了起來。讓我們認(rèn)為 Java 編程會(huì)在來年出現(xiàn)在三大主流桌面上。
Windows
Swing 在下一年會(huì)繼續(xù)對(duì)其類似 Windows 的外觀作出小的改進(jìn),尤其是轉(zhuǎn)換到開源開發(fā)這一部分。結(jié)果,純 Java 程序如 LimeWire 甚至?xí)仍?Windows 下看起來更加具原生感。但開發(fā)原生 Windows 應(yīng)用程序所選擇的語言仍是 C#(還有一些 C 和 C++ 的追隨者),而開發(fā)框架會(huì)選用 .NET。Java 代碼不會(huì)對(duì) Windows 生態(tài)系統(tǒng)造成任何顯著打擊。
Macintosh
像 Microsoft 一樣,Apple Inc. 也使用了相當(dāng)多被拋棄的 Java 代碼。Apple 公司喜愛 Objective C 和 Cocoa,但最后的結(jié)果是相同的:只用 Mac 的開發(fā)人員會(huì)繼續(xù)減少 Java 代碼,而選擇 Apple 偏愛的語言和環(huán)境。
積極的一面是,盡管 Apple 不再在其私有的 API(如 QuickTime 和 Cocoa)中支持 Java 代碼,Apple VM 已經(jīng)比前些年改進(jìn)了不少。Apple 的 Java 6 移植版不久就會(huì)發(fā)布。它不會(huì)是開源的(不同于 Sun 的 JDK),但開源程序員們還是會(huì)著手修補(bǔ)它的 bug。
Linux
GPL 許可協(xié)議將使這成為可能,即將 Java 代碼綁定到最純的開源 Linux 發(fā)行版中,這將使 Java 平臺(tái)成為 Linux 開發(fā)中更為吸引人的語言。如果這些在五年前發(fā)生的話:Linux 社區(qū)將不會(huì)不得不掙扎于使用 C 語言,而 Mono 也不會(huì)成為必要。
已經(jīng)有了針對(duì) Gnome 和 KDE 的 Java 綁定,所以希望這些會(huì)在接下來的一年里吸引更多人的關(guān)注。也期望至少有一個(gè)即將進(jìn)行的開發(fā) Linux GUI 程序的主要項(xiàng)目使用 Java 語言而不是 C、C++ 或 C#。
Ruby 取勝
|
臃腫的軟件
JavaScript 已經(jīng)和 JDK 6 綁定到了一起。其他語言也許會(huì)添加進(jìn) JDK 7。我覺得那樣會(huì)有點(diǎn)臃腫。首先,Sun 公司絕不會(huì)加入一門語言就停下來。如果它選了 BeanShell,擁護(hù) Groovy 的家伙也會(huì)要求加入。如果加入了 Groovy,用 Ruby 的家伙也會(huì)堅(jiān)持要加入。如果 Ruby 加入,還能忽略 Python 嗎?標(biāo)準(zhǔn) JDK 已經(jīng)太龐大了。支持多種腳本語言是一回事,但將它們綁定到一起還是同一件事嗎?策略性的改進(jìn)應(yīng)該是支持所有這些語言,但一個(gè)也不綁定進(jìn)來。
積極的一面是,Sun 公司正在研究減小初始下載尺寸和減少應(yīng)用程序啟動(dòng)時(shí)間的方法,尤其是 applet 和 Java Web Start 應(yīng)用程序。可能的方法是,將大量的類庫(kù)放到服務(wù)器上或放到速度較慢的后臺(tái)線程中,只下載需要的部分。
|
|
如果我們只說一門語言,世界將會(huì)索然無味。盡管 Java 平臺(tái)是開發(fā)成熟應(yīng)用程序的絕佳選擇,但它從來就不適應(yīng)于小程序或宏。Java 6 意識(shí)到了這一點(diǎn),它添加了 javax.script 包實(shí)現(xiàn),以便和腳本語言(如 BeanShell、Python、Perl、Ruby、ECMAScript 和 Groovy)進(jìn)行互操作,也添加了一項(xiàng) invokedynamic
虛擬機(jī)指令來允許將動(dòng)態(tài)類型語言直接編譯為 Java VM。
2007 年,我將寶押在 Ruby 上,盡管它并不是我個(gè)人的最愛。對(duì)于我來說,Python 代碼似乎比 Ruby 代碼更簡(jiǎn)潔更易于理解,我認(rèn)為大多數(shù) Java 程序員都會(huì)這樣認(rèn)為。然而,Python 出來的不是時(shí)候。許多開發(fā)人員不得不在學(xué)習(xí) Python 代碼還是學(xué)習(xí) Java 代碼間作出選擇,而多數(shù)人選擇了 Java 代碼。既然他們終于弄懂了 Java 語法,又打算在工具箱中添加另一門語言,他們想要的是明天的語言,而不是昨天的語言,而那門語言似乎就是 Ruby。更重要的是,Ruby 的 Ruby on Rails 是一個(gè)絕對(duì)殺手級(jí)的應(yīng)用程序。它的簡(jiǎn)單性對(duì)于多數(shù)覺悟了的 Java 企業(yè)版(Java Enterprise Edition,JEE)開發(fā)人員來說具有難以置信的魅力。
除了 Rails,比起其他腳本語言,JRuby 項(xiàng)目和現(xiàn)有的 Java 代碼很好或更好地集成到了一起。事實(shí)上,JRuby 也許會(huì)超越標(biāo)準(zhǔn) Ruby 分布,并成為 Ruby 程序員們更偏愛的平臺(tái),而不止是 Java 程序員們將 Ruby 作為第二種選擇。這很好。Python 程序員們會(huì)這樣反對(duì):他們這些年來已經(jīng)將 JRuby 最好的方面加入到 Jython 中,他們是對(duì)的,但我討論的是 2007 年將 發(fā)生什么,而不是應(yīng)該 發(fā)生什么。這很不幸但卻是事實(shí):Ruby 獲得了契機(jī),而 Python 沒有。
其他腳本語言會(huì)被逐漸逐出界外。Perl 太過時(shí)了,不能很好地適應(yīng)現(xiàn)代應(yīng)用程序。Groovy 缺少明確的視角,還趨向于將計(jì)算機(jī)科學(xué)的時(shí)髦用語凌駕于可用性和熟悉性之上,這讓它深受其苦。BeanShell、Jelly,還有半打其他語言可能都從未吸引過超過一個(gè)的稱心追隨者。來年的這個(gè)時(shí)候,到處都會(huì)是這樣的吶喊:Ruby 將成為 Java 程序員們首選的腳本語言。
集成開發(fā)環(huán)境(IDE)會(huì)變得更好
一批垂死的 IDE 真正點(diǎn)燃了 2006 之火,再一次證明競(jìng)爭(zhēng)是好事。由于 Eclipse 造成的窘境,Sun 將一些能量和資源注入到 NetBeans 當(dāng)中,最終開始了一場(chǎng)貌似激烈的競(jìng)爭(zhēng)。通過采取一些措施,到 2006 年底,NetBeans 甚至超越了 Eclipse。它針對(duì)設(shè)計(jì) GUI 具有卓越的原生化外觀和出色得多的工具。它所不具有的是 Eclipse 社區(qū)。相比 NetBeans,更多的插件和第三方產(chǎn)品是基于 Eclipse 的 —— 至少?gòu)牧可细?—— 并且這種趨勢(shì)僅呈加速之勢(shì)。
來年,Eclipse 會(huì)努力開發(fā) 3.3 版,應(yīng)于 2007 年發(fā)布。Sun 也可能成功地將 NetBeans 6 公諸于世。這兩個(gè)版本都不太可能是重要的版本:它們只是關(guān)注于添加這里或那里的小功能、修復(fù) bug 和簡(jiǎn)化用戶界面(盡管可能還沒有做到應(yīng)該要做的那么多)。
NetBeans 可能將繼續(xù)贏得 Eclipse 的市場(chǎng)份額。這是從很早以前就開始了的,這方面還有更大的增長(zhǎng)空間。(Sun 無情地推動(dòng) NetBeans 和 JDK 下載并沒傷害到任何一個(gè))。到本年度結(jié)束時(shí),兩種 IDE 也許將瓜分這個(gè)市場(chǎng),平分天下。
同時(shí),自信滿滿的 IntelliJ IDEA 用戶將繼續(xù)疑惑于這一團(tuán)混亂的場(chǎng)面。他們的信念是:IntelliJ IDEA 是最好的 Java IDE。盡管如此,大多數(shù)用戶不會(huì)對(duì) 500 美元的標(biāo)價(jià)視而不見,因此其市場(chǎng)份額將繼續(xù)在 5% 上下波動(dòng)。
Java 企業(yè)版
沒有哪部分 Java 編程像 JEE 這么成功,也沒有哪部分 Java 編程像 JEE 那樣招致如此多的斥責(zé)。它是一門每個(gè)人都喜歡去討厭的技術(shù)。它復(fù)雜、費(fèi)解并且是重量級(jí)的。沒有哪部分 Java 編程有這多么第三方努力將其整個(gè)替換或部分替換:Spring、 Hibernate、Restlet、aspects、Struts …… 等等。雖然如此,幾乎每一個(gè)招聘 Java 程序員的商家都要求其有 JEE 經(jīng)驗(yàn),因此 Sun 確實(shí)是正確的。
在企業(yè)級(jí)領(lǐng)域里,我能看到的全部趨勢(shì)就是簡(jiǎn)單。大塊頭的框架出局;小而簡(jiǎn)單的加入了進(jìn)來。隨之增長(zhǎng)的是,客戶拒絕大塊頭的 JEE 棧部分,這種趨勢(shì)還在繼續(xù)。作為替代的是,客戶轉(zhuǎn)向了像 Spring 這樣更簡(jiǎn)單的框架或者完全脫離 Java 平臺(tái)而投向 Ruby On Rails。對(duì)于更簡(jiǎn)單、更易理解的系統(tǒng)的需求也驅(qū)動(dòng)著對(duì)面向服務(wù)架構(gòu)(SOA)和具象狀態(tài)傳輸(Representational State Transfer, REST)的興趣。
我們能夠預(yù)料出,朝著簡(jiǎn)單發(fā)展的趨勢(shì)在 2007 年將會(huì)延續(xù)。許多對(duì) Rails 留下印象的人正試圖在其他語言上復(fù)制它的成功,比如 Python (Turbo Gears)、Groovy (Grails) 以及 Java (Sails)。這其中的某個(gè)有可能成功,但它們?nèi)绻惶岢鲆恍?qiáng)有力的新舉措的話,就不會(huì)取得成功。因此,企業(yè)仍將加載他們已有的框架:SOA、REST 和 Rails。
Java 微型版(Java Micro Edition, Java ME)
將視線從最大平臺(tái)移到最小平臺(tái)上來,我們能期待嵌入式世界帶給我們什么?多年以來,Java 平臺(tái)已經(jīng)在小設(shè)備上取得了相當(dāng)大的成功,而 2007 很可能會(huì)以這一成功為基礎(chǔ)。首先,關(guān)注一下移動(dòng)信息設(shè)備描述(Mobile Information Device Profile,MIDP) 的第 3 版,來利用當(dāng)今更為強(qiáng)大的設(shè)備的功能。特別是,我們應(yīng)該很快就能在一個(gè)虛擬機(jī)上運(yùn)行多個(gè) MIDlet,包括在后臺(tái)運(yùn)行一個(gè)或多個(gè)。同樣也關(guān)注一下加密記錄管理系統(tǒng)(RMS)存儲(chǔ)和 IPv6 支持。
Java ME 的可擴(kuò)縮的 2D 矢量圖形(Scalable 2D Vector Graphics, SVG)API 2.0 當(dāng)前正在開發(fā)中,它應(yīng)擴(kuò)展在許多設(shè)備中的動(dòng)畫功能。除 SVG 動(dòng)畫之外,它也將支持流式音頻和視頻。如果移動(dòng)網(wǎng)絡(luò)開放,這是相當(dāng)重要的 —— 想想在手機(jī)上的 YouTube。(當(dāng)然,如果網(wǎng)絡(luò)開放,那就只是沒人愿意看的兩英寸的公司廣告。在這點(diǎn)上,我對(duì)美國(guó)的情況持悲觀態(tài)度,而在歐洲也許會(huì)更有趣。)
移動(dòng)開發(fā)者也能期望本年推出第一款支持 Java ME 的 XML API 的手機(jī)。此 API 是 SAX、DOM、 StAX 和 JAXP 的一個(gè)精選子集,設(shè)計(jì)它是為了適應(yīng)內(nèi)存受限的手機(jī)。許多人認(rèn)為真正的 XML 不適合手機(jī) —— 他們是對(duì)是錯(cuò)今年就能見分曉。
盡管好事連連,Apple 的 iPhone 仍對(duì) Java 平臺(tái)(作為移動(dòng)電話開發(fā)平臺(tái))構(gòu)成了一個(gè)主要的威脅。iPhone 已經(jīng)是這個(gè)星球上最火爆、最有魅力的手機(jī),它已經(jīng)發(fā)布了六個(gè)月。問題在于它將成為一個(gè)相對(duì)封閉的平臺(tái),甚至按手機(jī)網(wǎng)絡(luò)標(biāo)準(zhǔn)也是如此,并且它沒打算運(yùn)行 Java 代碼。無需多說,對(duì)于任何試圖向手機(jī)、PDA 和個(gè)人通訊設(shè)備推銷第三方應(yīng)用程序的人來說,這都是一個(gè)恐怖的消息。
結(jié)束語
由于 JDK 的開源,2007 注定成為自互聯(lián)網(wǎng)炸彈(dot bomb)以來 Java 編程界最令人激動(dòng)的年份。截至目前,Java 平臺(tái)一直被 Sun 公司的目標(biāo)和投資能力所制約,但這種情況即將改變。有了開發(fā)者社區(qū)掌舵,我們有望看到 Java 編程全方位發(fā)展,而這種發(fā)展很可能突然出現(xiàn)。開發(fā)人員將使用 Java 代碼(以及針對(duì) Java 代碼)完成比以往更多的任務(wù)。桌面、服務(wù)器以及嵌入式:一切都會(huì)加速!是的,在這個(gè)過程中會(huì)有一些重大的失敗,但失敗也是樂趣的一部分!好的想法將脫穎而出,不好的將被淘汰。如果您對(duì) Java 平臺(tái)有任何不滿意,或者有一直迷惑的地方,啟動(dòng)您的 IDE,開始改造吧!
女士們、先生們!啟動(dòng)您的編譯器吧!
參考資料
學(xué)習(xí)
獲得產(chǎn)品和技術(shù)
-
下載 Java 7
:開放源碼的書面文件尚未簽定,但您仍然能通過使用 Java 7 的源碼取得領(lǐng)先的地位。
-
Sails
:一個(gè)用 Java 代碼編寫的 Rails 的翻版。
討論
關(guān)于作者
|
|
|
Elliotte Rusty Harold 來自新奧爾良,現(xiàn)在他還定期回老家喝一碗美味的秋葵湯。不過目前,他和妻子 Beth 定居在紐約臨近布魯克林的 Prospect Heights,同住的還有他的貓咪 Charm(取自夸克)和 Marjorie(取自他岳母的名字)。他是 Polytechnic 大學(xué)計(jì)算機(jī)科學(xué)的副教授,他在該校講授 Java 和面向?qū)ο缶幊獭K?Web 站點(diǎn) Cafe au Lait 已經(jīng)成為 Internet 上最流行的獨(dú)立 Java 站點(diǎn)之一,它的姊妹站點(diǎn) Cafe con Leche 已經(jīng)成為最流行的 XML 站點(diǎn)之一。 他最近編著的一本書是 Java I/O, 2nd edition。他目前在從事處理 XML 的 XOM API、Jaxen XPath 引擎和 Jester 測(cè)試覆蓋率工具的開發(fā)工作。
|