为什么所有流行脚本语言的解释器都是用C语言编写的(如果不是C语言,至少不是用C++编写)?

wnd*_*dsr 8 interpreter scripting-language

我最近问了一个关于从C++切换到C来为速度编写解释器的问题,我得到了一个人的评论,问我为什么要切换到C.

所以我发现我实际上不知道为什么 - 除了C++面向对象的系统有更高的抽象,因此更慢.

  • 为什么所有流行的脚本语言的解释器都是用C语言而不是用C++编写的?

如果你想告诉我一些其他语言的解释器不在C中,请用popular scripting languages这个问题替换所有出现的问题Ruby, Python, Perl and PHP.

Jas*_*ams 13

C是一种非常古老的语言,因此几乎支持所有可用的系统.因此,对于任何需要移植到任何地方的项目来说,它都是一个不错的选择.


jal*_*alf 10

Ruby可以追溯到1995年.如果你在1995年写一个翻译,你有什么选择?Java于同年发布.(并且在v1.0中非常缓慢,并且在很多方面,并不值得使用)

C++尚未标准化,编译器对它的支持非常粗略.(它还没有向我们今天使用的"现代C++"过渡.我认为STL也是在这个时候提出标准化的.直到几年之后它才真正被添加到标准中.甚至添加之后,1)编译器需要花费几年时间才能赶上,2)人们习惯了这种通用的编程风格.当时,C++是一种面向对象的语言首先,在许多情况下,C++的这种风格比C慢得多(在现代C++代码,即性能差异几乎消失,部分是通过更好的编译器,以及部分通过更好的编码风格,减少对OOP结构的依赖,更多地依赖于模板和通用编程

Python始于1991年.Perl甚至更老(1987)

PHP也是从1995年开始的,但另外,重要的是,它是由一个几乎不了解编程的人创建的.(是的,当然这在许多重要方面塑造了语言)

你提到的语言是用C语言开始的,因为C是当时便携式,面向未来的平台的最佳选择.

虽然我没有注意到这一点,但我愿意打赌除了PHP案例之外,其他语言的语言设计者选择C语言,因为他们已经知道了.所以也许教训不是"C是最好的",而是"你已经知道的语言是最好的"

还有其他原因经常选择C:

  • 经验和可访问性:C是一种相当容易上手的简单语言,降低了进入门槛.它也很受欢迎,并且有很多经验丰富的C程序员.这些语言变得流行的一个原因可能就是很容易找到程序员来帮助开发解释器.学习和使用C++更复杂.今天,这可能不是一个问题,但10年或15年前?
  • 互操作性:大多数语言通过C接口进行通信.由于你喜欢的新语言将依赖于用其他语言编写的组件(特别是在语言本身有限并且库很少的早期版本中),因此调用C函数总是很好而且简单.因为我们要去无论如何都有一些 C代码,它可能很容易一直走,只是用C写完整个东西.
  • 表现:C不会妨碍你.它并没有神奇地使你的代码快速,但它可以让你获得良好的性能.当然,C++或许多其他语言也是如此.但对于C来说也是如此.
  • 可移植性:实际上每个平台都有一个C编译器.直到最近,C++编译器才更受欢迎.

这些原因并不意味着C实际上是编写口译员(或其他任何东西)的优秀语言,他们只是解释了导致其他人用C 语言写作的一些动机.


Mat*_*nen 7

我猜这是因为C几乎是现有几乎所有平台都有合理标准编译器的唯一语言.