美文网首页
GNU/GCC/CLANG/LLVM

GNU/GCC/CLANG/LLVM

作者: doudo | 来源:发表于2017-09-27 17:12 被阅读71次

    因为GCC的编译器已经慢慢无法满足苹果的需求,因此,苹果开发了Clang与LLVM来完全取代GCC,Xcode4之后,苹果的默认编译器已经是LLVM了。Clang作为编译器前端,LLVM作为编译器后端。

    一、GNU

    在1983年,理查德·斯托曼提出GNU计划,希望发展出一套完整的开放源代码操作系统来取代Unix,计划中的操作系统,名为GNU。1989年,GNU项目中的其他部份,如编辑器、编译器、shell等都已经完成,独缺操作系统核心。后来Linux成为常见的GNU计划软件运行平台。GNU计划自己的内核Hurd依然在开发中,但直到2013年为止,都还没有稳定版本发布。
    总结:
    GNU计划本来是为了开发一个自由系统来取代UNIX的,但是由于开发的内核hurd一直不怎么样,这个系统至今都没出稳定版本,然而GNU计划中开发的其他一些自由软件,比如GCC编译器,却非常的好,在移植到各大操作系统上一直广泛使用至今。

    二、GCC

    “ GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器
    GCC原名为GNU C语言编译器GNU C Compiler),因为它原本只能处理C语言。GCC很快地扩展,变得可处理C++。之后也变得可处理FortranPascalObjective-CJavaAda,以及Go与其他语言。
    原本用C开发,后来因为LLVMClang的崛起,令GCC更快将开发语言转换为C++。
    GCC通常是跨平台软件的编译器首选。GCC在所有平台上都使用同一个前端处理程序,产生一样的中介码,因此此中介码在各个其他平台上使用GCC编译,有很大的机会可得到正确无误的输出程序。
    总结:
    mac之前的cocoa框架便是用GCC编译的,所以ios与mac os都是默认使用的GCC编译器(现在是clang与llvm,下面会有介绍)
    android的系统层因为是linux内核,自然也是GCC编译的,但是android的app因为是运行在Dalvik虚拟机,所以用的不是GCC。
    windows的应用,大部分都是使用的vs系列的编译器,毕竟是windows自家的编译器,用到GCC的不多。

    三、clang

    “ Clang 是一个CC++Objective-CObjective-C++编程语言的编译器前端。它采用了底层虚拟机(LLVM)作为其后端。

    四、llvm

    先看看wiki百科上的官方说明:http://zh.wikipedia.org/wiki/LLVM
    “ LLVM,它是一个编译器的基础建设,以C++写成。它是为了任意一种编程语言写成的程序,利用虚拟技术,创造出编译时期链结时期运行时期以及“闲置时期”的优化。

    GCC系统庞大而笨重,而Apple大量使用的Objective-C在GCC中优先级很低。此外GCC作为一个纯粹的编译系统,与IDE配合得很差。
    因为GCC的编译器已经慢慢无法满足苹果的需求,因此,苹果开发了Clang与LLVM来完全取代GCC,Xcode4之后,苹果的默认编译器已经是LLVM了。Clang作为编译器前端,LLVM作为编译器后端。
    编译过程中前面的词法分析、语法分析、语义分析、生成中间代码,我们把它称之为前端处理,后面的优化和目标代码生成我们称之为后端处理。

    相关文章

      网友评论

          本文标题:GNU/GCC/CLANG/LLVM

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