编译器:gcc, clang, llvm

clang

Clang是LLVM的前端,可以用来编译C,C++,ObjectiveC等语言。传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd)。在编译过程中,前端主要负责词法和语法分析,将源代码转化为抽象语法树;优化器则是在前端的基础上,对得到的中间代码进行优化,使代码更加高效;后端则是将已经优化的中间代码转化为针对各自平台的机器代码。Clang则是以LLVM为后端的一款高效易用,并且与IDE结合很好的编译前端。

llvm

LLVM的命名最早来源于底层语言虚拟机(Low Level Virtual Machine)的缩写。它是一个用于建立编译器的基础框架,以C++编写。创建此工程的目的是对于任意的编程语言,利用该基础框架,构建一个包括编译时、链接时、执行时等的语言执行器。目前官方的LLVM只支持处理C/C++,Objective-C三种语言,当然也有一些非官方的扩展,使其支持ActionScript、Ada、D语言、Fortran、GLSL、Haskell、Java bytecode、Objective-C、Python、Ruby、Rust、Scala以及C#。

为何llvm/clang可以发展起来

  1. LLVM / Clang License是BSD,这条很重要

  2. GCC代码搓,历史包袱巨重,而LLVM / Clang 代码组织结构非常漂亮,你想要改LLVM / Clang 比 GCC 轻松很多。最近我给GCC和Clang都开过Bug,但是Clang的Bug我都愿意去找源码哪里可以修改,报Bug的时候也会说我找到的地方,如何修改等(如Bug 23791 – Clang emit wrong mangling of long double type for PPC64 in the Red Hat),但是GCC我都不愿意去看源代码(虽然我也不能看),只报Bug。

  3. LLVM / Clang 自己的表现也确实很出色,编译速度,执行速度,诊断信息等4. LLVM / Clang 的背后是有钱的苹果,有钱真的是大爷而背后的动力和推手么,动力就是对GCC用的很不满,定制性,可扩展性等都非常的差,而且那时候苹果的Objective-C在GCC那里也得不到很好的支持。这里再次说了License,就说说License这条到底有多重要。比如我们IBM编译器其实除了我所在IBM XL C/C++ Compiler,我们还有一个组是与GCC有关联的,叫做Advance Toolchain,简称AT,而AT Team的就是专干GCC的,而在那个组干过的人就永不能到我们这边干活。同样,由于License的原因,我们根本不准看GCC代码,只能猜,但是我们却又要保持与它的兼容性,那么有了BSD License那可就爽多了。而你说其它开源的东西,如Linux等再造。其它开源的东西姑且不说,如果是类似Linux这样的东西造起来,那么先说一下新造出来的操作系统的生态问题吧。即为什么要用你这个操作系统,还要为你这个操作系统开发软件呢?

猜你喜欢

转载自www.cnblogs.com/muahao/p/9089977.html