Clang

編譯器前端

Clang(發音為/ˈklæŋ/類似英文單字clang[3]) 是一個CC++Objective-CObjective-C++程式語言的編譯器前端。它採用了LLVM作為其後端,由LLVM2.6開始,一起釋出新版本。它的目標是提供一個GNU編譯器套裝(GCC)的替代品,支援了GNU編譯器大多數的編譯設置以及非官方語言的擴充功能。作者是克里斯·拉特納(Chris Lattner),在蘋果公司的贊助支援下進行開發,而原始碼特許是使用類BSD的伊利諾伊大學厄巴納-香檳分校開原始碼許可。

Clang
原作者克里斯·拉特納
開發者LLVM開發小組
目前版本
  • 19.1.3(2024年10月30日;穩定版本)[1]
編輯維基數據連結
原始碼庫 編輯維基數據連結
程式語言C++
作業系統Unix-like
平台跨平台
類型編譯器
特許條款
網站clang.llvm.org 編輯維基數據

Clang專案包括Clang前端和Clang靜態剖析器等。[4]

概述

編輯

這個軟件專案在2005年由蘋果公司發起,是LLVM編譯器工具集的前端(front-end),目的是輸出代碼對應的抽象語法樹(Abstract Syntax Tree, AST),並將程式碼編譯成LLVM Bitcode。接着在後端(back-end)使用LLVM編譯成平台相關的機器語言 。Clang支援C、C++、Objective C。

在Clang語言中,使用Stmt來代表statement。Clang程式碼的單元(unit)皆為陳述式(statement),語法樹的節點(node)類型就是Stmt。另外Clang的表達式(Expression)也是陳述式的一種,Clang使用Expr來代表Expression,Expr本身繼承自Stmt。節點之下有子節點列表(sub-node-list)。

Clang本身效能優異,其生成的AST所耗用掉的主記憶體僅僅是GCC的20%左右。FreeBSD作業系統自2014年1月發行的10.0版本開始將Clang/LLVM作為預設編譯器[5]

效能

編輯

測試證明Clang編譯Objective-C代碼時速度為GCC的3倍[6],還能針對用戶發生的編譯錯誤準確地給出建議[7]

版本歷史

編輯

這個表格只記錄了Clang歷史中特別的階段與版本

日期 要點
2007年7月11日 Clang前端以開放原始碼特許釋出
2009年2月25日 Clang/LLVM能夠編譯出可運作的FreeBSD核心。[8][9]
2009年3月16日 Clang/LLVM能夠編譯出可運作的DragonFly BSD核心。[10][11]
2009年10月23日 Clang 1.0首度與LLVM 2.6一起釋出。
2009年12月24日 產生的C和Objective-C程式碼達到產品質素(但C++和Objective-C++仍未完成)Clang C++能夠編譯GCC 4.2的libstdc++並為某些特定的程式產生可運作的程式碼,並可以編譯自身。[12]
2010年2月2日 Clang能夠自舉英語Self-hosting[13]
2010年2月20日 經過修改後的HelenOS英語HelenOS能夠用Clang編譯,,並在IA-32上通過所有空間與用戶回歸測試。[14]
2010年5月20日 最新版的Clang成功建制Boost C++ Libraries,並且幾乎通過了所有測驗[15]
2010年6月10日 Clang/LLVM被整合在FreeBSD之中(但預設編譯器仍是GCC)[16]
2010年10月25日 Clang/LLVM能夠編譯可運作的Linux核心[17]
2011年1月26日 初步實現所有C++0x草案標準,其中少部分草案中的新特性也出現在開發版的Clang中。[18][19]
2011年2月10日 Clang能夠編譯出可運作的HotSpot Java虛擬機器
2012年2月28日 Clang 3.0能夠重建超過91%Debian成品。[20]
2012年2月29日 Clang成為MINIX 3中預設的編譯器。[21]
2012年5月12日 FreeBSD宣佈Clang/LLVM將成為預設編譯器,取代沿用多年的GCC。[22]
2012年11月5日 Clang成為FreeBSD預設編譯器。[23]
2013年2月18日 Clang/LLVM能夠編譯出Nexus 7修改版可運作的Android Linux核心[24][25]
2013年4月19日 Clang完成所有C++11特性。[26]
2013年11月6日 Clang完成所有C++14特性。[27]

參考文獻

編輯
  1. ^ LLVM 19.1.3. 2024年10月30日 [2024年10月30日]. 
  2. ^ The LLVM Project is under the Apache License v2.0 with LLVM Exceptions, llvm.org, [2021-02-03], (原始內容存檔於2022-06-29) 
  3. ^ Christopher, Eric. simply wonder pronunciation of Clang. LLVMdev (郵寄清單). 2008-07-03 [2008-07-09]. (原始內容存檔於2012-02-08). 
  4. ^ Clang Static Analyzer. LLVM. [2009-09-03]. (原始內容存檔於2011-10-08). 
  5. ^ FreeBSD 10.0-RELEASE Announcement. [2017-07-17]. (原始內容存檔於2017-07-08). 
  6. ^ Chris Lattner. LLVM - 2.0 and beyond! (PDF). [2013-09-26]. (原始內容存檔 (PDF)於2012-06-18). 
  7. ^ Amazing feats of Clang Error Recovery. [2013-09-26]. (原始內容存檔於2010-07-02). 
  8. ^ Divacky, Roman. [ANNOUNCE] clang/llvm can compile booting FreeBSD kernel on i386/amd64. [2013-11-08]. (原始內容存檔於2012-04-30). 
  9. ^ Building FreeBSD with Clang, Wiki.freebsd.org, 2012-08-24 [2012-09-18], (原始內容存檔於2012-10-01) 
  10. ^ Hornung, Alex. llvm/clang once more. [2013-11-08]. (原始內容存檔於2012-04-30). 
  11. ^ Clang, DragonFlyBSD, [2012-09-18], (原始內容存檔於2012-10-05) 
  12. ^ Clang can compile LLVM and Clang. LLVM Project Blog. [2013-11-08]. (原始內容存檔於2012-04-30). 
  13. ^ Clang Successfully Self-Hosts. LLVM Project Blog. [2013-11-08]. (原始內容存檔於2012-04-30). 
  14. ^ HelenOS mainline changeset head,294. [2013-11-08]. (原始內容存檔於2012-04-30). 
  15. ^ Gregor, Doug. Clang++ Builds Boost!. LLVM Project Blog. [2013-11-08]. (原始內容存檔於2012-04-30). 
  16. ^ Davis, Brad. FreeBSD Status Reports April - June, 2010. [2013-11-08]. (原始內容存檔於2012-04-30). 
  17. ^ Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts), Lists.cs.uiuc.edu, [2012-09-18], (原始內容存檔於2015-09-07) 
  18. ^ Gregor, Douglas. New C++0x feature support in Clang (郵寄清單). 26 January 2011 [29 January 2011]. (原始內容存檔於2011年1月30日). 
  19. ^ C++ and C++'0x Support in Clang. LLVM. [2013-11-08]. (原始內容存檔於2019-05-28). 
  20. ^ Ledru, Sylvestre. Rebuild of the Debian archive with clang. [2013-11-08]. (原始內容存檔於2012-06-18). 
  21. ^ Official Minix 3 website: News. [2013-11-08]. (原始內容存檔於2015-11-28). 
  22. ^ Gerzo, Daniel. FreeBSD Quarterly Status Report January-March, 2012 (郵寄清單). 12 May 2012 [14 May 2012]. (原始內容存檔於2012-06-30). 
  23. ^ Davis, Brooks. HEADS UP: Clang now the default on x86 (郵寄清單). 5 November 2012 [7 November 2012]. (原始內容存檔於2013-11-22). 
  24. ^ Webster, Behan. LLVMLinux: Compiling Android with LLVM (PDF). 18 February 2013 [11 May 2013]. (原始內容 (PDF)存檔於2014-05-12). 
  25. ^ Tinti, Vinicius. LLVMLinux: Nexus 7. 17 March 2013 [11 May 2013]. (原始內容存檔於2014-06-11). 
  26. ^ Du Toit, Stefanus. Clang is C++11 feature complete as of *just now*!. [2013-11-08]. (原始內容存檔於2019-09-24). 
  27. ^ [llvm-project] Revision 194194. [2013-11-08]. (原始內容存檔於2017-01-30). 

外部連結

編輯