5

我必须为本学期要上的一门课创建一种新语言和该语言的编译器——这意味着截止日期大约是 3.5 个月。我读过 OCaml 是编写编译器的更好的语言之一,但我以前没有这方面的经验。因此,我的问题如下:尝试使用我已经熟悉的语言(Java、C、C++)创建编译器,或者花一些时间学习 OCaml 并改用它,对我来说是一个更好的主意吗?

4

1 回答 1

11

这取决于您如何评估每个选择的兴趣。

如果您的目标是尽快完成课程项目,那么坚持使用您已经熟悉的工具可能是最佳选择。语言很重要,我确实相信 ML 语言最适合编写编译器,但在短期内,对语言、工具、错误消息和常见习语感到满意可能会胜过与语言相关的生产力优势。或者至少在垃圾收集语言中;您可以使用 C 来提高效率,但您必须非常了解该语言(在这种情况下,可能不会将其与 C++ 和 Java 混为一谈)。

如果您对构建编译器和更一般的语言工具感兴趣,或者在课程结束后学习编程语言,那么学习静态类型的函数式语言肯定是值得的投资,而编译器课程是这样做的绝佳借口。

编辑:一些指针

rgrinberg 的有用评论提醒我指出MinCaml作为一种可能的灵感来源。

我的第一个想法是 Andrew Appel 的“{C,Java,ML} 中的编译器实现”一书,但正如亚马逊评论所说,这本书太先进了,不能用作编译器或 ML 的介绍。

Andrej 的 Bauer Programming Language Zoo也是一个很好的资源,但它更倾向于通过解释器实现来发现各种编程语言,而不是编译本身(尽管一些动物园动物被编译成抽象机器)。

于 2013-01-31T19:09:20.047 回答