为什么所有流行脚本语言的解释器都是用C而不是C++编写的?
您为什么认为它们是用C编写的?在我看来,大多数脚本语言的实现都是用其他语言而不是C编写的。以下是几个例子:
Ruby:
BlueRuby: 用ABAP编写
HotRuby: JavaScript
Red Sun: ActionScript
SmallRuby: Smalltalk/X
MagLev: Ruby, GemStone Smalltalk
Smalltalk.rb: Smalltalk
Alumina: Smalltalk
Cardinal: PIR, NQP, PGE
RubyGoLightly: Go
YARI: Io
JRuby: Java
XRuby: Java
Microsoft IronRuby: C#
Wilco Bauwer原始的IronRuby: C#
Ruby.NET: C#
NETRuby: C#
MacRuby: Objective-C
Rubinius: Ruby, C++
MetaRuby: Ruby
RubyVM: Ruby
Python:
IronPython: C#
Jython: Java
Pynie: PIR, NQP, PGE
PyPy: Python, RPython
PHP:
P8: Java
Quercus: Java
Phalanger: C#
Perl6:
Rakudo: Perl6, PIR, NQP, PGE
Pugs: Haskell
Sprixel: JavaScript
v6.pm: Perl5
Elf: CommonLisp
JavaScript:
Narcissus: JavaScript
Ejacs: ELisp
Jint: C#
IronJS: F#
Rhino: Java
Mascara (ECMAScript Harmony参考实现): Python
ECMAScript 4参考实现: Standard ML
HotSpot JVM是用C++编写的,Animorphic Smalltalk VM(由HotSpot和V8衍生而来)是用C++编写的,Self VM(基于Animorphic Smalltalk VM)是用C++编写的。
有趣的是,在许多上述情况下,那些不是用C编写的实现实际上比用C编写的实现更快。
作为两个使用C语言编写的实现示例,可以看一下Lua和CPython。在这两种情况下,它们实际上是用非常古老版本的C语言的一个小子集编写的。原因是它们希望具有高度的可移植性。例如,CPython可以运行在没有C++编译器的平台上。此外,Perl是在1989年编写的,CPython是在1990年,Lua是在1993年,SpiderMonkey是在1995年编写的。而C++直到1998年才被标准化。