一个好的编译器/解释器决定一个语言的命运
# 一个好的编译器/解释器决定一个语言的命运。
我们常常看到网上有人谈论语言的好坏,引起社区口水战,在这些话题中性能站了很大比例,很少人会去辩论语言的语法合理性,语言的设计缺陷。
语言的性能主要取决于一个好的编译器/解释器和一个开发包。
## 编辑器/解释器
好的编译器或解释器取决于社区的规模,基金会影响力与企业资金投入。
例如 C/C++ 有组织制定标准,各种企业参与其中。
Java 语言的资金投入是空前的,从SUN时代到Oracle时代,几乎所有大型企业都参与其中。
MS C++ / C\# 仅凭微软一家之力也占据一席。
没有实力的Boland Delpha,C++ ... 只能退出市场。
像 D 语言这种优秀的语言,一直没有大企业支持,也很无奈。
2010年之后我们看到几乎大型项目都出自基金会,最有名的当属 Apache 基金会,民间社区项目时代终结。
松散的社区想设计开发性能优异编译器与解释器门槛太高。
Python 基金会每次要募集资金到位才能启动项目,pypy解释器开发了多年无法 release.
Perl 语言能挺到今天实则不易 Perl6 解释器的设计非常坎坷。
动态语言只有 PHP 发展的比较好,原因是他背后至少有一个公司,有全职员工。另外雅虎/Facebook等企业的贡献也是巨大。
node.js 只能依赖谷歌的V8引擎。
## 你要搞明白虚拟机是什么
虚拟机出现降低了语言的开发难度。如果你留意一下会发现最近五年诞生很多新语言。
80%的Java开发者搞不清什么虚拟机。这是因为JVM这个名字(Java 虚拟机),JVM 的设计之初是没有考虑过让VM运行其他语言的,有建议Oracle将“J”去掉变成“VM” 这样更好理解。
VM就是虚拟机,VM通常设计与平台无关,与语言无关,除了JVM还有很多虚拟机例如LLVM, Parrot等等。
运行在JVM虚拟机上的语言有 Scala, Groovy, Python, PHP, Perl ...;Apple 公司主要使用 LLVM 有 clang, swift ;Parrot 的 Perl6 。
有了虚拟机技术,就很容易开发一个全新的语言,首先你要设计好语法,关键字,然后定制VM模板,将你的语法翻译成VM的字节码,你的程序就可以运行。
这项工作至少需要用三年吧,你就能开发出一个新语言。不要高兴太早这时你的语言啥也干不了,因为只有 if,else,print,class,while ... 写个helloworld 是没有问题的。
一个好的语言还有一个好的开发包/库,没有开发包支持,语言啥也干不了,想访问mysql对不起不行,你还需要做很多工作例如Socket, 多线程,文件系统......。
## 开发库/包
如上面所说,你开发了一门全新的语言,但是没有一个好的开发包,那么这个语言十分尴尬。
D语言就是这样一个语言,他的设计是为了替代C++。但是没有十分完善的开发包,只能靠社区提供。
我曾经迷恋过一段D语言,想用它做点东西,MySQL 访问不了,社区的库太旧并且没有sable版本。
不是每个社区都有实力开发核心库/包的,开发核心库需要成百上千的人参与,至少短期开发不出来,所以很多语言都依赖其他库。例如 Scala 依赖 JDK. PHP 依赖glibc以及很多第三方C语言\*-devel.rpm包。
GLIBC 是个奇迹 JDK 是拿钱砸出来的还有微软的 MFC
延伸阅读
作者
陈景峰,昵称 Netkiller, 英文名 Neo
网站:http://www.netkiller.cn