LLVM 概览

下面是 LLVM 首页对 LLVM 介绍的中文翻译。前端

LLVM 项目是一系列模块化、可重用和工具链技术的集合。没必要在乎它的名称,LLVM 和以前的虚拟机基本没什么关系了,然而也确实提供了对构建这些虚拟机有帮助的库。LLVM 不是首字母的缩写,它就是项目的全称。c++

LLVM 起源于伊利诺伊大学的一个研究项目,这个项目致力于提供现代化的、基于 SSA编译策略可以同时支持任意语言静态和动态编译。从那时起,LLVM 已经发展为具备多个子项目的巨型项目,它们中不少被用于各类各样商业的和开源的产品中,与此同时也普遍用于学术研究。LLVM 项目的代码遵照“伊利诺伊大学”BSD风格许可。缓存

LLVM 主要的子项目以下:
1. LLVM 核心库提供了一个源代码级别和目标平台无关的优化器开发库,以及许多流行 CPU(固然也包括一些不常见的) 的代码生成支持。这些开发库都是创建在代码表达有良好定义的,称为 LLVM 中间表达(LLVM IR)。LLVM 核心开发库文档齐全,使用 LLVM 做为一个优化器和代码生成器开发你本身的语言(或移植现有编译器)是一件特别容易的事情。安全

2. Clang 使用一个“LLVM 原生的” C/C++/Objective-C 编译器。它致力于提供使人难以置信快速编译(例如当以调试配置编译 Objective-C 代码时的速度比 GCC 快 3 倍)、高度有用的错误和警告信息以及为构建强大源代码级工具的平台。最好的例子就是有不少工具使用 Clang 前端做为开发库去解析 C/C++代码。
3. dragonegg 整合了 LLVM 优化器代、码生成器以及 GCC 解析器。这样就可让 LLVM 编译 Ada、Fortran 以及一些 GCC 编译器前端支持的语言,另外能够支持一些 Clang 不支持的 C 特性。
4. LLDB 构建于 LLVM 和 Clang 提供的开发库上,它提供了个强大的原生调试器。它使用 Clang 的抽象语语法树、表达式解析器、LLVM 及时编译、LLVM 反汇编器等,这样使得它给人映象就是“就是如此有效”,并且在加载符号时相较于 GCC 快并且内存使用效率更高。
5. libc++ 和 libc++ ABI 提供了一个标准的、高性能 C++ 标准库的实现,包括对 C++ 11 的彻底支持。
6. compiler-rt 提供了通过精心调校实现的底层代码生成器,支持诸如“__fixunsdfdi”这样的过程以及其余用于目标平台没有原生的简短指令实现核心 IR 操做时调用的生成。它同时也为动态测试工具提供了运行时的实现,例如AddressSanitizer、ThreadSanitizer、MemorySanitizer 以及 DataFlowSanitizer。
7. OpenMP 为使用 Clang 中实现的 OpenMP 提供一个 OpenMP 的运行环境。
8. vmkit 是构建于 LLVM 技术之上的 Java 和 .NET 虚拟机的实现。
9. polly 实现了一组局部性缓存优化套件,以及自动并行和多面体模型的矢量化。
10. libclc 致力于实现 OpenCL 的标准库。
11. klee 实现了一个“符号虚拟机”,它基于的原理是,尝试经过查找缺陷和证实函数属性对全部动态路径进行求值。klee 一个主要的特性就是当一个缺陷被探测到时能生成一个测试用例。
12. SAFECode 是一个内存安全的 C/C++ 编译程序。它的指令代码附带了探测内存安全错误的运行时检查(例如,缓冲区溢出),它能够用于软件免受安全攻击,也能够被用做像 Valgrind 同样的内存安全错误的调试工具。
13. lld 致力于为 clang/llvm 提供一个内建的连接器。目前 clang 多半是调用系统的连接器来生成可执行文件。模块化

除了 LLVM 官方子项目,还有大量各类各样使用 LLVM 完成其余各类任务的其余项目。经过这些项目,你可使用 LLVM 编译 Ruby、Python、Haskell、Java、D、PHP、Pure、Lua 以及其余多种语言。LLVM 主要优点就是多功能性、灵活以及可重用性。这就是为何它被用于如此普遍而多样的任务中:全部工做均使用轻量级的及时编译完成的嵌入式语言,就像 Lua 为大规模超级计算机编译 Fortran 代码。函数

像全部其余的开源的项目同样,LLVM有一个由大量而友好的、对构建强大的底层工具感兴趣的人组成的社区。若是你有兴趣加入,略读 LLVM 博客和订阅 LLVM 开发者邮件列表是一个不错的开始。关于如何发送补丁、获取提交权限以及版权和许可的事项,请参考 LLVM 开发者准则。工具

【译注】看完这篇文章,应该会对 LLVM 这个项目有一个比较全面的了解。性能

相关文章
相关标签/搜索