3

作为编译器,而不是解释器,只需要翻译输入而不运行它,它本身的性能应该不会像解释器那样有问题。因此,您不会在 Ruby 或 PHP 中编写解释器,因为它太慢了。

但是,编译器呢?

如果您使用脚本语言编写编译器,甚至可能具有快速开发的特点,您可能会将源代码和初始开发时间减少一半,至少我认为是这样。

可以肯定的是:对于脚本语言,我的意思是解释性语言具有使编程更快、更容易和更有趣的典型特征,通常至少是这样。示例:PHP、Ruby、Python,也许是 JavaScript,尽管这对于编译器来说可能是一个奇怪的选择

  • 编译器通常是用什么编写的?我想你会用 C、C++ 甚至汇编程序等低级的东西来回应,为什么?

  • 是否有用脚本语言编写的编译器?

  • 使用低级或高级编程语言编写编译器有什么(缺点)优点?

4

7 回答 7

7
于 2010-03-30T09:34:12.827 回答
1

大多数编译器都是用 C 或 C++ 编写的。即使在今天,编译器的性能也很重要。当你必须编译一个 900 个文件的项目时,如果需要 2 分钟或 20 分钟,那就大不相同了。

一些编译器是用脚本语言编写的(想到的一个例子是睡衣——一种从 Python 到 Javascript 的编译器,用 Python 编写),但绝大多数工业级编译器都是用 C 和 C++ 编写的。

于 2010-03-30T09:32:44.810 回答
0

有一个用于 Python 的本机 Python 编译器,称为pypy

于 2010-03-30T10:00:26.450 回答
0

它们大多是用相当高级的语言 (C/C++) 编写的。但是,对于现代硬件,使用托管语言(C#/Java)、函数式语言(Haskell)或者更好的是托管函数式语言(Nemerle)编写的编译器是完全可以的。

函数式语言受益于一种称为模式匹配的技术,这使得处理解析树/AST 变得更加简单。

真正的编译器功能是为该特定语言的语言编写编译器(称为引导程序的过程)。

于 2010-03-30T09:34:16.993 回答
0

编译是您可以在计算机上执行的计算量最大的事情之一,或者正如 Joel Spolsky 所说:

用编译语言编写代码是在花园式家用计算机上仍然无法立即完成的最后一件事。

因此,您不希望编译器尽可能快,这使得 C 和 C++ 成为自然选择。

于 2010-03-30T09:37:39.147 回答
0

有专门的编程语言可以有效地实现编译器,例如:

http://www.meta-alternative.net/mbase.html

另外:Irony、JetBrains MPS 等等。

一般来说,函数式语言在这方面非常有效,尤其是具有代数数据类型、模式匹配柯里化的语言,例如 - Haskell、ML(F#、OCaml)、Nemerle、Scala。

于 2010-03-30T10:04:51.703 回答
0

SUN/Oracle JVM 的 javac 编译器是用 Java 编写的;就像在 Eclipse IDE 中使用的 Java 编译器一样,用于在您编辑时进行后台编译。许多函数式语言的编译器通常是用该语言编写的,因为函数式语言通常非常适合编写编译器。受限语言的编译器(例如 GLSL/OpenCL 等 GPU 编程)不会以在 GPU 上可执行的语言编写。

一个基本问题是给定编译器编译的语言可能不是实现编译器的好语言;我不知道有人在 FORTRAN 中为 FORTRAN 编写编译器。

本质上,编译器的实现语言可能是也可能不是该编译器的输入语言,这取决于所涉及语言的适用性以及开发时间、所需运行时性能、工具可用性和开发人员熟悉度等一系列其他标准。

于 2010-10-02T15:46:16.110 回答