![]() | |
![]() | |
原作者 | 克里斯·拉特納 |
---|---|
開發者 | LLVM开发小组 |
当前版本 | ![]() |
源代码库 | ![]() |
编程语言 | C++ |
操作系统 | Unix-like |
平台 | 跨平台 |
类型 | 編譯器 |
许可协议 |
|
网站 | clang![]() |
Clang(发音为/ˈklæŋ/類似英文單字clang[4])是一個C、C++、Objective-C和Objective-C++程式語言的編譯器前端。它採用了LLVM作為其後端,由LLVM2.6開始,一起釋出新版本。它的目標是提供一個GNU編譯器套裝(GCC)的替代品,支援了GNU編譯器大多數的編譯設定以及非官方語言的擴充功能。作者是克里斯·拉特納(Chris Lattner),在蘋果公司的贊助支持下進行開發,而原始碼授權是使用類BSD的伊利诺伊大学厄巴纳-香槟分校開源碼許可。
Clang專案包括Clang前端和Clang靜態分析器等。[5]
這個軟體專案在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作为默认编译器[6]。
測試證明Clang编译Objective-C代码时速度为GCC的3倍[7],還能針對使用者發生的編譯錯誤准确地给出建议[8]。
這個表格只記錄了Clang歷史中特別的階段與版本
日期 | 要點 |
---|---|
000000002007-07-11-00002007年7月11日 | Clang前端以開放原始碼授權釋出 |
000000002009-02-25-00002009年2月25日 | Clang/LLVM能夠編譯出可運作的FreeBSD核心。[9][10] |
000000002009-03-16-00002009年3月16日 | Clang/LLVM能夠編譯出可運作的DragonFly BSD核心。[11][12] |
000000002009-10-23-00002009年10月23日 | Clang 1.0首度與LLVM 2.6一起釋出。 |
000000002009-12-24-00002009年12月24日 | 產生的C和Objective-C程式碼達到產品品質(但C++和Objective-C++仍未完成)Clang C++能夠編譯GCC 4.2的libstdc++並為某些特定的程式產生可運作的程式碼,並可以編譯自身。[13] |
000000002010-02-02-00002010年2月2日 | Clang能夠自举(英语:Self-hosting)。[14] |
000000002010-02-20-00002010年2月20日 | 經過修改後的HelenOS(英语:HelenOS)能夠用Clang編譯,,並在IA-32上通過所有空間與使用者回歸測試。[15] |
000000002010-05-20-00002010年5月20日 | 最新版的Clang成功建制Boost C++ Libraries,並且幾乎通過了所有測驗[16] |
000000002010-06-10-00002010年6月10日 | Clang/LLVM被整合在FreeBSD之中(但預設編譯器仍是GCC)[17] |
000000002010-10-25-00002010年10月25日 | Clang/LLVM能夠編譯可運作的Linux核心。[18] |
000000002011-01-26-00002011年1月26日 | 初步實現所有C++0x草案標準,其中少部分草案中的新特性也出現在開發版的Clang中。[19][20] |
000000002011-02-10-00002011年2月10日 | Clang能夠編譯出可運作的HotSpotJava虛擬機器 |
000000002012-02-28-00002012年2月28日 | Clang 3.0能夠重建超過91%Debian成品。[21] |
000000002012-02-29-00002012年2月29日 | Clang成為MINIX 3中預設的編譯器。[22] |
000000002012-05-12-00002012年5月12日 | FreeBSD宣布Clang/LLVM將成為預設編譯器,取代沿用多年的GCC。[23] |
000000002012-11-05-00002012年11月5日 | Clang成為FreeBSD預設編譯器。[24] |
000000002013-02-18-00002013年2月18日 | Clang/LLVM能夠編譯出Nexus 7修改版可運作的AndroidLinux核心。[25][26] |
000000002013-04-19-00002013年4月19日 | Clang完成所有C++11特性。[27] |
000000002013-11-06-00002013年11月6日 | Clang完成所有C++14特性。[28] |