clang :C语言等的轻量级编译器

更新时间:2024-09-20 20:37

Clang是一个C、C++Objective-C和Objective-C++编译器前端,由苹果公司主导开发,基于LLVM编译器后端。它的目标是提供一个GNU编译器套装(GCC)的替代品,支持大多数的GCC编译设定和非官方语言扩充功能。Clang的源代码发布于BSD协议下,自LLVM 2.6版本开始,与LLVM一起释出新版本。Clang的主要贡献者包括Apple、微软谷歌、ARM、索尼英特尔AMD等公司。Clang的特性包括支持普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。自Clang 15版本开始,它已经完全支持所有已发布的C++标准,实现了大部分C++20的功能,并对即将到来的C++23标准提供了初步支持。自Clang 6.0.0版本开始,默认情况下,Clang使用GNU++14方言编译C++,该方言包含C++14标准和遵从GNU扩展的功能。

软件介绍

Clang是一个由Apple主导编写,基于LLVM的C/C++/Objective-C编译器。2013年4月,Clang已经全面支持C++11标准,并开始实现C++1y特性(也就是C++14,这是C++的下一个小更新版本)。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。Clang是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。它与GNU C语言规范几乎完全兼容(当然,也有部分不兼容的内容,包括编译命令选项也会有点差异),并在此基础上增加了额外的语法特性,比如C函数重载(通过__attribute__((overloadable))来修饰函数),其目标(之一)就是超越GCC。

发展沿革

Clang与LLVM配合使用,提供了替代GCC堆栈的大部分工具链。Clang的主要目标之一是提供基于库的架构,以便编译器可以与其他与源代码交互的工具(如IDE)进行交互。Clang在编译过程中保留了比GCC更多的信息,并保留了原始代码的整体形式,这使得更容易将错误映射回原始源代码。Clang的错误报告更详细、具体和可机器读取,因此IDE可以索引编译器的输出。编译器的模块化设计可以提供源代码索引、语法检查和其他通常与快速应用程序开发系统相关的功能。Clang只编译类似C的语言,如C、C++Objective-C和Objective-C++。一个Fortran项目Flang正在进行中,以增加对Fortran的支持。

自2005年起,苹果公司开始在多个商业产品中广泛使用LLVM,包括iOS SDK和Xcode 3.1。LLVM最初的用途之一是用于OS X的OpenGL代码编译器,将OpenGL调用转换为不支持某些功能的图形处理单元(GPU)的更基本的调用。这使得苹果能够在使用英特尔GMA芯片组的计算机上支持OpenGL,提高了这些机器的性能。由于GCC的源代码庞大且笨重,以及其GPLv3许可证的限制,苹果选择开发了Clang,一个支持C、Objective-CC++的新编译器前端,并于2007年7月成为开源项目。

Clang历史上的重要步骤和发布包括其对C++17标准的全面支持,以及对C++20和C++23标准的实现和初步支持。自v16.0.0以来,Clang默认使用GNU++17方言进行C++编译,其中包括C++17标准和符合GNU扩展的功能。

功能服务

主要功能

libclang提供了一个C接口,提供了一个相对较小的API,功能包括将源代码解析为AST、加载AST、遍历AST、将源位置与AST中的元素关联起来。

功能特色

终端用户特色:

快速编译和较少内存占用;有诊断功能;兼容GCC

实用工具和应用:

基础架构模块库;可满足多样的客户需求(代码重构,动态分析,代码生成,等);允许集成到各种集成开发环境中;使用LLVM'BSD'协议;

内部设计与实现:

一个不可移植的代码库;一个为c语言Objective-CC++、Objective-C++设计的非通用(Non general-purpose)的语法解析器;与C/C++/Objective-C及它们的衍生语言具有高度一致性。

性能和GCC兼容性

Clang与GCC兼容,其命令行界面共享许多GCC的标志和选项。Clang实现了许多GNU语言扩展和编译器内部函数,保持与GCC生成的目标代码的ABI兼容。Clang的开发人员旨在减少内存占用和提高编译速度,与GCC相比,Clang在编译速度和内存占用方面具有优势。然而,Clang在编译Linux内核时比GCC慢,但在编译LLVM时略快。在程序性能方面,Clang编译的程序性能落后于GCC编译的程序,但两个编译器在性能上的差距已经缩小。

版本历史

参考资料

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}
友情链接: