选择一种中间语言

bac*_*dos 7 c compiler-construction intermediate-code

我目前正在玩编程语言.我花了一些时间用高级语言编写解析器和解释器(最值得注意的是haXe).

我有一些结果,我认为实际上非常好,但现在我想让它们快速.

我的想法是将输入语言翻译成C.
我的C知识仅限于你在大学学到的知识.除了一些练习,我从未编写过实际的C程序.但我相信我能让它发挥作用.

当然,我可以尝试为LLVM编写前端或生成MSIL或JVM字节码.但我觉得现在学到的东西太多了,实际上并没有看到太大的收获.
C也完全是人类可读的,所以如果我搞砸了,理解其中的原因要容易得多.毕竟,C是高水平的.我可以真正地从输入语言中翻译概念,而不需要过多的思维弯曲.我应该在合理的时间内完成一些工作并运行,然后根据需要对其进行优化.

那么:使用C有什么缺点吗?你能推荐另一种选择吗?
感谢您的见解 :)


编辑:一些澄清

  • 我想要一直走下去的原因是,我正在编写一种支持OOP的语言,我想实际实现我的方法调度,因为我有一些非常具体的想法.
  • 主要的使用领域是编写HTTP服务,但我可以想象将绑定添加到GUI库(可能是wxWidgets)或其他什么.

Tom*_*icz 6

对于你想要做的事情来说,C是一个很好的,非常受欢迎的选择.

不过,请看一下LLVM的中间语言(IR).它具有很强的可读性,我认为它比C更清晰,更容易生成和解析.LLVM附带了大量的工具来处理它.您可以为各种平台生成本机代码(与C一样,但对输出稍微控制一些)或虚拟机.JIT编译的可能性也是一个优点.

请参阅开源应用程序的体系结构,第11章,介绍LLVM方法和IR的一些片段.


你的目标环境是什么?这可能有助于我们为您提供更好的答案.


Chr*_*odd 2

对于小型或实验性编译器来说,C 实际上是一个非常好的目标语言选择——它在许多平台上广泛可用,因此您的编译器在许多环境中立即变得有用。主要缺点是处理 C 中未很好支持的内容,或者 C 规范中未明确定义的内容。例如,如果要做动态代码生成(JIT编译),C就有问题。像堆栈展开和反射这样的事情在 C 中很难做到(尽管 setjmp/longjmp 以及仔细使用为其生成布局描述的结构可以做很多事情)。C 编译器之间的字大小、大尾数或小尾数布局以及算术精度等内容有所不同,因此您必须意识到这一点,但如果您想支持多个目标机器,那么这些都是您需要处理的事情。

也可以使用其他语言——C 的主要优点是它的普遍性。