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 的特性:

  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的详细信息,或者下载地址请点这里

本文转载自: 开源中国

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HashMap中数组初始化的秘密

2019独角兽企业重金招聘Python工程师标准>>> 我们知道,在新建一个HashMap对象时,无论传的initialCapacity参数值为多少,最总HashMap中数组的长度始终为2的n次方,代码如下: static final int tableSizeFor(i…

PLSQL 安装+配置( Oracle数据库连接工具 )

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 1.找到免安装版本 PLSQL 解压到自己想放的位置 (比如 D:\ChengXu\PLSQL\PLSQL) 2.配置环境变量 : 系统变量…

什么是Nginx?为什么使用Nginx?

一、前言为毛要用nginx服务器代理,不直接用tomcat 7.0,还做多了一次接请求?这个是我想问的,公司的新项目是要用Nginxtomcat7jdk开发的,用户命名可以直接访问tomcat,为啥还要用Nginx?这货是个啥玩…

遵循五大设计理念 打造出色设计师

与其他设计不同,网页设计会随着时间的改变而不断改变着。因此,网页设计师需要不断的自我提升,了解最前沿的设计趋势以便能够设计出更加新颖的网站。 两年前,网页设计呈现出一片新的思维方式和新颖的设计趋势使得该领域彰显出一片…

shell符号

*: 通配符 *.c : c结尾的文件 *v : v结尾的文件 v* : v开头的文件转载于:https://www.cnblogs.com/runlgs/p/9685751.html

伪共享和缓存行填充,Java并发编程还能这么优化!

前言 关于伪共享的文章已经很多了,对于多线程编程来说,特别是多线程处理列表和数组的时候,要非常注意伪共享的问题。否则不仅无法发挥多线程的优势,还可能比单线程性能还差。随着JAVA版本的更新,再各个版本上减少伪共享…

mysql中like % %模糊查询

1,%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。 比如 SELECT * FROM [user] WHERE u_name LIKE %三% 将会把u_name为“张三”,“张猫三…

Java中判断字符串是否为数字的五种方法

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 推荐使用第二个方法,速度最快。 方法一:用JAVA自带的函数 Java代码 public static boolean isNumeric(String…

慕学在线网0.4_xadmin后台管理

admin是基于Django开发的后台管理框架,方便,快捷,而且简单;   而xadmin就相当于admin的升级版,更加强大。    1、安装xadmin(源码安装方式)  教程 PS: - 卸载pip安装的xadminp…

从一次换机器的过程谈软硬件的分离

今天把在公司使用的计算机更换了一台,原来是Dell的780,换成了Dell的790,机箱的样子变化比较大,但是里面硬件的配置变换并不大,最明显的变化就在于CPU,其他像内存、硬盘等等的配置与原来的计算机基本上一致。…

知其所以然~redis的原子性

原子性 原子性是数据库的事务中的特性。在数据库事务的情景下,原子性指的是:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。 对于Redis而言&#xf…

JoinPoint的用法

JoinPoint 对象 JoinPoint对象封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就可以获取到封装了该方法信息的JoinPoint对象. 常用api: 方法名功能Signature getSignature();获取封装了署名信息的对象,在该对象中可以获取到目标方法名,所属类的Class等信息…

解决 No projects are available for deployment to this server!

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 如题,今天在尝试部署从SVN上down下来的项目时,发现不能被tomcat识别成web项目!原因是SVN上down下来的…

地大信工成果快报

在成果快报投稿中,请注意以下几个问题:(1)成果信息一定要准确、全面,所有作者必须都要列出来,而不要出现et al. 这样的表述,通讯作者一定要用*号标注;(2)成果…

javaBean的命名规则

前段时间,写程序时,出了错误,竟然没有想到是自己属性命名的问题,哎~~~真是一定要注意规范呀,在这里我从网上找了些,规范作为参考 Sun 推荐的命名规范 1 ,类名要首字母大写,后面的单词…

volatile的应用

volatile,中文意思是不稳定的、反复无常的,用来修饰变量,和多线程、并发有关系。 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行。 在多…

漫谈国内智能手机市场现状

本文纯属一时兴起,想到哪儿写到哪儿,本人文笔也不咋地,写的也比较随意,如有错误欢迎指正,有啥意见欢迎交流。原创文章,转载注明emouse的技术专栏。 我是一个不折不扣的数码爱好者,对电脑手机这些…

【刷题】BZOJ 4195 [Noi2015]程序自动分析

Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xixj或xi≠xj的变量相等/不等的约束条件,请判定是否可以分别为每一个…

mysql 5.5 安装配置方法图文教程

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 回忆一下mysql 5.5 安装配置方法,整理mysql 5.5 安装配置教程笔记,分享给大家。 MySQL下载地址:htt…

git解除与远程分支的关联

在工作中,经常需要将同一份代码传到不同的git仓库中去 如果本地同样一份代码,已经关联了一个与远程分支,那么怎么才能解除原程分支,并关联到一个新的分支将代码提交到新的分支上去呢? 1、如果你已经在远程创建了一个分…