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