LLVM ── 以C++编写Apple支持的compiler编译器框架系统
LLVM 是构架编译器 (compiler) 的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间 (compile-time)、链接时间 (link-time)、运行时间 (run-time) 及空闲时间 (idle-time)。
Apple 是 LLVM 计划的主要资助者,LLVM 也相当于是由 Apple 官方支持的编译器。
LLVM 的命名源于底层虚拟机 Low Level Virtual Machine,目前 LLVM 是该项目的全称。LLVM 项目是一个模块化和可重复使用的编译器和工具技术的集合。LLVM 提供了一个现代化的,基于 SSA 的编译策略,能同时支持任意编程语言的静态、动态编译目标。
LLVM 和大家所熟知的 JVM、.net Runtime 虚拟机不同,LLVM 虚拟系统提供了一套中立的中间代码和编译基础设施,并围绕这些设施提供了一套全新的编译策略,譬如:使得优化能够在编译、连接、运行环境执行过程中,以及安装之后以有效方式进行,及其他一些非常有意思的功能。
LLVM 对开发者保持开放,并兼容已有脚本。LLVM 核心库提供了与编译器相关的支持,可作为多种语言编译器的后台来使用。LLVM 能进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。
LLVM 项目提供了越来越多的可以使用的、编译器以外的其他工具。譬如:代码静态检查工具 LLVM/Clang Static Analyzer,这是 Clang 的一个子项目,能使用同样的 Makefile 生成 HTML 格式的分析报告。
2000 年,LLVM 计划最初由 University of Illinois at Urbana-Champaign (伊利诺伊大学香槟分校) 的 Chris Lattner 主持开展。
2006 年 Chris Lattner 加盟 Apple Inc。并致力于 LLVM 在 Apple 开发体系中的应用。Apple 将 LLVM 用于 OpenCL 流水线优化,Xcode 使用 llvm-gcc 编译代码。
2011 年12 年 02 日 LLVM 3.0 发布,LLVM 包括了一系列子项目,如 C/C++/Objective-C 前端 Clang 3.0 改进了C++程序编译支持;改进 C++ 2011 标准支持;实现支持即将发布的 C1x 标准的某些特性;更快的生成代码,更快的编译等。
2012年 LLVM 荣获 ACM 软件系统奖。
MicroSoft Windows 上可用 Mingw 编译 LLVM,或用 MicroSoft Visual Studio 编译 LLVM。
Linux上可用 GCC 编译 LLVM,或以 Clang 编译 LLVM。
Mac OS X 上 XCode 自带 LLVM。
主要特性01、现代化设计 LLVM 设计是高度模块化的,使得其代码更为清晰,更便于排查问题所在。
02、 语言无关的中间代码 LLVM 和大家所熟知的 JVM、.net Runtime 虚拟机不同,LLVM 虚拟系统提供了一套中立的中间代码和编译基础设施,并围绕这些设施提供了一套全新的编译策略。
这使得透过 LLVM 能将不同的语言相互连结起来,也使得 LLVM 能够紧密地与 IDE 交互和集成。
另一方面,发布中间代码而非目标代码,能在目标系统上更好地发挥其潜能而又不伤害可调试性;譬如:在目标系统上针对本机的硬件环境产生目标代码,但又能够直接通过中间代码来进行行级调试。
03、作为工具和函数库 使用 LLVM 提供的工具,可比较容易地实现新编程语言的优化编译器或 VM,或为现有编程语言引入一些更好的优化、调试特性。
版本历史时间 | 版本 | 说明 | 备注 | 2003 年 10 月 24 日 | LLVM 1.0 | 首次发布 | | 2007 年 05 月 23 日 | LLVM 2.0 |
| | 2009 年 10 月 23 日 | LLVM 2.6 |
| 首次包含 Clang | 2011 年 12 月 02 日 | LLVM 3.0 | 全新寄存器分配器,大幅性能提升;完全支持 C++ 内存模型中的全新原子操作;改进 MIPS 后端;支持 gprof/gcov 风格的 profile 信息。 | | 2012 年 05 月 22 日 | LLVM 3.1 | 用于检测内存错误的新 Address Sanitizer 工具 | 新增 ARM 集成汇编工具 | 2015 年 05月 26 日 | LLVM 3.6 | 大量 bug 修复,优化改进,Clang 支持更多被提议的 C++1z 功能,更好的原生 Windows 兼容性,本地对象文件中嵌入 LLVM IR 等 | 绑定 Go 语言 | 2015 年 09 月 02 日 | LLVM 3.7 | 完全支持 OpenMP 3.1(behind a flag),the On Request Compilation (ORC) JIT API,一个全新后端用于 Berkeley Packet Filter (BPF)、Control Flow Integrity 检查,新 Clang 警告 | | 2017 年 03 月 13 日 | LLVM 4.0 |
| | | | | | | | | | | | | |
长按二维码关注 "德云社区" ,点击最下方 "阅读原文" 了解更多资讯
版权声明:
本文为独家原创稿件,版权归 德云社区,未经许可不得转载;否则,将追究其法律责任。
|