7

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

我有一些结果,我认为实际上相当不错,但现在我想让它们快点。

我的想法是将输入语言翻译成 C。
我的 C 知识仅限于你在大学学到的知识。除了一些练习之外,我从未编写过真正的 C 程序。但我有信心我可以让它发挥作用。

当然,我可以尝试为 LLVM 编写前端或生成 MSIL 或 JVM 字节码。但我觉得现在要学习的东西太多了,实际上我并没有看到太多的收获。
C 语言也完全是人类可读的,所以如果我搞砸了,更容易理解为什么。毕竟,C 是高级别的。我真的可以从输入语言中翻译概念,而无需费神费力。我应该在合理的时间内启动并运行一些东西,然后在我认为合适的时候对其进行优化。

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


编辑:一些澄清

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

4 回答 4

6

对于您正在尝试做的事情,C 是一个很好且非常受欢迎的选择。

不过,请看一下 LLVM 的中间语言 (IR)。它的可读性很强,而且我认为它比 C 更干净、更容易生成和解析。LLVM 附带了相当多的工具来使用它。您可以为各种平台(与 C 语言一样,但对输出的控制稍多一些)或虚拟机生成本机代码。JIT 编译的可能性也是一个优点。

有关LLVM 方法和一些 IR 片段的介绍,请参阅开源应用程序的架构,第 11 章。


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

于 2011-06-14T18:04:59.783 回答
2

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

于 2011-06-14T21:49:13.607 回答
2

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

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

于 2011-06-14T17:54:56.043 回答
0

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

因为 C 语言中的语法非常一致(括号和大括号、块和语句、表达式的使用),所以您不会进入一个无限的语言扩展世界。C 是一门成熟的语言,已经很好地经受住了时间的考验,而且现在是一个“已知量”(对于许多其他语言,甚至“成熟”的语言来说,这真的很难说)。

于 2011-06-15T17:32:47.353 回答