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.pswp.cn/news/451234.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451234.shtml
英文地址,請注明出處:http://en.pswp.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、如果你已經在遠程創建了一個分…