Java二十周歲
原文 http://www.infoq.com/cn/news/2015/06/java-20
二十年前的5月23日,Java在Solaris操作系統上發布了首個alpha版本,它帶來了一門全新的語言和一個虛擬機,這款虛擬機承諾代碼能夠“一次編寫、到處運行”。雖然直到1996年才發布了Java的1.0版本,但95年5月23日的這次發布還是為編程語言世界帶來了一次巨大的變革,并且很快坐上了TIOBE編程語言排行榜的頭把交椅,從此之后,它與C和C++始終牢牢占據著榜單的頂部。
Java最早于1991年是以C++變體的形式出現的,但很快就轉變為一門全新的語言Oak,成為Green項目的一部分。這一項目的目標是抽象出一種虛擬機,可以在機頂盒上的嵌入式硬件中運行。雖然當時機頂盒并沒有成為Sun Microsystems公司的主要戰略方向,但Java不久后卻回歸到了嵌入式硬件的領域。早在1992年,它就曾作為一種操作系統應用在PDA設備上,顯示出它的前景和希望。但直到它被移植為面向計算機的一門通用編程語言之后,它才開始真正名揚天下。1994年,Oak更名為Java,這是為了滿足商業標識的需求,在Java生態系統中隨之出現了一系列與咖啡相關的雙關語作為技術名稱,而在類文件格式中出現的0xCAFEBABE這個魔法值也開始為人所知。
在1995年時,Java最初在Solaris系統上實現了alpha發布,一個月后又發布在Windows系統上。這在當時本應是無人過問的小事,但一個關鍵的事件改變了它的命運。在1995年5月舉辦的Sun World大會上發布了HotJava瀏覽器(其中引入了對Applet的支持),隨后Marc Andreessen宣布Netscape將集成Java,并在當年9月發布的Netscape Navigator 2.0中提供內嵌的下載支持,它允許使用早期alpha版本的JDK創建可以在早期的互聯網網站中運行的跨平臺的applet,并對其進行測試,而當時還沒有其它工具能夠實現這一點。在當時,LiveScript語言在短短幾天之內就設計出來了,它的用途是實現交互式網頁(當時被稱為動態HTML或 DHTML),為了趕上Java的潮流,它被重命名為JavaScript,這一名稱也被沿用至今。
1996年1月,Java 1.0版本正式發布了。雖然最初的版本中存在一些bug,但好在Java 1.0.2很快推出了,并成為Java歷史上一個重要的里程碑。Java 1.1版本在不久之后的1997年2月問世了,其中引入了通過JDBC連接數據庫的功能。隨著互聯網覆蓋群體的不斷擴大,以及通過applet使用 Java的便利性,迎來了將java作為企業級編程語言的時代。并且,Java 1.1版本引入了即時編譯器這一重要特性,使得代碼有了更快的執行速度。不過在相當一段時間之后,開發者才不再將Java當作一門“解釋型語言”。
Java 1.2版本于1998年12月發布,它首次對這門語言進行了一系列重大更新,包括內部類的引入。它也使Java版本號首次產生了中斷,出現了Java 2這種說法,并且隨后又成為J2EE(隨之又產生了J2SE)。Java 1.2也同時引入了Swing作為它的一個關鍵組件。其實在Java 1.1中就可以使用這個組件了,在com.sun.swing下面它作為了一個可選的下載項,但在Java 1.2中為它創建了一個新的javax包命名空間(用于區分它與“核心”Java庫)。Swing是由Netscape與Sun共同推出的,它最初被稱為 Java基礎類庫(Java Foundation Class,JFC)。Java 1.2同時也派生了J2ME,這是一種跨平臺的編程環境,可用于低功耗的設備、以及當時只具備有限功能的LCD屏幕和實體按鍵的(非智能)手機上。 Java在移動電話上的應用是成功的,但對于這個編程環境的后續更新疲軟無力,并且也缺乏與手機特性(例如聯系人、紅外端口等等)的集成,因此J2ME應用更傾向于用于簡單的游戲上,而缺乏更廣泛的實用性。(多年之后,Java再次出現在移動電話上,但并不是使用JVM,而是一個專屬于Android的變種。)
隨著JVM支持的改善,Java也在繼續進化。隨后出現了支持Java 1.3的Hotspot(于2000年5月發布)以及支持Java 1.4的JavaWebStart(于2002年2月發布)。但直到Java 1.5(于2004年9月發布)才出現了編程語言方面的重大變革,即泛型的引入。它允許例如List和Map這樣的容器類型指定它們所包含對象的類型,但為了對之前版本保持向后兼容,在編譯期不得不選擇消除類型信息,因此在運行時無法看到類型信息。之后出現的語言,例如C#就從這一失誤中吸取了經驗,它們可以做到在運行時同樣保持類型信息。
Java 1.6(在2006年12月發布,如今被稱為Java 6)并沒有為語言帶來重大的新特性,反倒是開始陷入困境的一個轉折點。在Java 1.6版本發布之后,由于Sun Microsystem公司陷入了長期的經濟問題,最終在2010年被Oracle收購,因此大大推遲了新版本的發布。這段時間所有的外部工作幾乎完全停滯不前,期間只是零星地推出了幾個安全補丁。
Java 7(于2011年7月發布)的推出證明Oracle遵守了它的承諾,為Java帶來了新生。這一版本第三次為Java語言帶來了重大的新語言特性。其中有一些簡單的語法特性,例如允許在數字中使用下劃線以及空菱形操作符(<>)減少了編寫Java程序時的一些不便之處。同時一些其它改動,例如允許在switch語句中使用字符串,以及try-with-resources語法的引入雖然只是小改動,但對于減少代碼的冗長度非常實用。Java 7也在字符碼創建之后首次引入了新的字節碼操作符invokedynamic,雖然在Java語言中大部分情況下都不會用到它。
Java 8(在2014年3月發布)同樣帶來了重大的新特性,包括對lambda的支持,對日期與時間API的功能也增強了很多,對垃圾回收的性能也進行了改進,并且移除了permgen區。
在即將到來的Java版本9中(預計于2016年9月發布),將帶來更多針對運行時的重大變更,包括性能與大小的改進。由于Java 依然在TIOBE榜單上處于領先地位 ,很顯然,它在今后許多年還將繼續綻放光芒。
對于Java初期的專注方向——嵌入式硬件來說,雖然當時的機頂盒與PDA并沒有發展起來,但JVM與Java語言卻存在于每個移動電話的SIM卡中,其中運行著的 JavaCard 程序 遍布在全球超過90億臺的設備上 。Java還運行在 每一臺藍光播放器 中,使它的網絡進一步延伸了。
Oracle創建了一個記錄 Java歷史重大事件年表 的網站,以及一個 Java 20周年紀念的頁面 ,以慶祝這一偉大時刻。
查看英文原文: Java Turns 20