Clang

维基百科,自由的百科全书
跳转至: 导航搜索
Clang
Low Level Virtual Machine Logo
原作者 克里斯·拉特納
開發者 蘋果公司, Google
穩定版本 3.4.2 / 2014年6月19日;43天前 (2014-06-19)
開發狀態 活躍
编程语言 C++
操作系统 Unix-like
平台 跨平台
类型 編譯器
许可协议

伊利诺伊大学厄巴纳-香槟分校開源碼許可(University of Illinois/NCSA Open Source License)

[1]
網站 clang.llvm.org

Clang(发音为 /ˈklæŋ/類似英文單字clang[2]) 是一個CC++Objective-CObjective-C++程式語言的編譯器前端。它採用了底層虛擬機(LLVM)作為其後端。它的目標是提供一個GNU編譯器套裝(GCC)的替代品。作者是克里斯·拉特納,在蘋果公司的贊助支持下進行開發,而原始碼授權是使用類BSD的伊利诺伊大学厄巴纳-香槟分校開源碼許可。

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

概述[编辑]

這個軟體專案在2005年由蘋果電腦發起,是LLVM编译器工具集的前端(front-end),目的是输出代码对应的抽象语法树(Abstract Syntax Tree, AST),並將程式碼編譯成LLVM Bitcode。接著再後端(back-end)使用LLVM編譯成機器語言 。早期Clang即支持C、C++、Objective C。

在Clang語言中,使用Stmt来代表statement。CLag程式碼的单元(unit)皆為语句(statement),语法树的节点(node)类型就是Stmt。另外CLang的表达式(Expression)也是語句的一種,Clang使用Expr來代表Expression,Expr本身繼承自Stmt。节点之下有子节点列表(sub-node-list)。

Clang本身性能優異,其生成的AST所耗用掉的内存僅僅是GCC的20%左右。FreeBSD 10預計使用Clang取代GCC。

效能[编辑]

測試證明Clang编译Objective-C代码时速度为GCC的3倍[4],還能針對使用者發生的編譯錯誤准确地给出建议[5]

版本歷史[编辑]

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

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

參考文獻[编辑]

  1. ^ LLVM Release License. LLVM. [2013-12-02]. 
  2. ^ Christopher, Eric. simply wonder pronunciation of Clang. LLVMdev mailing list. 2008-07-03 [2008-07-09]. 
  3. ^ Clang Static Analyzer. LLVM. [2009-09-03]. 
  4. ^ http://llvm.org/pubs/2007-07-25-LLVM-2.0-and-Beyond.pdf
  5. ^ http://blog.llvm.org/2010/04/amazing-feats-of-clang-error-recovery.html
  6. ^ Divacky, Roman. [ANNOUNCE clang/llvm can compile booting FreeBSD kernel on i386/amd64]. 
  7. ^ Building FreeBSD with Clang, Wiki.freebsd.org. 2012-08-24 [2012-09-18] 
  8. ^ Hornung, Alex. llvm/clang once more. 
  9. ^ Clang, DragonFlyBSD [2012-09-18] 
  10. ^ Clang can compile LLVM and Clang. LLVM Project Blog. 
  11. ^ Clang Successfully Self-Hosts. LLVM Project Blog. 
  12. ^ HelenOS mainline changeset head,294. 
  13. ^ Gregor, Doug. Clang++ Builds Boost!. LLVM Project Blog. 
  14. ^ Davis, Brad. FreeBSD Status Reports April - June, 2010. 
  15. ^ Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts), Lists.cs.uiuc.edu [2012-09-18] 
  16. ^ Gregor, Douglas. New C++0x feature support in Clang. 26 January 2011 [29 January 2011]. 
  17. ^ C++ and C++'0x Support in Clang. LLVM. 
  18. ^ Ledru, Sylvestre. Rebuild of the Debian archive with clang. 
  19. ^ Official Minix 3 website: News. 
  20. ^ Gerzo, Daniel. FreeBSD Quarterly Status Report January-March, 2012. 12 May 2012 [14 May 2012]. 
  21. ^ Davis, Brooks. HEADS UP: Clang now the default on x86. 5 November 2012 [7 November 2012]. 
  22. ^ Webster, Behan. LLVMLinux: Compiling Android with LLVM. 18 February 2013 [11 May 2013]. 
  23. ^ Tinti, Vinicius. LLVMLinux: Nexus 7. 17 March 2013 [11 May 2013]. 
  24. ^ Du Toit, Stefanus. Clang is C++11 feature complete as of *just now*!. 
  25. ^ [llvm-project Revision 194194]. 

外部鏈接[编辑]