|
|
1
14
OCAML或HASKELL是一个不错的选择。为什么不查看每种语言的llvm教程呢?OCAML的LLVM教程如下: http://llvm.org/docs/tutorial/OCamlLangImpl1.html haskell现在有了更大的发展势头,但是有很多很好的OCAML解析库,包括peg解析器生成器。 Aurochs , Menhir 和GLR解析器生成器 Dypgen .还可以在PCL上查看此演示文稿,这是一个用于OCAML的单语法分析器组合器库(如用于Haskell的Parsec),其中比较了Haskell和OCAML的方法有一些很好的信息: http://osp.janestreet.com/files/pcl.pdf 有些人会说,懒惰在解析方面给了haskell优势,但您也可以在ocaml中得到懒惰。 |
|
|
2
9
haskell与ocaml相比,对llvm的绑定级别更高(haskell的绑定提供了一些有趣的类型安全保证),而且haskell要使用的库(1700个包 http://hackage.haskell.org )使组件更容易粘合在一起。 |
|
|
3
7
本机绑定的可用性不需要限制您对语言的选择。除了使用绑定或直接生成IR文本之外,还有第三个选项: 您可以使用与语言无关的序列化格式(如Google的协议缓冲区)作为从前端到后端的桥梁。毕竟,协议缓冲区只是伪装的AST。 你的前端,用函数语言实现,然后做它最擅长的——解析、类型检查、解析度、核心到核心转换等等。C++后端从你的前端获取IR,并使用LLVM的特性,通过定义本机C++ API完成从你的语言IR到LLVM IR的降低。这使得处理LLVM的“高级”特性(如调试元数据)变得更加容易。
我用这个策略
|
|
|
4
6
OCAML是唯一一种 bindings in the LLVM distro itself 以及有关llvm.org的文档,如 Kaleidoscope tutorial . 如果在构建和安装llvm时安装了ocaml,那么它也将自动为ocaml构建和安装llvm绑定。此外,这些ocaml绑定 in use for years 所以他们成熟可靠。 我一直在发展 HLVM 在使用标准llvm绑定的ocaml中,发现ocaml+llvm是一个非常强大的组合。HLVM提供了元组、数组、联合、所有尾调用的TCO、通用打印、FFI到C、JIT编译和并行垃圾收集,其中一个虚拟机的权重低于2kloc的ocaml代码,从零开始开发只需要几个人周的时间。 HLVM's numerical performance already far exceeds that of today's fastest open source FPLs including OCaml itself . 我已经发表了 articles in the OCaml Journal 描述如何从OCAML将LLVM用于从基本表达式评估到高级主题(如并行性和垃圾收集)的所有方面。你也可以喜欢这个 mini example . |