69 岁的 Java 之父退休了!近亿人因他受益
近日,Java 语言之父 James Gosling 在领英上发文宣布自己即将退休。他在博文中写道:“我现在终于退休了。干了这么多年软件工程师,是时候享受生活了。尽管曾经经历过疫情肆虐、业界萧条,但在亚马逊的过去七年里,我过得非常愉快。我还有很多未尽事宜要去完成,我将满怀期待开启新征程”。
Java 的故事始于 1991 年,当时 Sun Microsystems 试图将其在计算机工作站市场的领先地位扩展到新兴且发展迅速的个人电子产品市场。几乎没有人预料到 Sun 即将创建的编程语言会使计算大众化,激发了一个全球范围的社区,并成为了一个由语言、运行时平台、SDK、开源项目以及许多工具组成的持久软件开发生态系统的平台。
经过 James Gosling 领导团队数年秘密开发后,Sun 于 1995 年发布了具有里程碑意义的“一次编写,随处运行” 的 Java 平台,并将重点从最初的交互式电视系统设计转到了新兴的万维网应用程序上。在本世纪初,Java 就已经开始为从智能卡到太空飞行器的一切制作动画了。如今,数以百万计的开发人员在使用 Java 编程,它至今仍然是工业界最受欢迎和使用最多的语言。
Java 语言编年史
Java 语言源于 1991 年 Sun 公司 James Gosling 领导的的 Ork 项目,1995 年 Sun 公司正式起名为 Java,并提出“Write once, Run anywhere"的口号。
1996 年 1 月 Java 1.0 发布,提供了一个解释执行的 Java 虚拟机,其时恰逢互联网开始兴起,Java 的 Applet 能在 Mozilla 浏览器中运行,被看作是未来的互联网语言。
1997 年 2 月 Java 1.1 发布,Java 语言的基本形态基本确定了,比如反射 (reflection), JavaBean,接口和类的关系等等,一直到今天都保持一致。然而,Java 最初的一些目标,如在浏览器中执行 Applet,以及跨平台的图形界面 Awt 很快遭遇到负面的评价。
1998 年 12 月,Java 第一个里程碑式的版本,即 Java 1.2 发布了。这个版本使用了 JIT(Just in time)编译器技术,使得语言的可迁移性和执行效率达到最优的平衡,同时 Collections 集合类设计优良,在企业应用开发中迅速得到了广泛使用。Sun 公司把 Java 技术体系分成三个方向,分别是 J2SE(面向桌面和通用应用开发),J2EE(面向企业级应用开发),J2ME(面向移动终端开发)。这个分类影响非常久远,体现出主流语言设计者的思想:针对于不同的应用领域,在形态,API 集合等进行划分。
2000 年 5 月,Java 1.3 发布,这个版本中 Corba 作为语言级别的分布式对象技术,成为 J2EE 的一个技术前提。J2EE 受到 Corba 的设计的影响较大,早期 EJB 的 Home,接口和实现就是 Corba 在 C 语言的实现,被移植到 Java 语言之中。J2EE 中的 Servlet 规范获得了极大的成功,伴随着互联网的兴起,和浏览器直接通过 HTTP 协议交互的 Servlet,和众多的 MVC 框架,成为 Web1.0 的网红。
2002 年 2 月,Java 1.4 发布,Java 语言真正走向成熟,提供了非常完备的语言特性,如 NIO,正则表达式,XML 处理器等。同年微软的.NET 框架发布,两者开始了为期十几年的暗自竞争。从语言特性上来说,.NET 后发先至,一直处于优势。但 Java 依赖良好的开发者生态,绝大多数大型软件公司的使用者众多和不断贡献,以及对 Linux 操作系统良好的支持,渐渐的在服务器端获得优势地位。
2004 年 9 月,Java 5 发布,Sun 不再采用 J2SE, J2EE 这种命名方式,而使用 Java SE 5, Java EE 5 这样的名称。我认为 Java 5 是第二个里程碑式的版本。Java 语言语法发生很大的变化,如注解 (Annotation),装箱 (Autoboxing),泛型 (Generic),枚举 (Enum),foreach 等被加入,提供了 java.util.concurrent 并发包。Java 5 对于 Java 语言的推动是巨大的,特别是注解的加入,使得语言定义灵活了很多,程序员可以写出更加符合领域定义的描述性程序。
2006 年 5 月, JavaEE 5 发布,其中最主要是 EJB3.0 的版本升级。在此之前,EJB2.X 版本被广泛质疑,SpringFramework 创建者 Rod Johnson 在经典书籍“J2EE Development without EJB“中,对 EJB2 代表的分布式对象的设计方法予以批驳。EJB3 则重新经过改造,使用注解方式,经过应用服务器对 POJO 对象进行增强来实现分布式服务能力。在某种程度,可以说 EJB3 挽救了 JavaEE 的过早消亡。
2006 年 12 月,Java 6 发布,这个语言语法改进不多,但在虚拟机内部做了大量的改进,成为一个相当成熟稳定的版本,时至今日国内的很多公司依然以 Java6 作为主要 Java 开发版本来使用。同年 Sun 公司做出一个伟大的决定,将 Java 开源。OpenJDK 从 Sun JDK 1.7 版本分支出去,成为今天 OpenJDK 的基础。OpenJDK6 则由 OpenJDK7 裁剪而来,目前由红帽负责维护,来满足 Redhat Enterprise Linux 6.X 用户的需要。
2009 年 12 月,JavaEE 6 发布,这个版本应该说是 JavaEE 到目前为止改进最大影响最深远的一个版本。因为 JavaEE5 只有 EJB3 适应了 Java 注解语法的加入,而 EE6 全面接纳了注解。CDI 和 BeanValidation 规范的加入,在 POJO 之上可以定义完备的语义,由容器来决定如何去做。Servlet 也升级到 3.0 版本,并在接口上加入异步支持,使得系统整体效率可以大幅提高。EE 划分为 Full Profile 和 Web Profile,用户可以根据自己的需要选择不同的功能集。
在此之前,Oracle 已经以 74 亿美金的价格收购了 Sun 公司,获得了 Java 商标和 Java 主导权。也收购了 BEA 公司,获得市场份额最大的应用服务器 Webogic。JavaEE 6 虽然是收购之后发布的版本,但主要的设计工作仍然由原 Sun 公司的 Java 专家完成。
2011 年 7 月,Oracle 发布 Java 7, 其中主要的特性是 NIO2 和 Fork/Join 并发包,尽管语言上没有大的增强,但我个人认为,自从 Oracle JDK(包括 OpenJDK7),Java 虚拟机的稳定性真正做到的工业级,成为一个计算平台而服务于全世界。
2013 年 6 月,Oracle 发布 JavaEE 7,这个版本加入了 Websocket,Batch 的支持,并且引入 Concurrency 来对服务器多线程进行管控。然而所有的子规范,算上可选项 (Optional) 总共有 40 多项,开发者光是阅读规范文本就很吃力了,更不要说能够全局精通掌握。JavaEE 规范的本质是企业级应用设计的经验凝结,每一个 API 都经过众多丰富经验的专家反复商议并确定。各个版本之间可以做到向后兼容,也就是说,即使是 10 年前写的 Servlet 程序,当前的开发者也可以流畅的阅读源码,经过部分代码调整和配置修改,可以部署在当今的应用服务器上。反过来,今后用 Servlet4 写的程序,浏览器和服务器通信使用全新的 HTTP/2 协议,但程序员在理解上不会有障碍,就是因为 Servlet 规范的 API 非常稳定,基本没有大的变化修改。
2014 年 3 月,Oracle 发布 Java 8,这个版本是我认为的第三个有里程碑意义的 Java 版本。其中最引人注目的便是 Lambda 表达式了,从此 Java 语言原生提供了函数式编程能力。语言方面大的特性增加还有:Streams,Date/Time API, 新的 Javascript 引擎 Nashorn,集合的并行计算支持等,Java8 更加适应海量云计算的需要。
按照原来的计划,Java 9 JDK 版本应该在 2017 年 7 月发布,但因为模块化 (JPMS) 投票未通过的原因,推迟到 2017 年 9 月份发布。
也正是从这个版本后,Java 迎来了版本快速迭代期。此后,JDK 更新版本的速度令开发者应接不暇,几乎每半年就有一个版本,虽然 Oracle 的目的是好的,为了避免因功能增加而引发的跳票风险,但不得不承认,版本更新的节奏实在是有点过于频繁。
这就导致一个问题,好不容易更新一个版本,用了六个月后,Oracle 不维护了。针对这个问题,Oracle 给出的解决方案是每六个 JDK 大版本才会被长期支持(Long Term Support,LTS)。
2018 年 9 月 25 日,JDK 11 版本发布。
2021 年 JDK 17 版本发布,这也是一个长期支持版本。JDK 12、JDK 13、JDK 14、JDK 15、JDK 16、JDK 18、JDK 19 都是过渡产品,就好像是试验品一样,不太受开发者欢迎。
今年 3 月份,Oracle 正式发布 Java 22。据悉,全新的 Java 版本提供 12 个 JDK 增强建议,有助于优化 Java 语言并提升开发平台的性能、稳定性和安全性,包括对 Java 语言、其 API 和性能,以及 Java 开发工具包(JDK)中工具的增强功能,以帮助开发人员提高工作效率。
历经 20 多年的发展,Java 至今仍然是开发者心目中 Top 3 的编程语言。在今年 3 月公布的 IEEE Spectrum 2023 年度编程语言排行榜中,Java 仅居 Python 之后位列次席。自 1995 年诞生以来,Java 始终是互联网行业炙手可热的编程语言。