Clang

Clang（发音为/ˈklæŋ/類似英文單字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歷史中特別的階段與版本 Release LLVM 19.1.1 · llvm/llvm-project. [2024年10月3日] （英語）.  引文格式1维护：未识别语文类型 (link) The LLVM Project is under the Apache License v2.0 with LLVM Exceptions, llvm.org, [2021-02-03], （原始内容存档于2022-06-29）  Christopher, Eric. simply wonder pronunciation of Clang. LLVMdev (邮件列表). 2008-07-03 [2008-07-09]. （原始内容存档于2012-02-08）.  Clang Static Analyzer. LLVM. [2009-09-03]. （原始内容存档于2011-10-08）.  FreeBSD 10.0-RELEASE Announcement. [2017-07-17]. （原始内容存档于2017-07-08）.  Chris Lattner. LLVM - 2.0 and beyond! (PDF). [2013-09-26]. （原始内容存档 (PDF)于2012-06-18）.  Amazing feats of Clang Error Recovery. [2013-09-26]. （原始内容存档于2010-07-02）.  Divacky, Roman. [ANNOUNCE] clang/llvm can compile booting FreeBSD kernel on i386/amd64. [2013-11-08]. （原始内容存档于2012-04-30）.  Building FreeBSD with Clang, Wiki.freebsd.org, 2012-08-24 [2012-09-18], （原始内容存档于2012-10-01）  Hornung, Alex. llvm/clang once more. [2013-11-08]. （原始内容存档于2012-04-30）.  Clang, DragonFlyBSD, [2012-09-18], （原始内容存档于2012-10-05）  Clang can compile LLVM and Clang. LLVM Project Blog. [2013-11-08]. （原始内容存档于2012-04-30）.  Clang Successfully Self-Hosts. LLVM Project Blog. [2013-11-08]. （原始内容存档于2012-04-30）.  HelenOS mainline changeset head,294. [2013-11-08]. （原始内容存档于2012-04-30）.  Gregor, Doug. Clang++ Builds Boost!. LLVM Project Blog. [2013-11-08]. （原始内容存档于2012-04-30）.  Davis, Brad. FreeBSD Status Reports April - June, 2010. [2013-11-08]. （原始内容存档于2012-04-30）.  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）  Gregor, Douglas. New C++0x feature support in Clang (邮件列表). 26 January 2011 [29 January 2011]. （原始内容存档于2011年1月30日）.  C++ and C++'0x Support in Clang. LLVM. [2013-11-08]. （原始内容存档于2019-05-28）.  Ledru, Sylvestre. Rebuild of the Debian archive with clang. [2013-11-08]. （原始内容存档于2012-06-18）.  Official Minix 3 website: News. [2013-11-08]. （原始内容存档于2015-11-28）.  Gerzo, Daniel. FreeBSD Quarterly Status Report January-March, 2012 (邮件列表). 12 May 2012 [14 May 2012]. （原始内容存档于2012-06-30）.  Davis, Brooks. HEADS UP: Clang now the default on x86 (邮件列表). 5 November 2012 [7 November 2012]. （原始内容存档于2013-11-22）.  Webster, Behan. LLVMLinux: Compiling Android with LLVM (PDF). 18 February 2013 [11 May 2013]. （原始内容 (PDF)存档于2014-05-12）.  Tinti, Vinicius. LLVMLinux: Nexus 7. 17 March 2013 [11 May 2013]. （原始内容存档于2014-06-11）.  Du Toit, Stefanus. Clang is C++11 feature complete as of *just now*!. [2013-11-08]. （原始内容存档于2019-09-24）.  [llvm-project] Revision 194194. [2013-11-08]. （原始内容存档于2017-01-30）.  官方网站 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（页面存档备份，存于互联网档案馆）