美文网首页
LLVM编译过程

LLVM编译过程

作者: wu大维 | 来源:发表于2023-09-07 11:09 被阅读0次

Clang

Clang是一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器

2013年4月,Clang已经全面支持C++11标准,并开始实现C++1y特性(也就是C++14,这是C++的下一个小更新版本)。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。

Clang是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。它与GNU C语言规范几乎完全兼容(当然,也有部分不兼容的内容,包括编译命令选项也会有点差异),并在此基础上增加了额外的语法特性,比如C函数重载(通过attribute((overloadable))来修饰函数),其目标(之一)就是超越GCC

内部设计与实现:

一个不可移植的代码库;一个为C语言Objective-C、C++、Objective-C++设计的非通用(Non general-purpose)的语法解析器;与C/C++/Objective-C及它们的衍生语言具有高度一致性;

GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言编译器。GNU编译器套件包括C、C++、 Objective-CFortranJavaAdaGo语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)

GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由。

Clang 的特性:
  1. 快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 是 Apple GCC 4.0 的 2.5x 快。(2007-7-25)

  2. 内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10x。

  3. 诊断信息可读性强:我不会排版,推荐去网站观看。其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和 ^ 的提示,相比之下 GCC 的提示很天书。

  4. GCC 兼容性。

  5. 设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。

  6. 基于库的模块化设计,易于 IDE 集成及其他用途的重用。由于历史原因,GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。

LLVM

LLVM是一个编译器(确切的说是一套框架+基于框架的一些编译器实现,如clang),是当下很先进的一套编译系统。特别对于C/C++/Objective-C等语言而言,更是如此。

当然它也不止于此,它也支持JIT,以及很多非C家族的语言。

LLVM之所以优秀,在于以下几点:

  • 1、LLVM的中间表达(IR)是可以dump出来成为可阅读的文本形式的(语法有点像汇编),看起来微不足道,但是其他很多编译器却只有内存中的数据结构,使得学习调试难度大增。

  • 2、模块化的设计比较好,这一方面是后发优势,吸收了很多前人经验,也和设计者的架构功力息息相关。

  • 3、虽然始于学术项目,但LLVM一直受到工业界的支持(Apple),所以不仅好用,而且开源可定制。

LLVM编译

相关文章

  • LLVM 编译过程 ②

    前面一个章节已经简单介绍了LLVM。该章节主要介绍LLVM的编译过程。 1. OC源文件 2. 编译过程 命令...

  • Swift 编译过程

    Swift 编译过程 LLVM:LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任...

  • LLVM、REPL

    编译过程 C、OC、Swift,用到的后端都是LLVM,LLVM是架构编译器的框架系统,用C++编写而成。 swi...

  • iOS 编译过程 - LLVM

    苹果官方资源opensource[https://opensource.apple.com/releases/] ...

  • 下载与编译LLVM和Clang

    最近写编译器,要用到LLVM,记录一下在Linux下编译和安装的过程。 准备 LLVM编译器架构的前端是Clang...

  • 代码混淆

    LLVM编译过程: 预处理,词法分析,token,语法分析,AST,代码生成,LLVM IR,优化,生成,汇编代码...

  • 二十五、LLVM

    什么是编译器 LLVM概述 LLVM案例体验 LLVM源码 & 编译流程 1 什么是编译器? 1.1 Python...

  • LLVM初探

    编译 想必都知道,那么LLVM是什么?LLVM是一种编译器!LLVM编译流程是怎么样的?本篇就LLVM进行初探 首...

  • 对LLVM和跨平台的理解

    广义 LLVM 架构包括编译前端 + 中间优化 + 编译后端; 狭隘 LLVM 指的就是中间优化 + 编译后端; ...

  • Hello Trust App(高通)

    CP代码下载 CP代码编译方法 交叉编译工具下载 在高通网站上下载llvm, llvm编译器版本,可以在llvm....

网友评论

      本文标题:LLVM编译过程

      本文链接:https://www.haomeiwen.com/subject/youkvdtx.html