LLVM命名最早源自于底层虚拟机(Low Level Virtual Machine)的缩写,但是现在,LLVM所代表的基本和虚拟机没有关系了,也不在作为一个缩写使用了,而是直接作为一个名字使用。LLVM开始于2000年,是由C++实现的开源软件,它的license是”UIUC” BSD-Style。LLVM核心库提供了与编译器相关的支持,可以作为多种语言编译器的后台来使用,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。LLVM可以被看作是一系列的编译器和工具链技术的集合,而且它们是模块化并且是可重用的。

        Clang是LLVM的一个编译器前端,它支持C、C++等编程语言。Clang对源程序进行词法分析和语义分析,并将分析结果转换为Abstract Syntax Tree(抽象语法树),最后使用LLVM作为后端代码的生成器。Clang的开发目标是提供一个可以替代GCC的前端编译器。即LLVM可以认为是一个编译器的后端,而Clang是一个编译器的前端。

        通常,编译的阶段被分成前端和后端两部分。前端是由只依赖于源语言的那些阶段或阶段的一部分组成,往往包含词法分析、语法分析、语义分析、类型检查和中间代码生成等阶段,当然还包括与这些阶段同时完成的错误处理和独立于目标机器的优化。后端是指编译器中依赖于目标机器的部分,往往只与中间语言有关而独立于源语言。后端包括与目标机器相关的代码优化、代码生成和与这些阶段相伴的错误处理和符号表操作。后端与前端是独立的,后端只需要一种中间代码表示。

       关于GCC与Clang的异同可以参考:https://blog.csdn.net/fengbingchun/article/details/79252110  

        LLVM is a library that is used to construct, optimize and produce intermediate and/or binary machine code.

        LLVM can be used as a compiler framework, where you provide the "front end" (parser and lexer) and the "back end" (code that converts LLVM's representation to actual machine code).

        LLVM can also act as a JIT compiler - it has support for x86/x86_64 and PPC/PPC64 assembly generation with fast code optimizations aimed for compilation speed.

        LLVM的官方网址是:https://llvm.org/  ,目前最新版本是6.0.

        注:以上内容整理自网络。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐