选择一种中间语言

时间:2011-06-14 16:26:36

标签: c compiler-construction intermediate-code

我目前正在玩编程语言。我花了一些时间用高级语言编写解析器和解释器(最着名的是Haxe)。

我有一些结果,我认为其实很不错,但现在我想让它们变得快速。

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

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

所以:使用C有什么缺点吗?你能推荐一个替代方案吗?
感谢您的见解:))


编辑:一些澄清

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

4 个答案:

答案 0 :(得分:6)

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

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

有关LLVM方法和IR的一些片段的介绍,请参阅The Architecture of Open Source Applications, Chapter 11


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

答案 1 :(得分:2)

对于小型或实验性编译器来说,C语言实际上是一个非常好的选择 - 它在许多平台上都可以广泛使用,因此您的编译器在许多环境中都会立即变得有用。主要缺点是处理C中不能很好地支持的东西,或者在C规范中没有很好地定义。例如,如果要进行动态代码生成(JIT编译),则C存在问题。像堆栈展开和反射这样的东西在C中很难处理(虽然setjmp / longjmp并仔细使用你生成布局描述的结构可以做很多事情)。 C编译器之间的字大小,大端或小端布局以及算术精度等因素都有所不同,因此您必须注意这一点,但如果您想要支持多个目标机器,那么这些是您需要处理的事情。

其他语言也可以使用 - C的主要优点是无处不在。

答案 2 :(得分:2)

您可能会考虑使用C--,这是一种类似C语言,旨在成为比C更好的代码生成目标。

答案 3 :(得分:0)

恕我直言,C是一个不错的选择。与许多语言不同,C通常被认为是“优雅的”,因为您只有32个关键字和非常基本的构造(序列,选择,迭代),并且具有非常简单且一致的标记和运算符集合。

因为语法在C(括号和大括号,块和语句,表达式的使用)中非常一致,所以你不会进入无限的语言扩展世界。 C是一种成熟的语言,已经很好地度过了时间,现在是一个“已知数量”(很难说很多其他语言,甚至是“成熟”语言)。