FreeBSD 10 将使用 Clang 编译器替换 GCC
来自 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 的特性:
- 快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 是 Apple GCC 4.0 的 2.5x 快。
- 内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10x。
- 诊断信息可读性强:(推荐去网站观看)其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示犹如天书。
- 和GCC的兼容性。
- 设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。
- 基于库的模块化设计,易于 IDE 集成及其他用途的重用。由于历史遗留原因,GCC 只是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。
更多关于Clang的详细信息,或者下载地址请点这里
本文转载自: 开源中国
FreeBSD 10 将使用 Clang 编译器替换 GCC相关推荐
- c 各种编译器(gcc clang)
很多时候,出现一些类似GNU,GCC,CLANG,LLVM等与编译器有关的名词的时候,都不太清楚它到底是干嘛的,理解这些东西后, 对于xcode中很多配置型的需求修改起来都会得心应手,因此有必要了解透 ...
- 编译器(GNU GCC clang llvm)
前言: 很多时候,出现一些类似GNU,GCC,CLANG,LLVM等与编译器有关的名词的时候,都不太清楚它到底是干嘛的,理解这些东西后, 对于xcode中很多配置型的需求修改起来都会得心应手,因此有必 ...
- 转:GCC,LLVM,Clang编译器对比
GCC,LLVM,Clang编译器对比 转自: http://www.cnblogs.com/qoakzmxncb/archive/2013/04/18/3029105.html 在XCode中,我们 ...
- 详解三大编译器:gcc、llvm 和 clang
传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd). 编译器一般构成 传统的编译器通常分为三个部分,前端(frontEnd),优化器(Opti ...
- v深入研究Clang(四) Clang编译器的简单分析
作者:史宁宁(snsn1984) 首先我们确定下Clang编译器的详细内容和涵盖范围.之前在<LLVM每日谈之二十 Everything && Clang driver > ...
- 如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理
如何在 FreeBSD 10.2 上安装 Nginx 作为 Apache 的反向代理 Nginx 是一款自由开源的 HTTP 和反向代理服务器,也可以用作 POP3/IMAP 的邮件代理服务器.Ngi ...
- 深入研究Clang(四) Clang编译器的简单分析
作者:史宁宁(snsn1984) 首先我们确定下Clang编译器的具体内容和涵盖范围.之前在<LLVM每日谈之二十 Everything && Clang driver > ...
- 【 Ubuntu 】clang 编译器
ubuntu 20.04 添加 clang 编译器 1.添加源 2.安装 (1)先添加key (2)安装clang-10 3.查看版本 1.添加源 sudo vim /etc/apt/sources. ...
- Microsoft的CL编译器与GCC到底有什么区别?
解析CL编译器与GCC的各种差异 编译器版本 统一编译.查看命令 函数调用 栈帧分配 gcc结果 CL结果 函数的调用及传参 gcc结果 CL结果 总结 编译器版本 gcc -v: gcc versi ...
最新文章
- Could not find com.android.tools.build:gradle
- 第6周第4课:复习及扩展知识
- [单反八]人像三平原则
- 良心之作----centos6.5下安装svn客户端报错
- C# 路由(Route)
- 基于javafx的五子棋_JavaFX中基于表达式的PathTransitions
- mysql技术大会2020_2020年数据库技术大会助力技术提升
- plesk 运行不了php,如何在Plesk中使用composer(使用其他版本的PHP运行Composer)
- day27-python并发编程之多进程
- 方正畅听 文字识别自动语音朗读软件
- php引用字体,php – 使用imagettftext()时,如何处理字体文件不支持的字符?
- 声控小夜灯方案开发 声控小夜灯IC芯片方案开发MCU
- java中最大最小值
- Android 导出PDF PdfDocument
- 银行卡Bin和Logo
- canvas实现打字输入效果
- laravel 多语言切换
- 基于安卓平台的远程医疗APP设计
- 笔记本电脑英文技术规格解释
- 【多线程】c语言中的多线程
热门文章
- 【转】1.C Task.CompletedTask和Task.Result小记
- [Sharepoint2007对象模型]第二回:Web应用程序服务(SPWebService)
- 【牛客 - 318J】王者荣耀(dp,01背包)
- 【牛客 - 297D】little w and Exchange(上下界贪心)
- 【CodeForces - 298B 】Sail (模拟,题意)
- 【PAT - 甲级 - 1018】Public Bike Management (带权最短路,多条最短路中加条件,DFS)
- 【CodeForces - 569C】Primes or Palindromes? (思维,分析范围,暴力枚举判断)
- java word转html 乱码 poi,java word转html poi
- oracle基表恢复,查找V$PARAMETER 基表 – 专业Oracle数据库恢复,或许是您恢复数据的最后机会@phone:13429648788 - 专业Oracle数据库恢复技术支持...
- linux mysql io压力大_MySQL 调优基础(四) Linux 磁盘IO_MySQL