Unk*_*own 10 c compiler-construction backend llvm
我一直在玩LLVM,希望学习如何使用它.
但是,我的想法被界面的复杂程度所困扰.
以他们的Fibonacci函数为例
int fib(int x) {
if(x<=2)
return 1;
return fib(x-1) + fib(x-2);
}
Run Code Online (Sandbox Code Playgroud)
要使其输出LLVM IR,需要61行代码!
它们还包括BrainFuck,它以拥有最小的编译器(200字节)而闻名.不幸的是,使用LLVM,它超过600行(18 kb).
这是编译器后端的标准吗?到目前为止,似乎更容易进行汇编或C后端.
Jon*_*rop 17
问题在于C++而不是LLVM.
使用专为元编程设计的语言,如OCaml,您的编译器将会小得多.例如,这篇OCaml期刊文章描述了一个基于LLVM的87行Brainfuck编译器,这个邮件列表文章描述了完整的编程语言实现,包括可以编译Fibonacci函数的解析器(以及其他程序),整个编译器不到100行的OCaml使用LLVM的代码,HLVM是一个高级虚拟机,使用LLVM在2,000行OCaml代码中进行多核垃圾收集.