Clang

维基百科,自由的百科全书
(差异) ←上一修订 | 最后版本 (差异) | 下一修订→ (差异)
跳转到导航 跳转到搜索
Clang
File:LLVM Logo.svg
File:Clang 21.1.7 version and compile information screenshot.webp
原作者克里斯·拉特纳
开发者LLVM开发小组
当前版本
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    源代码库
    • {{URL|example.com|可选的显示文本}}
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    编程语言C++
    引擎
      Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
      操作系统Unix-like
      平台跨平台
      类型编译器
      许可协议

      Clang(发音为/ˈklæŋ/类似英文单字clang[2]) 是一个CC++Objective-CObjective-C++编程语言的编译器前端。它采用了LLVM作为其后端,由LLVM2.6开始,一起发布新版本。它的目标是提供一个GNU编译器套装(GCC)的替代品,支持了GNU编译器大多数的编译设定以及非官方语言的扩展。作者是克里斯·拉特纳(Chris Lattner),在苹果公司的赞助支持下进行开发,而源代码许可是使用类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。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作为默认编译器[4]

      性能[编辑]

      测试证明Clang编译Objective-C代码时速度为GCC的3倍[5],还能针对用户发生的编译错误准确地给出建议[6]

      版本历史[编辑]

      这个表格只记录了Clang历史中特别的阶段与版本

      日期 要点
      2007年7月11日 Clang前端以开放源代码许可发布
      2009年2月25日 Clang/LLVM能够编译出可运作的FreeBSD核心。[7][8]
      2009年3月16日 Clang/LLVM能够编译出可运作的DragonFly BSD核心。[9][10]
      2009年10月23日 Clang 1.0首度与LLVM 2.6一起发布。
      2009年12月24日 产生的C和Objective-C代码达到产品质量(但C++和Objective-C++仍未完成)Clang C++能够编译GCC 4.2的libstdc++并为某些特定的程序产生可运作的代码,并可以编译自身。[11]
      2010年2月2日 Clang能够自举英语Self-hosting[12]
      2010年2月20日 经过修改后的HelenOS英语HelenOS能够用Clang编译,,并在IA-32上通过所有空间与用户回归测试。[13]
      2010年5月20日 最新版的Clang成功建制Boost C++ Libraries,并且几乎通过了所有测验[14]
      2010年6月10日 Clang/LLVM被集成在FreeBSD之中(但默认编译器仍是GCC)[15]
      2010年10月25日 Clang/LLVM能够编译可运作的Linux核心[16]
      2011年1月26日 初步实现所有C++0x草案标准,其中少部分草案中的新特性也出现在开发版的Clang中。[17][18]
      2011年2月10日 Clang能够编译出可运作的HotSpot Java虚拟机
      2012年2月28日 Clang 3.0能够重建超过91%Debian成品。[19]
      2012年2月29日 Clang成为MINIX 3中默认的编译器。[20]
      2012年5月12日 FreeBSD宣布Clang/LLVM将成为默认编译器,取代沿用多年的GCC。[21]
      2012年11月5日 Clang成为FreeBSD默认编译器。[22]
      2013年2月18日 Clang/LLVM能够编译出Nexus 7修改版可运作的Android Linux核心[23][24]
      2013年4月19日 Clang完成所有C++11特性。[25]
      2013年11月6日 Clang完成所有C++14特性。[26]

      参考文献[编辑]

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

      外部链接[编辑]