11

我想做一种编译语言。我目前正在评估后端。到目前为止,我关注 C 是因为它的执行速度、编译速度和一个名为 TCC 的小型、易于使用的编译器。

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

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

  1. 组装:不便携,编程非常痛苦。
  2. .NET:感觉真的很慢。5 秒启动,5 秒评估 Ironpython 和 Boo 上的 1+2。没有大型库就无法运行。
  3. JVM:感觉有点慢。无法访问二进制库。没有大型库就无法运行。
  4. LLVM:不支持 Windows。我听说编译后的可执行文件大小是 16 mb+
  5. C--:看起来不发达。
  6. C++:可能。找不到我可以捆绑的漂亮的小免费。

你们中的任何人都可以改变我的想法或有更多内容要添加到此列表中吗?

编辑

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

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

以下是步骤:

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

6 回答 6

9

您是否考虑过为GCC编写前端?我只是为了完整起见而提到这一点——据我所知,后端接口相当复杂,代码库庞大且难以理解。

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

就个人而言,我更喜欢 LLVM(令人兴奋的架构)或 .NET 的 IL:非常非常易于使用,具有出色的工具支持(ReflectorCecilReflexil以及最后但并非最不重要的 .NET 反射 API)和两个非常高效的实现(即微软的规范实现和Mono)。

但我不能声称拥有任何架构的专业知识,所以对这个答案持保留态度。

于 2009-04-06T09:20:11.063 回答
8

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

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

于 2009-04-06T12:39:47.073 回答
4

C++ 不会给你太多,请改用 C。但是,如果您希望您的语言在 Web 中使用,请使用 .NET 或 Java,确保它们的加载速度很慢,但当它们加载时,它们与 C 一样快。

于 2009-04-06T09:14:48.237 回答
4

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

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

于 2009-04-06T09:18:52.360 回答
4

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

于 2009-05-04T05:11:49.230 回答
2

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

于 2009-04-07T06:39:23.560 回答