Clang

Clang（類似英文單字clang）
是一個C、C++、Objective-C和Objective-C++程式語言的編譯器前端。它採用了LLVM作為其後端，由LLVM2.6開始，一起釋出新版本。它的目標是提供一個GNU編譯器套裝（GCC）的替代品，支援了GNU編譯器大多數的編譯設定以及非官方語言的擴充功能。作者是克里斯·拉特納（Chris Lattner），在蘋果公司的贊助支持下進行開發，而原始碼授權是使用類BSD的伊利诺伊大学厄巴纳-香槟分校開源碼許可。

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

 概述 
這個軟體專案在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作为默认编译器。

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

 版本歷史 
這個表格只記錄了Clang歷史中特別的階段與版本
 日期 要點  Clang前端以開放原始碼授權釋出   Clang/LLVM能夠編譯出可運作的FreeBSD核心。  Clang/LLVM能夠編譯出可運作的DragonFly BSD核心。  Clang 1.0首度與LLVM 2.6一起釋出。  產生的C和Objective-C程式碼達到產品品質（但C++和Objective-C++仍未完成）Clang C++能夠編譯GCC 4.2的libstdc++並為某些特定的程式產生可運作的程式碼，並可以編譯自身。  Clang能夠。  經過修改後的能夠用Clang編譯，,並在IA-32上通過所有空間與使用者回歸測試。  最新版的Clang成功建制Boost C++ Libraries，並且幾乎通過了所有測驗  Clang/LLVM被整合在FreeBSD之中（但預設編譯器仍是GCC）  Clang/LLVM能夠編譯可運作的Linux核心。  初步實現所有C++0x草案標準，其中少部分草案中的新特性也出現在開發版的Clang中。  Clang能夠編譯出可運作的HotSpot Java虛擬機器  Clang 3.0能夠重建超過91%Debian成品。  Clang成為MINIX 3中預設的編譯器。  FreeBSD宣布Clang/LLVM將成為預設編譯器，取代沿用多年的GCC。  Clang成為FreeBSD預設編譯器。  Clang/LLVM能夠編譯出Nexus 7修改版可運作的Android Linux核心。  Clang完成所有C++11特性。  Clang完成所有C++14特性。

參考文獻

外部連結

LLVMdev: New LLVM C front-end: "clang", announcement（11 July 2007）
Presentation: Ted Kremenek - Finding Bugs with the Clang Static Analyzer, Slides
Presentation: Steve Naroff - Clang Internals, Slides
2009 DevMtg Clang presentation

Category:C編譯器
Category:C++編譯器
Category:静态代码分析工具
Category:自由編譯器與直譯器