LLVM 初始 ①

2020-07-20  本文已影响0人  Aliv丶Zz

什么是LLVM

常见编译器

GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix及苹果电脑 Mac OS X 操作系统的标准编译器。
GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。

LLVM是Low Level Virtual Machine的简称。这个库提供了与编译器相关的支持,能够进行程序语言的编译期优化、链接优化、在线编译优化、代码生成。可以作为多种语言编译器的后台来使用。

Clang是一个C++编写的基于LLVM、发布于LLVM BSD许可证下的C/C++/Object-C/Object-C++ 编译器。

GCC,LLVM,Clang编译器对比

LLVM介绍

1.png

LLVM的优点

  • 中间表示IR代码编写良好,而且不同的前端语言最终都转换成统一的中间代码LLVM IR(LLVM Intermediate Representation)

  • 如果需要支持一种新的变成语言,那么只需要实现一个新的前端

  • 如果需要支持一种新的硬件设备,那么只需要实现一个新的后端

  • 优化阶段是一个通用的阶段,它只针对统一的LLVM IR,不论是支持新的编程语言,还是支持新的硬件设备,都不需要对优化阶段做修改

  • LLVM现在被座位实现何种静态和运行时编译语言的通用基础结构(GCC家族、Java、.NET、Python、Ruby、Scheme、Haskell、D等)

  • 相比之下,GCC的前端和后台没分的太开,前端后端耦合在一起,所以GCC为了支持一门新的语言,或者为了支持一个新的目标平台,就变的特别困难

例如:对于图1:
LLVM: 需要 3个编译器前端  、3个编译器后端 
GCC: 因为耦合的原因需要
             C-X86、C-PowerPC、C-ARM
             Fortran-X86、Fortran-PowerPC、Fortran-ARM
             Haskell-X86、Haskell-PowerPC、Haskell-ARM
2.png

Clang介绍

相比于GCC,Clang具有如下优点

  • 编译速度块:在某平台上,Clang的编译速度显著的快过GCC(Debug模式下编译OC速度比GCC快3倍)

  • 占用内存小:Clang生成的AST所占用的内存是GCC的五分之一左右

  • 模块化设计:Clang采用基于库的模块化设计,易于IDE集成及其他用途的重用

  • 诊断信息可读性强:在编译过程中,Clang创建并保留了大量纤细的元数据(metadata),有利于调试和错误信息更加友善

  • 设计清晰简单,易于理解,扩展性强

Clang 与 LLVM

3.png
LLVM与Clang及其关系: https://blog.csdn.net/xhhjin/article/details/81164076
上一篇 下一篇

猜你喜欢

热点阅读