2009-03-28

[感想] 平台,语言,库

早期的时候,要发展一门语言,需要考虑两件事情,语言本身,以及这个语言所用到的库,这时候的层次结构比较简单,就是 "操作系统 | 语言 | 库 | 程序"。

稍后出现的 Java 引入了 JVM 平台的概念,现在的层次结构就变成了 "操作系统 | 平台 | 语言 | 库 | 程序"。

这还不够, .NET 上的库已经不再依赖于语言,所以现在又变成了 "操作系统 | 平台+库 | 语言 | 程序"

这样做的好处在于:

  • 创建一门新语言不再是一门庞大的工程,你无须创建库,语言的推广不再被你所需的库没有准备好,库没有稳定这类事情的拖累。

  • 当你想革新你的项目,采用一种新的语言时,不用在意如何移植旧项目,只要新旧语言能采用同一种平台即可



事实上 JVM 平台早就有这种能力,不过却没有好好推广这种能力,早期只有 Java 和 JSP 这两种语言工作在 JVM 平台上(JSP的应用范围还严重受限),Jython, Groovy, JRuby 之类语言很晚才得到一定程度的应用,这个时候 .NET 平台已经发展了很久了。

这是我为什么不看好 D 语言的原因,他基于 C 语言的平台,却不能反馈给 C 平台(C++ 比他稍好,能用 extern "C" 的方式反馈),当然这跟 C 平台本身也有一点关系,仅有 "栈", "堆", "函数" 这样几个概念,难免有些难用。

同样我也不看好函数式语言成为一门通用的语言,他们与现有的平台的概念离得太远,同时又没有建设好自己的平台。

3 comments:

  1. 有无数的语言都是基于C却不能(很难)反馈C的,python ruby java

    我认为D语言在走objc的路,除非有很好的机遇,否则推广及其困难

    ReplyDelete
  2. perl, python, ruby, php 这几种语言都属于这种类型, 最开始的时候都是针对快速开发来做的,当时没有考虑这个问题.不过现在 jython, ironpython, jruby 不都出来了么? 在 JVM 和 .NET 平台实现了一定程度的反馈能力.

    Java 是另外一个例子,他建立了自己的平台, 保留 jni 只是保留一个优化余地而已.

    ReplyDelete
  3. 对于更高级的语言来说是 "操作系统 | 平台+底层库 | 语言 | 高层库 | 程序"。

    例如 JRuby 和 IronRuby 就是这样。对于语言的用户来说,真正有吸引力的是语言+高层库,Ruby on Rails 在 Web 开发领域的流行就是个很好的例子。

    D 其实也有很方便的到 C 的接口,参考 http://www.digitalmars.com/d/2.0/interfaceToC.html。并且对于第三方 C 库还有个 htod 工具用来转换 header 文件。

    ReplyDelete