我想做一种编译语言。我目前正在评估后端。
到目前为止,我之所以关注 C,是因为它的执行速度、编译速度以及一个名为 TCC 的小型且易于使用的编译器。
阅读了这里关于将其用作中间语言的讨论后,我正在尝试思考如何使其与垃圾收集兼容并处理异常。到目前为止,我认为我可以解决这两个问题,但开销很大。
以下是我对其他可能的后端的一些想法:
- 汇编:不可移植并且编程非常痛苦。
- .NET:感觉真的很慢。 Ironpython 和 Boo 上 5 秒启动,5 秒评估 1+2。没有大库就无法运行。
- JVM:感觉有点慢。无法访问二进制库。没有大库就无法运行。
- LLVM:不支持 Windows。我听说编译后的可执行文件大小为 16 mb+
- C--:看起来不发达。
- C++:可能。找不到一个可以捆绑的漂亮的小型免费产品。
你们中有人可以改变我的想法或者有更多内容可以添加到此列表中吗?
Edit
我最近一直在尝试 LLVM。我发现他们有预编译的二进制文件,并且可以编译为本机程序集。
http://www.antlr.org/wiki/display/CS652/Generate+machine+executable+binaries+with+LLVM http://www.antlr.org/wiki/display/CS652/Generating+machine+executable+binaries+with+LLVM
步骤如下:
- 在 LLVM 程序集上运行 llvm-as,这会生成 LLVM 字节码文件。
- 在 LLVM 字节码文件上运行 llc 以生成汇编文件。
- 对汇编文件运行汇编程序以生成目标文件。 (或者运行 llvm-ld ,它似乎依赖于外部安装的 C 编译器)
- 使用 gcc 等编译为可执行文件。
你有没有考虑过编写一个前端GCC http://gcc.gnu.org/?我提到这一点只是为了完整起见——据我所知,后端接口相当复杂,代码库庞大且难以理解。
另一方面,GCC 是一个成熟的产品,有许多专家程序员在开发它。至少,它可能提供了所有替代方案中最坚实的基础。
就我个人而言,我更喜欢 LLVM(令人兴奋的架构)或 .NET 的 IL:非常非常容易使用,有很好的工具支持(反射器 http://www.red-gate.com/products/reflector/, Cecil http://www.mono-project.com/Cecil, Reflexil http://sebastien.lebreton.free.fr/reflexil/最后但并非最不重要的一点是.NET 反射 API)和两个非常高效的实现(即 Microsoft 的规范实现和 Mono)。
但我不能声称自己拥有任何架构方面的专业知识,因此对这个答案持保留态度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)