我想开始研究一个小编译器并构建它我在几种不同语言之间犹豫不决.
我的要求很简单,我希望能够发出LLVM-IR代码,因为我有一个LLVM后端,我想重用它来定位特定的平台.
所以现在我有以下选择:
使用OCaml和LLVM绑定 - 高效的LLVM附带OCaml绑定,但OCaml(IDE,支持)的编码经验并不是最好的.
使用C/C++和LLVM绑定 - 我会说最明显的方式,但我想使用一种函数式语言,因为这个主题对我来说是新的,我想学习一些新东西.
使用F# - 我感觉爱上了这种语言,但没有正式的LLVM绑定.所以我想我可以通过使用System.Reflection.Emit来做同样的事情.即使看起来这里有一个针对LLVM的F#绑定的举措 - https://github.com/keithshep/llvm-fs
我很乐意对此有所了解.
我正在使用Mono LLVM(http://www.mono-project.com/Mono:Runtime:Documentation:LLVM),看起来他们在这里使用LLVM作为JIT,而不是真正的代码生成器.但根据文档,他们在生成本机代码之前会通过LLVM-IR:
所以,我想知道是否有任何方法可以捕获第3阶段并使用IR来提供我的LLVM后端.这样我就可以免费获得C#到LLVM-IR前端.
谢谢你的帮助!