LLVM与Clang的概述及关系
LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。LLVM计划启动于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持开展。2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple开发体系中的应用。Apple也是LLVM计划的主要资助者[引自百度百科]。
我们可以认为LLVM是一个完整的编译器架构,也可以认为它是一个用于开发编译器、解释器相关的库。
在理解LLVM时,我们可以认为它包括了一个狭义的LLVM和一个广义的LLVM。广义的LLVM其实就是指整个LLVM编译器架构,包括了前端、后端、优化器、众多的库函数以及很多的模块;而狭义的LLVM其实就是聚焦于编译器后端功能(代码生成、代码优化、JIT等)的一系列模块和库。
接下来,简要的介绍一下Clang。
Clang是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。那么为什么已经有了GCC还要开发Clang呢?Clang相比于GCC有什么优势呢?
其实,这也是Clang当初在设计开发的时候所主要考虑的原因。Clang是一个高度模块化开发的轻量级编译器,它的编译速度快、占用内存小、非常方便进行二次开发。
最后,我们大概讲一讲LLVM和Clang的关系。我们将它们对应于传统的编译器当中的几个独立的部分,这样能够更加方便明确生动的表述。
其实,对应到这个图中,我们就可以非常明确的找出它们的对应关系。Clang其实大致上可以对应到编译器的前端,主要处理一些和具体机器无关的针对语言的分析操作;编译器的优化器部分和后端部分其实就是我们之前谈到的LLVM后端(狭义的LLVM);而整体的Compiler架构就是LLVM架构。
阅读更多- LLVM与Clang的概述及关系
- 转:LLVM与Clang的概述及关系
- LLVM与Clang的概述及关系
- 深入研究Clang(一)Clang和LLVM的关系及整体架构
- GCC 与 LLVM-GCC 与 Clang之间关系
- JPA教程:JPA概述、JPA实体生命周期、JPA实体映射关系、JPA查询语言
- opensuse下安装llvm-clang3.3
- 编译器(GNU & GCC & clang & llvm)
- iOS之GCC,LLVM,Clang三种编译器
- UML笔记一:UML概述四(UML中的关系、UML中的图)
- LLVM(Clang)的编译过程
- CST,CET,UTC,GMT,DST,Unix时间戳几种常见时间概述与关系
- LLVM和Clang背后的故事
- CentOS 5.8编译安装LLVM+Clang
- 深入剖析 iOS 编译 Clang / LLVM
- LLVM 与 Clang 介绍
- 从代码开始编译clang/llvm
- 编译器(GNU & GCC & clang & llvm)
- LLVM每日谈21 一些编译器和LLVM/Clang代码
- 自己动手实现简单对象关系库之概述