LLVM项目是什么
- 工业级编译技术集合
- 优化器和代码生成器
- llvm-gcc和Clang前端
- MSIL和.NET虚拟机
- 开源项目
- 行业组织、研究团体和个人
LLVM愿景
- 主要使命:构建一套模块化的编译器组件:
- 减少构建特定编译器的时间和成本
- 组件可以在不同的编译器之间共享使用
- 允许根据任务选择适当的组件
- 次要使命:利用这些组件构建编译器:
- 例如,一个真正优秀的C编译器
- 例如,一个运行时特化引擎
LLVM GCC 4.2 设计
使用LLVM替代GCC的优化器和代码生成器,重用GCC的解析器和运行时库
LLVM GCC 4.2 概述
- 可以直接替代GCC 4.2
- 兼容GCC的命令行选项和支持的编程语言
- 可以与现有的makefile一起使用(例如:"make CC=llvm-gcc")
- LLVM优化器和代码生成器的好处
- 更快的优化器:在大多数情况下,-O3级别下大约快30-40%
- 在给定级别上略微更好的代码生成:在x86/x86-64上大约提升5-10%
- 在 -O4 级别上的链接时优化:跨源文件进行优化
LLVM总结
- 基于可重用组件构建的新编译器架构
- 使现有语言可以进行即时编译或静态编译
- 提供多种优化和支持的目标平台
- llvm-gcc:与GCC兼容的替代编译器
- 更好、更快的优化器
- 生产级别的质量
- Clang前端:C/ObjC/C++前端
- 比GCC快数倍
- 更好的终端用户功能(警告/错误信息)
补充:
即时编译(Just-In-Time Compilation,JIT Compilation)是一种编译技术,它将代码在运行时动态地编译成机器代码,而不是预先静态地编译。在即时编译过程中,源代码或中间代码被转换为机器代码,并且可以立即执行。
即时编译通常用于解释型语言或脚本语言的执行环境中,以提高执行效率。相较于传统的解释执行,即时编译将代码动态地编译为机器代码,并在需要时立即执行。这样可以避免每次执行时的解释开销,提高程序的运行速度。
在即时编译过程中,编译器可以利用运行时的动态信息进行优化,例如函数内联、常量传播、循环展开等。这样可以进一步提高代码的执行效率和性能。
总而言之,即时编译是一种在运行时动态将代码编译为机器代码的技术,以提高程序的执行效率和性能。