Clang

Clang[编辑]

Clang
Low Level Virtual Machine Logo
原作者 克里斯·拉特纳
开发者 苹果公司, Google等
稳定版本 3.5(2014年9月4日,4个月前
开发状态 活跃
编程语言 C++
操作系统 Unix-like
平台 跨平台
类型 编译器
许可协议

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

[1]
网站 clang.llvm.org

Clang(发音为/ˈklæŋ/类似英文单字clang[2]) 是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端。它采用了底层虚拟机(LLVM)作为其后端。它的目标是提供一个GNU编译器套装(GCC)的替代品。作者是克里斯·拉特纳,在苹果公司的赞助支持下进行开发,而源代码授权是使用类BSD的伊利诺伊大学厄巴纳-香槟分校开源码许可。

Clang项目包括Clang前端和Clang静态分析器等。[3]

目录

   [隐藏] 
  • 1 概述
  • 2 性能
  • 3 版本历史
  • 4 参考文献
  • 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 10将Clang/LLVM作为默认编译器。

性能[编辑]

测试证明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能够自举[11]
20 February 2010 经过修改后的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].

外部链接[编辑]

  • 官方网站
  • 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
分类:
  • C编译器
  • C++编译器
  • 静态代码分析工具

你可能感兴趣的:(前端,编译器)