Compiler construction 制作一门语言,需要一个好的后端
我想做一种编译语言。我目前正在评估后端。 到目前为止,我正在研究C语言,因为它的执行速度、编译速度以及一个称为TCC的小型易用编译器 在阅读了关于将它用作中间语言的讨论之后,我试图思考如何使它与垃圾收集兼容,以及如何处理异常。到目前为止,我认为我可以解决这两个问题,但开销很大 以下是我对其他可能的后端的一些想法:Compiler construction 制作一门语言,需要一个好的后端,compiler-construction,backend,intermediate-language,Compiler Construction,Backend,Intermediate Language,我想做一种编译语言。我目前正在评估后端。 到目前为止,我正在研究C语言,因为它的执行速度、编译速度以及一个称为TCC的小型易用编译器 在阅读了关于将它用作中间语言的讨论之后,我试图思考如何使它与垃圾收集兼容,以及如何处理异常。到目前为止,我认为我可以解决这两个问题,但开销很大 以下是我对其他可能的后端的一些想法: 汇编:不可移植,编程时非常麻烦 .NET:感觉真的很慢。5秒启动,5秒评估Ironpython和Boo上的1+2。没有大型库,无法运行 JVM:感觉有点慢。无法访问二进制库。没有大型库
C++不会给你太多,用C来代替。但是如果你想在网络上使用你的语言,可以使用.NET或Java,当然它们的加载速度很慢,但是当它们加载时,它们的速度和C一样快。因为我们使用C作为后端
Tcc对于开发来说是一个非常好的选择——虽然不是最终版本(生成的对象相当于gcc-O0)您考虑过为其编写前端吗?我提到这一点只是为了完整性——据我所知,后端接口相当复杂,代码库庞大且难以理解 另一方面,GCC是一个成熟的产品,许多专家程序员都在使用它。至少,它可能提供了所有备选方案中最坚实的基础 就我个人而言,我更喜欢LLVM(激动人心的体系结构)或.NET的IL:very,very-very-easy-use,具有强大的工具支持(,最后但并非最不重要的是,.NET反射API)和两个非常高效的实现(即Microsoft的规范实现和Mono)
但我不能声称自己在任何体系结构方面都有专业知识,因此对此答案持保留态度。在这种情况下,LLVM可能是一个更好的选择
LLVM支持Windows,只需花一些时间编译另一个添加到列表中:Slava最近在一个平台上实现了Smalltalk。我自己还没有试过,但我觉得它会提供更多您想要的功能,更像是高级别的,更像是低级别的。TCC是最好的选择。它是可移植的,并且有一个库,因此可以很容易地用作后端,称为libtcc。可执行文件比GCC小,它是ANSI C.< /P>我喜欢C++,因为它已经有堆栈解卷异常,我可以封装指针,使它们变得更垃圾,不友好,不幸的是编译器可用的似乎非常大,需要更长的时间来编译。你的也是其中之一。您是否很难输出易于垃圾收集的C代码?我们有自己的GC实现,每种类型都有专门的bucket(我们的语言是封闭的;每种类型在编译时都是已知的)。唯一复杂的部分是确保标记每个活动对象:我们在堆栈+寄存器中使用一些标记,为那些需要它的架构进行保存。从目前为止我对它的理解来看,我不想强迫用户安装大型运行时,这需要3 GB来编译。LLVM不是一个运行时,它是一个编译器框架。一旦您的应用程序被编译,它将在windowsI上以任何其他本机二进制文件的形式运行,只阅读提到字节码编译的文档。即使它允许静态编译,我甚至没有3 GB的内存在windows下编译它,也不能指望其他人也能编译。Duplicates@norman,我的问题有更多信息。我不太满意那里的答案。我已经开始使用C++作为后端,所以我不必实现STL容器和OOP。我尝试了TCC,发现它小巧快速,但我听说它编译的代码根本没有经过优化。