制作语言需要一个好的后端

时间:2009-04-06 09:07:53

标签: compiler-construction backend intermediate-language

我想制作一种编译语言。我目前正在评估后端。 到目前为止,我正在研究C,因为它的执行速度,编译速度以及一个名为TCC的小型易用编译器。

在阅读了有关将其用作中间语言的讨论后,我试图考虑如何使其与垃圾收集兼容并处理异常。到目前为止,我认为我可以解决这两个问题,但开销很大。

以下是我对其他可能后端的一些看法:

  1. 装配:不可移植且完全无法编程。
  2. .NET:感觉真的很慢。启动时间为5秒,在Ironpython和Boo上评估1 + 2时为5秒。没有大型库就无法运行。
  3. JVM:感觉有点慢。无法访问二进制库。没有大型库就无法运行。
  4. LLVM:没有Windows支持。我听说编译后的可执行文件大小为16 mb +
  5. C--:看起来不发达。
  6. C ++:可能。找不到一个可以捆绑的漂亮小免费。
  7. 您是否可以改变主意或有更多内容添加到此列表中?

    修改

    我最近一直在试验LLVM。我发现他们有预编译的二进制文件,并且可以编译为本机程序集。

    http://www.antlr.org/wiki/display/CS652/Generating+machine+executable+binaries+with+LLVM

    以下是步骤:

    1. 运行llvm-like LLVM Assembly,生成LLVM字节码文件。
    2. 在LLVM字节码文件上运行llc以生成程序集文件。
    3. 在程序集文件上运行汇编程序以生成目标文件。 (或运行似乎依赖于外部安装的c编译器的llvm-ld)
    4. 使用gcc等编译为可执行文件。

6 个答案:

答案 0 :(得分:6)

在这种情况下,LLVM可能是更好的选择。

LLVM具有Windows支持,只需要一些时间来编译

答案 1 :(得分:5)

你考虑为GCC写一个前端吗?我只是为了完整性而提到这一点 - 据我所知,后端界面非常复杂,而且代码库非常庞大且难以理解。

另一方面,GCC是一个成熟的产品,有许多专业程序员在研究它。至少,它可能为所有替代方案提供了最坚实的基础。

就个人而言,我更喜欢LLVM(激动人心的架构)或.NET的IL:非常,非常容易使用,有很棒的工具支持(ReflectorCecilReflexil和最后但是尤其是.NET反射API)和两个非常有效的实现(即Microsoft的规范实现和Mono)。

但我不能在任何架构中声称拥有专业知识,所以请尽量回答这个问题。

答案 2 :(得分:4)

C ++不会给你太多,而是使用C代替。但是如果你想要在Web上使用语言,使用.NET或Java,肯定它们加载速度慢,但是当它们加载时,它们就像C一样快。

答案 3 :(得分:2)

对于SmartEiffel,我们使用C作为后端。

Tcc是一个非常好的开发选项 - 尽管不是最终版本(生成的对象相当于gcc -O0)

答案 4 :(得分:1)

添加到列表中的另一个:Slava最近在Factor backend上实现了Smalltalk。我自己没有试过这个,但我觉得它会提供更多你想要的更高级别的功能,更像是低级别的尺寸/性能。

答案 5 :(得分:1)

TCC是最佳选择。它是可移植的,它有一个库,因此它可以很容易地用作后端,称为libtcc。可执行文件小于gcc,它是ANSI C。