Clang () is a compiler front end for the programming languages C, C++, Objective-C, Objective-C++, and the software frameworks OpenMP, OpenCL, RenderScript, CUDA, SYCL, and HIP. It acts as a drop-in replacement for the GNU Compiler Collection (GCC), supporting most of its compiling flags and unofficial language extensions. It includes a static analyzer, and several code analysis tools.
Clang operates in tandem with the LLVM compiler back end and has been a subproject of LLVM 2.6 and later. As with LLVM, it is free and open-source software under the Apache 2.0 software license. Its contributors include Apple, IBM, Microsoft, Google, ARM Holdings, Sony, Intel, and AMD.
Clang 17 has full support for all published C++ standards up to C++17, implements most features of C++20, and has initial support for the C++23 standard. Since v16.0.0, Clang compiles C++ using the GNU++17 dialect by default, which includes features from the C++17 standard and conforming GNU extensions.
The LLVM project originally intended to use GCC's front end. The GCC source code, however, is large and somewhat cumbersome; as one long-time GCC developer put it referring to LLVM, "Trying to make the hippo dance is not really a lot of fun". Besides, Apple software uses Objective-C, which is a low priority for GCC developers. As such, GCC does not integrate smoothly into Apple's integrated development environment. Finally, GCC's license agreement, the GNU General Public License (GPL) version 3, requires developers who distribute extensions or modified versions of GCC to make their source code available, but LLVM's permissive software license doesn't require this.
For these reasons, Apple developed Clang, a new compiler front end which supports C, Objective-C and C++. In July 2007, the project received the approval for becoming open-source.
Clang retains more information during the compiling process than GCC, and preserves the overall form of the original code, making it easier to map errors back into the original source. Clang's error reports are more detailed, specific, and machine-readable, so IDEs can index the compiler's output. Modular design of the compiler can offer source code indexing, syntax checking, and other features normally associated with rapid application development systems. The parse tree is also more suitable for supporting automated code refactoring, as it directly represents the original source code.
Clang compiles only C-like languages, such as C, C++, Objective-C, and Objective-C++. In many cases, Clang can replace GCC as needed, with no other effects on the toolchain as a whole. It supports most of the commonly used GCC options. A Fortran project, Flang was in-progress in 2022. However, for other languages, such as Ada, LLVM remains dependent on GCC or another compiler front end.
Clang's developers aim to reduce memory footprint and increase compiling speed compared to other compilers, such as GCC. In October 2007, they report that Clang compiled the Carbon libraries more than twice as fast as GCC, while using about one-sixth GCC's memory and disk space. By 2011, Clang seemed to retain this advantage in compiler performance. As of mid-2014, Clang still consistently compiles faster than GCC in a mixed compile time and program performance benchmark. However, by 2019, Clang is significantly slower at compiling the Linux Kernel than GCC while remaining slightly faster at compiling LLVM.
While Clang has historically been faster than GCC at compiling, the output quality has lagged behind. As of 2014, performance of Clang-compiled programs lagged behind performance of the GCC-compiled program, sometimes by large factors (up to 5.5x), replicating earlier reports of slower performance. Both compilers have evolved to increase their performance since then, with the gap narrowing:
Interface
Status history
Clang front-end released under open-source licence Clang/LLVM can compile a working FreeBSD kernel. Clang/LLVM can compile a working DragonFly BSD kernel. Clang 1.0 released, with LLVM 2.6 for the first time. Code generation for C and Objective-C reach production quality. Support for C++ and Objective-C++ still incomplete. Clang C++ can parse GCC 4.2 libstdc++ and generate working code for non-trivial programs, and can compile itself. Clang self-hosting. Clang latest version built the Boost C++ libraries successfully, and passed nearly all tests. Clang/LLVM becomes integral part of FreeBSD, but default compiler is still GCC. Clang/LLVM can compile a working modified Linux kernel. Preliminary work completed to support the draft C++0x standard, with a few of the draft's new features supported in Clang development version. Clang can compile a working HotSpot Java virtual machine. Clang becomes an optional component in NetBSD cross-platform build system, but GCC is still default. Clang 3.0 can rebuild 91.2% of the Debian archive. Clang becomes default compiler in MINIX 3 Clang/LLVM announced to replace GCC in FreeBSD. Clang becomes default compiler in FreeBSD 10.x on amd64/i386. Clang/LLVM can compile a working modified Android Linux Kernel for Nexus 7. Clang is C++11 feature complete. Clang is C++14 feature complete. Clang 3.5 can rebuild 94.3% of the Debian archive. The percentage of failures has dropped by 1.2% per release since January 2013, mainly due to increased compatibility with GCC flags. 27 Feb 2015 Clang 3.6.0 released. The default C version becomes -std=gnu11. October 2016 Clang becomes default compiler for Android (and later only compiler supported by Android NDK). 13 March 2017 Clang 4.0.0 released Clang becomes default compiler in OpenBSD 6.2 on amd64/i386. 7 September 2017 Clang 5.0.0 released Clang becomes default compiler in OpenBSD 6.3 on arm. 5 March 2018 Clang is now used to build Google Chrome for Windows. 8 March 2018 Clang 6.0.0 released. The default C++ version becomes -std=gnu++14. 5 September 2018 Clang is now used to build Firefox for Windows. 19 September 2018 Clang 7.0.0 released 20 March 2019 Clang 8.0.0 released Clang becomes default compiler in OpenBSD 6.6 on mips64. 19 September 2019 Clang 9.0.0 released with official RISC-V target support. 29 February 2020 Clang becomes the only C compiler in the FreeBSD base system, with the removal of GCC. 24 March 2020 Clang 10.0.0 released Clang becomes default compiler in OpenBSD 6.7 on powerpc. 12 October 2020 Clang 11.0.0 released. The default C version becomes -std=gnu17. Clang becomes default compiler in OpenBSD 6.9 on mips64el. 14 April 2021 Clang 12.0.0 released 4 October 2021 Clang 13.0.0 released 25 March 2022 Clang 14.0.0 released 6 September 2022 Clang 15.0.0 released 17 March 2023 Clang 16.0.0 released. The default C++ version becomes -std=gnu++17. 9 September 2023 Clang 17.0.1 released 8 March 2024 Clang 18.1.1 released 17 September 2024 Clang 19.1.0 released 4 March 2025 Clang 20.1.0 released 26 August 2025 Clang 21.1.0 released
See also
External links
|
|