编译为LLVM的问题

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代码中进行多核垃圾收集.

  • 如果你不相信Jon,请看看我的[PL动物园](http://andrej.com/plzoo/). (2认同)