LLVM 关键点总结

作者: Scott_Song | 来源:发表于2018-11-20 21:31 被阅读3次

    LLVM不是一个编译器,而是一套工具集,这套工具包括完整编译过程的所有部分,它将编译过程的各个部分模块化,用户可以根据自己的需求自己编写一个前端,并在里面通过自定义的driver调用LLVM提供的toolchain生成可执行文件,组成一个编译器。 具体来说是将中间代码优化,不同平台上的代码生成部分都模块化,在编写新语言编译器时只需要写一个前端将语言的源码转化成LLVM的中间表示代码IR,然后调用LLVM对IR的优化模块和代码生成模块,生成不同平台的可执行文件。

    LLVM和GCC的比较
    GCC更像是一个黑盒,无法把它进行拆分。而LLVM设计是模块化的,可以通过API调用编译过程中的某一部分。
    GCC的协议要求产品必须免费,不能出售,LLVM采用BSD协议,所以商业化产品只能使用LLVM。

    LLVM的中间语言IR
    IR是LLVM的关键,任何语言只要提供工具将源码转化为IR,就可以省去开发剩下的部分(代码优化,代码生成)。GCC没有IR,代码优化是基于assembly代码上进行,assembly代码优化在不同平台有不同的做法,就无法模块化。有了IR,所有的代码优化部分就可以在IR上进行,任何平台都一样,就可以独立出来。

    Solidity没有用LLVM是因为LLVM还不支持EVM自定义的指令集,无法通过LLVM工具生成出字节码。如果使用wasm格式,LLVM已经有模块支持生成wasm格式文件,这就是为什么wasm合约可以使用更多语言开发。

    相关文章

      网友评论

        本文标题:LLVM 关键点总结

        本文链接:https://www.haomeiwen.com/subject/wjxfqqtx.html