编写的现代和旧编译器是什么?

时间:2010-03-30 09:31:42

标签: compiler-construction scripting-language compiler-theory

作为一个编译器,除了解释器之外,只需要翻译输入而不是运行它本身的性能应该不像解释器那样有问题。 因此,你不会写一个解释器,比方说Ruby或PHP因为它太慢了。

然而,编译器呢?

如果您使用脚本语言编写编译器甚至可以快速开发,您可以通过halv来缩短源代码和初始开发时间,至少我是这么认为的。

可以肯定:使用脚本语言我的意思是具有典型功能的解释型语言,使程序员编程更快,更容易,更愉快,通常至少。示例:PHP,Ruby,Python,也许是JavaScript,虽然这可能是编译器的奇怪选择

  • 通常编写的编译器是什么?我想你会用C,C ++甚至汇编程序之类的低级回复,为什么?

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

  • 使用低级或高级编程语言进行编译器编写有什么(dis)优势?

7 个答案:

答案 0 :(得分:6)

大多数编译器都是用它们所针对的编程语言编写的(bootstrapping)。

当然有很多例外。

答案 1 :(得分:1)

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

有些编译器是用脚本语言编写的(我想到的一个例子是Pajamas - 从Python到Javascript的编译器,用Python编写),但绝大多数工业级编译器都是用C& C编写的。 C ++。

答案 2 :(得分:0)

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

函数式语言受益于一种名为pattern matching的技术,它使处理解析树/ AST变得更加简单。

真正的编译器是为这种特定语言的语言编写一个编译器(一个名为bootstrapping的过程)。

答案 3 :(得分:0)

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

  

用编译语言编写代码是   最后的事情之一仍然存在   不能在花园里立即完成   各种家用电脑。

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

答案 4 :(得分:0)

Python有一个名为pypy的原生Python编译器。

答案 5 :(得分:0)

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

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

另外:反讽,JetBrains MPS等等。

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

答案 6 :(得分:0)

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

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

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