来自 phoronix 的消息称,根据 FreeBSD 2012 第一季度的状态报告 显示,来自 LLVM 的 Clang 编译器将成为 FreeBSD 10 的默认 C/C++ 编译器,废弃使用 GPL 授权协议的 GCC,而 Clang 的授权协议是 BSD。

Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。

Clang 开发事出有因,Wiki 介绍如下:

  • Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端显卡) 上生成代码 (JIT),令程序仍然能够正常运行。之后 LLVM 与 GCC 的集成过程引发了一些不快,GCC 系统庞大而笨重,而 Apple 大量使用的 Objective-C 在 GCC 中优先级很低。此外 GCC 作为一个纯粹的编译系统,与 IDE 配合很差。加之许可证方面的要求,Apple 无法使用修改版的 GCC 而闭源。于是 Apple 决定从零开始写 C family 的前端,也就是基于 LLVM 的 Clang 了。

Clang 的特性:

  1. 快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 是 Apple GCC 4.0 的 2.5x 快。
  2. 内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10x。
  3. 诊断信息可读性强:(推荐去网站观看)其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示犹如天书。
  4. 和GCC的兼容性。
  5. 设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。
  6. 基于库的模块化设计,易于 IDE 集成及其他用途的重用。由于历史遗留原因,GCC 只是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。

更多关于Clang的详细信息,或者下载地址请点这里

本文转载自: 开源中国

FreeBSD 10 将使用 Clang 编译器替换 GCC相关推荐

  1. c 各种编译器(gcc clang)

    很多时候,出现一些类似GNU,GCC,CLANG,LLVM等与编译器有关的名词的时候,都不太清楚它到底是干嘛的,理解这些东西后, 对于xcode中很多配置型的需求修改起来都会得心应手,因此有必要了解透 ...

  2. 编译器(GNU GCC clang llvm)

    前言: 很多时候,出现一些类似GNU,GCC,CLANG,LLVM等与编译器有关的名词的时候,都不太清楚它到底是干嘛的,理解这些东西后, 对于xcode中很多配置型的需求修改起来都会得心应手,因此有必 ...

  3. 转:GCC,LLVM,Clang编译器对比

    GCC,LLVM,Clang编译器对比 转自: http://www.cnblogs.com/qoakzmxncb/archive/2013/04/18/3029105.html 在XCode中,我们 ...

  4. 详解三大编译器:gcc、llvm 和 clang

    传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd). 编译器一般构成 传统的编译器通常分为三个部分,前端(frontEnd),优化器(Opti ...

  5. v深入研究Clang(四) Clang编译器的简单分析

    作者:史宁宁(snsn1984) 首先我们确定下Clang编译器的详细内容和涵盖范围.之前在<LLVM每日谈之二十 Everything && Clang driver > ...

  6. 如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理

    如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理 Nginx 是一款自由开源的 HTTP 和反向代理服务器,也可以用作 POP3/IMAP 的邮件代理服务器.Ngi ...

  7. 深入研究Clang(四) Clang编译器的简单分析

    作者:史宁宁(snsn1984) 首先我们确定下Clang编译器的具体内容和涵盖范围.之前在<LLVM每日谈之二十 Everything && Clang driver > ...

  8. 【 Ubuntu 】clang 编译器

    ubuntu 20.04 添加 clang 编译器 1.添加源 2.安装 (1)先添加key (2)安装clang-10 3.查看版本 1.添加源 sudo vim /etc/apt/sources. ...

  9. Microsoft的CL编译器与GCC到底有什么区别?

    解析CL编译器与GCC的各种差异 编译器版本 统一编译.查看命令 函数调用 栈帧分配 gcc结果 CL结果 函数的调用及传参 gcc结果 CL结果 总结 编译器版本 gcc -v: gcc versi ...

最新文章

  1. Could not find com.android.tools.build:gradle
  2. 第6周第4课:复习及扩展知识
  3. [单反八]人像三平原则
  4. 良心之作----centos6.5下安装svn客户端报错
  5. C# 路由(Route)
  6. 基于javafx的五子棋_JavaFX中基于表达式的PathTransitions
  7. mysql技术大会2020_2020年数据库技术大会助力技术提升
  8. plesk 运行不了php,如何在Plesk中使用composer(使用其他版本的PHP运行Composer)
  9. day27-python并发编程之多进程
  10. 方正畅听 文字识别自动语音朗读软件
  11. php引用字体,php – 使用imagettftext()时,如何处理字体文件不支持的字符?
  12. 声控小夜灯方案开发 声控小夜灯IC芯片方案开发MCU
  13. java中最大最小值
  14. Android 导出PDF PdfDocument
  15. 银行卡Bin和Logo
  16. canvas实现打字输入效果
  17. laravel 多语言切换
  18. 基于安卓平台的远程医疗APP设计
  19. 笔记本电脑英文技术规格解释
  20. 【多线程】c语言中的多线程

热门文章

  1. 【转】1.C Task.CompletedTask和Task.Result小记
  2. [Sharepoint2007对象模型]第二回:Web应用程序服务(SPWebService)
  3. 【牛客 - 318J】王者荣耀(dp,01背包)
  4. 【牛客 - 297D】little w and Exchange(上下界贪心)
  5. 【CodeForces - 298B 】Sail (模拟,题意)
  6. 【PAT - 甲级 - 1018】Public Bike Management (带权最短路,多条最短路中加条件,DFS)
  7. 【CodeForces - 569C】Primes or Palindromes? (思维,分析范围,暴力枚举判断)
  8. java word转html 乱码 poi,java word转html poi
  9. oracle基表恢复,查找V$PARAMETER 基表 – 专业Oracle数据库恢复,或许是您恢复数据的最后机会@phone:13429648788 - 专业Oracle数据库恢复技术支持...
  10. linux mysql io压力大_MySQL 调优基础(四) Linux 磁盘IO_MySQL