LLVM项目是模块化和可重用编译器的集合工具链技术。尽管名称如此,LLVM与传统虚拟机。姓名“LLVM”本身不是缩写词;它是项目的全名。
LLVM开始于研究项目在这个伊利诺伊大学,使用目标是提供现代的、基于SSA的编译策略支持任意代码的静态和动态编译编程语言。此后,LLVM发展成为一个伞形项目,包括子项目,其中许多项目被广泛用于生产商业和开源项目以及广泛应用于学术研究.代码在LLVM项目中,根据“Apache 2.0许可证,LLVM例外”
LLVM的主要子项目有:
这个LLVM核心图书馆提供了一个现代化的资源目标相关性优化器,以及代码生成支持对许多人来说流行的CPU(以及一些不太常见的CPU!)这些库是构建的大约a明确规定的代码表示法称为LLVM中间表示(“LLVM IR”)。LLVM核心图书馆是另外其文档也很齐全,尤其是易于发明自己的语言(或移植现有编译器)以供使用LLVM作为优化器和代码生成器.
叮当声是“LLVM本机”C/C++/Objective-C编译器旨在提供惊人的快速编译,非常有用错误和警告消息并提供一个平台源代码级工具。这个叮当声静态分析仪和叮当作响是自动查找代码中错误的工具,是一种可以使用Clang前端作为库来构建的工具解析C/C++代码。
这个LLDB公司项目生成于LLVM和Clang提供的库提供了一个很棒的本地调试器。它使用Clang AST和表达式解析器、LLVM JIT、LLVM反汇编程序、,如此一来,它就提供了一种“恰到好处”的体验。它也是在加载符号时,速度极快,内存效率远高于GDB。
这个利比亚银行++和libc++ABI项目提供C语言的符合标准的高性能实现++标准库,包括对C++11和C++14的完全支持。
这个编译器-rt项目提供低级代码生成器的高度优化实现支持“__固定式dfdi“以及在以下情况下生成的其他呼叫:目标没有要实现的短序列本机指令核心IR操作。它还提供了运行时库的实现用于动态测试工具,例如地址消毒剂,螺纹消毒剂,内存分析器,和数据流消毒剂.
这个MLIR公司子项目是一部小说构建可重用和可扩展编译器基础结构的方法。MLIR公司旨在解决软件碎片问题,改进异构编译硬件,大大降低构建特定领域编译器的成本,并帮助将现有编译器连接在一起。
这个开放式多媒体播放器分部工程提供了开放式多媒体播放器与一起使用的运行时Clang中的OpenMP实现。
这个波莉项目实施一套缓存优化以及自动并行和使用多面体模型进行矢量化。
这个利比亚中央银行该项目旨在实现OpenCL标准库。
这个克莱项目实现了“符号虚拟机”使用定理证明器尝试评估通过一个程序的所有动态路径,努力发现错误并证明函数的属性。klee的一个主要特点是它可以产生测试用例,如果它检测到错误。
这个有限责任公司项目是一个新项目链接器。这是系统链接器的下拉替换并且跑得更快。
这个
螺栓项目是一个链接后优化器。通过优化实现改进基于采样收集的执行配置文件的应用程序代码布局分析器。
除了LLVM的官方子项目外,还有各种各样的其他项目使用组件用于各种任务的LLVM。通过这些外部项目,您可以使用LLVM编译Ruby、Python、Haskell、Rust、D、PHP、Pure、Lua、Julia和一些其他语言。LLVM的一个主要优势是其多功能性、灵活性和可重用性,这就是为什么它被用于如此广泛的不同任务:从对嵌入式语言进行轻量级JIT编译到像Lua一样为大型超级计算机编译Fortran代码。
与其他一切一样,LLVM有一个广泛而友好的社区对构建优秀的低级工具感兴趣的人。如果你对参与进来,一个最好的第一步是浏览LLVM博客并加入LLVM话语。有关如何发送修补程序的信息,请获取提交访问权限,以及版权和许可主题,请参阅这个LLVM开发人员政策.