美文网首页
Clang的使用

Clang的使用

作者: senpaiLi | 来源:发表于2020-04-21 18:57 被阅读0次
    Clang产生的历史背景

    在clang之前,苹果曾使用GCC作为OC的编译器。

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

    GCC的初衷是为GNU操作系统专门编写的一款编译器。(但是GNU操作系统之路很坎坷,一直没有一个稳定的内核出来,所以目前主流是GNU/Linux家族)
    GCC作为GNU的周边,却走的更远。

    GCC原名为GNU C语言编译器(GNU C Compiler),只能处理C语言。但其很快扩展,变得可处理C++,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective -C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改名GNU编译器套件(GNU Compiler Collection)。

    但是:
    由于 GNU 编译器套装 (GCC) 系统庞大,而且 Apple 大量使用的 Objective-C 在 GCC 中优先级较低,同时 GCC 作为一个纯粹的编译系统,与 IDE 配合并不优秀,Apple 决定从零开始写 C family 的前端,也就是基于 LLVM 的 Clang 了。Clang 由 Apple 公司开发,源代码授权使用 BSD 的开源授权。

    Clang简介

    Low Level Virtual Machine (LLVM) 是一个开源的编译器架构,它已经被成功应用到多个应用领域。Clang ( 发音为 /klæŋ/) 是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程语言。Clang 对源程序进行词法分析和语义分析,并将分析结果转换为 Abstract Syntax Tree ( 抽象语法树 ) ,最后使用 LLVM 作为后端代码的生成器。

    Clang 的开发目标是提供一个可以替代 GCC 的前端编译器。与 GCC 相比,Clang 是一个重新设计的编译器前端,具有一系列优点,例如模块化,代码简单易懂,占用内存小以及容易扩展和重用等。由于 Clang 在设计上的优异性,使得 Clang 非常适合用于设计源代码级别的分析和转化工具。Clang 也已经被应用到一些重要的开发领域,如 Static Analysis(OCLint) 是一个基于 Clang 的静态代码分析工具。

    Clang特性

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

    编译速度快:在某些平台上,Clang 的编译速度显著的快过 GCC。
    占用内存小:Clang 生成的 AST 所占用的内存是 GCC 的五分之一左右。
    模块化设计:Clang 采用基于库的模块化设计,易于 IDE 集成及其他用途的重用。
    诊断信息可读性强:在编译过程中,Clang 创建并保留了大量详细的元数据 (metadata),有利于调试和错误报告。
    设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。
    当前 Clang 还处在不断完善过程中,相比于 GCC, Clang 在以下方面还需要加强:

    支持更多语言:GCC 除了支持 C/C++/Objective-C, 还支持 Fortran/Pascal/Java/Ada/Go 和其他语言。Clang 目前支持的语言有 C/C++/Objective-C/Objective-C++。
    加强对 C++ 的支持:Clang 对 C++ 的支持依然落后于 GCC,Clang 还需要加强对 C++ 提供全方位支持。
    支持更多平台:GCC 流行的时间比较长,已经被广泛使用,对各种平台的支持也很完备。Clang 目前支持的平台有 Linux/Windows/Mac OS。

    相关引用:https://juejin.im/post/594e77ef5188250d9e6504bc

    相关文章

      网友评论

          本文标题:Clang的使用

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