创建编译器:学习OCaml或坚持使用Java/C/C++

Joh*_*rts 4 compiler-construction ocaml programming-languages

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

gas*_*che 10

这取决于您如何评估每种选择的兴趣.

如果您的目标是尽快完成课程项目,坚持使用您已经熟悉的工具可能是最佳选择.语言很重要,我确实认为ML语言最适合编写编译器,但是在语言,工具,错误消息和常用习语方面的简短操作可能会胜过与语言相关的生产力优势.或者至少在垃圾收集的语言中; 你可以用C来提高效率,但你必须非常了解语言(在这种情况下,可能不会把它放在C++和Java中).

如果您有兴趣构建编译器,更普遍的语言工具,或在课程结束后学习编程语言,那么学习静态类型的函数语言肯定是值得的投资,编译器课程是一个很好的借口.

编辑:一些指针

rgrinberg的有用评论提醒我指出MinCaml是一个可能的灵感来源.

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

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

  • 我可以添加到gasche的答案唯一的事情是OCaml可能相对严重记录,但在线玩具编译器实施并不缺乏,所以你有足够的材料来引导自己. (2认同)