稍后出现的 Java 引入了 JVM 平台的概念,现在的层次结构就变成了 "操作系统 | 平台 | 语言 | 库 | 程序"。
这还不够, .NET 上的库已经不再依赖于语言,所以现在又变成了 "操作系统 | 平台+库 | 语言 | 程序"
这样做的好处在于:
- 创建一门新语言不再是一门庞大的工程,你无须创建库,语言的推广不再被你所需的库没有准备好,库没有稳定这类事情的拖累。
- 当你想革新你的项目,采用一种新的语言时,不用在意如何移植旧项目,只要新旧语言能采用同一种平台即可
事实上 JVM 平台早就有这种能力,不过却没有好好推广这种能力,早期只有 Java 和 JSP 这两种语言工作在 JVM 平台上(JSP的应用范围还严重受限),Jython, Groovy, JRuby 之类语言很晚才得到一定程度的应用,这个时候 .NET 平台已经发展了很久了。
这是我为什么不看好 D 语言的原因,他基于 C 语言的平台,却不能反馈给 C 平台(C++ 比他稍好,能用 extern "C" 的方式反馈),当然这跟 C 平台本身也有一点关系,仅有 "栈", "堆", "函数" 这样几个概念,难免有些难用。
同样我也不看好函数式语言成为一门通用的语言,他们与现有的平台的概念离得太远,同时又没有建设好自己的平台。