쨍그랑
Clang쨍그랑 13.0.1 | |
| 원저작자 | 크리스 래트너 |
|---|---|
| 개발자 | LLVM 개발자 그룹 |
| 초기 릴리즈 | 2007년 9월 26일, 전([1] |
| 안정된 릴리스 | 2022년[2] 6월 25일 14.0.6 |
| 저장소 | |
| 기입처 | C++ |
| 운영 체제 | Unix와 같은 |
| 플랫폼 | AArch64, ARMv7, IA-32, x86-64, ppc64le[3] |
| 유형 | 컴파일러 프런트 엔드 |
| 면허증. | Apache License[4][5] 2.0(LLVM 예외 |
| 웹 사이트 | clang |
Clang은 C, C++, Objective-C 및 Objective-C++ 프로그래밍 언어 및 OpenMP,[6] RenderScript, CUDA 및[7] HIP 프레임워크용 컴파일러 프런트 엔드입니다.GNU 컴파일러 컬렉션(GCC)의 드롭인 대체로서 기능해, 대부분의 컴파일 플래그와 비공식 언어 [8][9]확장을 서포트합니다.정적 분석기 및 몇 가지 코드 분석 [10]도구가 포함되어 있습니다.
Clang은 LLVM 컴파일러 백엔드와 연동하여 동작하며 LLVM 2.6 이후의 [11]서브프로젝트입니다.LLVM과 마찬가지로 Apache License 2.0 소프트웨어 [4][5]라이센스에 따라 무료 오픈 소스 소프트웨어입니다.애플, 마이크로소프트, 구글, ARM, 소니, 인텔, AMD가 그 공신이다.
2022년 3월 현재 Clang의 최신 메이저 버전인 Clang 14는 C++17까지 모든 공개 C++ 표준을 지원하며, C++20의 대부분의 기능을 구현하고 있으며, 향후 C++23 [12]표준을 초기 지원합니다.v6.0.0 이후 Clang은 디폴트로 GNU++14 사투리를 사용하여 C++를 컴파일합니다.C++14 표준과 준거한 GNU [13]확장기능이 포함되어 있습니다.
배경
2005년부터, Apple Inc.는 iOS SDK와 Xcode 3.1을 포함한 [14]여러 상용 제품에 LLVM을 광범위하게 사용하기 시작했습니다.LLVM의 첫 번째 용도 중 하나는 OS X용 OpenGL 코드 컴파일러로 OpenGL 호출을 특정 기능을 지원하지 않는 그래픽 처리 장치(GPU)의 보다 기본적인 호출로 변환했습니다.이를 통해 애플은 인텔 GMA 칩셋을 사용하는 컴퓨터에서 OpenGL을 지원할 수 있게 되었고, 이 [15]기계들의 성능이 향상되었습니다.
LLVM 프로젝트는 원래 GCC의 프런트 엔드를 사용하는 것을 목적으로 하고 있습니다.그러나 GCC 소스 코드는 크고 다소 번거롭습니다. 오랜 기간 GCC 개발자가 LLVM을 언급하면서 "하마를 춤추게 하는 것은 그다지 즐거운 일이 아닙니다."[16]라고 말했습니다.게다가 애플 소프트웨어는 GCC 개발자들에게 낮은 우선 순위인 Objective-C를 사용한다.그만큼 GCC는 애플의 통합개발환경([17]IDE)에 원활하게 통합되지 않는다.마지막으로, GCC의 라이센스 계약인 GNU General Public License(GPL) 버전 3에서는 GCC의 확장 또는 수정 버전을 배포하는 개발자가 소스 코드를 사용할 수 있도록 요구하지만, LLVM의 허용 소프트웨어 라이센스에는 이러한 [4][5]장애가 없습니다.
결국 애플은 C, Objective-C, C++[17]를 지원하는 새로운 컴파일러 프런트 엔드인 Clang을 개발하기로 결정했다.2007년 7월, 이 프로젝트는 오픈 [18]소스화 승인을 받았습니다.
설계.
Clang은 LLVM과 [19]연계하여 동작합니다.Clang과 LLVM의 조합에 의해 GCC 스택을 교환하기 위한 툴 체인의 대부분이 제공됩니다.Clang의 주요 목표 중 하나는 컴파일러가 통합 개발 환경(IDE) 등 소스 코드와 상호 작용하는 다른 도구와 상호 운용할 수 있도록 라이브러리 기반 [20]아키텍처를 제공하는 것입니다.반면 GCC는 컴파일 링크 디버깅워크플로우에서 동작합니다.다른 툴과의 통합이 항상 쉬운 것은 아닙니다.예를 들어, GCC는 전체 컴파일 프로세스의 핵심인 폴드라고 불리는 단계를 사용합니다.이것은 코드 트리를 원래의 소스 코드와 다른 형태로 변환하는 부작용이 있습니다.폴드 단계 중 또는 후에 오류가 발견되면 원래 소스의 한 위치로 변환하기가 어려울 수 있습니다.또한 IDE 내에서 GCC 스택을 사용하는 벤더는 별도의 도구를 사용하여 코드를 인덱싱하고 구문 강조 표시 및 인텔리전트 코드 완성 등의 기능을 제공해야 합니다.
Clang은 컴파일 프로세스 중에 GCC보다 더 많은 정보를 유지하고 원래 코드의 전체 형식을 유지하므로 오류를 원래 소스에 쉽게 매핑할 수 있습니다.Clang의 에러 리포트는 보다 상세하고 상세하며 머신 판독이 가능하기 때문에 IDE는 컴파일러의 출력을 인덱스할 수 있습니다.컴파일러의 모듈러 디자인은 소스 코드 인덱싱, 구문 검사 및 일반적으로 신속한 애플리케이션 개발 시스템과 관련된 기타 기능을 제공합니다.해석 트리는 원래 소스 코드를 직접 나타내기 때문에 자동화된 코드 리팩터링을 지원하는 데 더 적합합니다.
Clang은 C, C++, Objective-C 및 Objective-C++와 같은 C와 유사한 언어만 컴파일합니다.대부분의 경우 Clang은 GCC를 필요에 따라 대체할 수 있으며 툴 체인 [citation needed]전체에 다른 영향은 없습니다.일반적으로 사용되는 대부분의 GCC 옵션을 지원합니다.Nvidia와 The Portland Group의 Flang 프로젝트는 Fortran [21]지원을 추가합니다.그러나 Ada와 같은 다른 언어의 경우 LLVM은 GCC 또는 다른 컴파일러 프런트 엔드에 의존합니다.
퍼포먼스와 GCC 호환성
Clang은 GCC와 [9]호환성이 있습니다.명령줄 인터페이스는 GCC의 많은 플래그와 옵션을 공유합니다.Clang은 많은 GNU 언어 확장과 컴파일러 내장 기능을 구현하며, 그 중 일부는 순전히 호환성을 위한 것입니다.예를 들어, Clang은 C11 원자학과 정확히 일치하는 원자 내함성을 구현하지만, 또한 GCC를 구현합니다.__sync_*GCC 및 libstdc++와의 호환성을 위한 내장 기능.Clang은 또한 GCC에서 생성된 객체 코드와의 ABI 호환성을 유지합니다.실제로 Clang은 GCC를 [22]대신하는 드롭인입니다.
Clang의 개발자는 GCC와 같은 경쟁 컴파일러에 비해 메모리 설치 공간을 줄이고 컴파일 속도를 높이는 것을 목표로 하고 있습니다.2007년 10월에는 Clang이 GCC의 약 6분의 1의 메모리와 디스크 공간을 [23]사용하면서 GCC보다 2배 이상 빠른 속도로 Carbon 라이브러리를 컴파일했다고 보고했습니다.2011년까지 Clang은 컴파일러 [24][25]성능에서 이 우위를 유지할 것으로 보입니다.2014년 중반 현재 Clang은 컴파일 시간과 프로그램의 퍼포먼스가 혼재된 [26]벤치마크에서 여전히 GCC보다 빠르게 컴파일하고 있습니다.그러나 2019년까지 Clang은 Linux 커널 컴파일은 GCC보다 상당히 느리지만 [27]LLVM 컴파일은 약간 더 빠릅니다.
Clang은 역사적으로 컴파일 속도가 GCC보다 빨랐지만 출력 품질은 뒤처졌습니다.2014년 현재 Clang 컴파일 프로그램의 퍼포먼스는 GCC 컴파일 프로그램의 퍼포먼스에 뒤떨어져 있습니다.때로는 큰 요인(최대 5.5배)[26]으로 인해 퍼포먼스가 [24]저하되고 있습니다.이후 두 컴파일러 모두 성능 향상을 위해 진화했으며, 그 차이는 줄어들었습니다.
- 2016년 11월 테스트 파일의 대규모 하니스에서 GCC 4.8.2와 Clang 3.4를 비교한 결과, GCC가 잘 최적화된 소스 코드에서 Clang을 약 17% 능가하는 것으로 나타났습니다.테스트 결과는 코드에 따라 다르며 최적화되지 않은 C 소스 코드는 이러한 차이를 반전시킬 수 있습니다.따라서 두 컴파일러는 대체로 [28][unreliable source][unreliable source]비슷해 보인다.
- 2019년 인텔 Ice Lake를 비교한 결과 Clang 10이 생성한 프로그램은 41개의 다른 벤치마크에서 GCC 10의 퍼포먼스의 96%를 달성한 것으로 나타났습니다(이 [27]중 22개를 이기고 19개를 잃었습니다).
인터페이스
libclang는 비교적 작은 API를 제공하는 C 인터페이스를 제공합니다.노출된 기능에는 AST로의 소스 코드 해석, AST 로드, AST 통과, 소스 위치 및 AST 내의 요소 관련성이 포함됩니다.
상태 이력
이 표에는 Clang 이력에서 중요한 절차와 릴리스만 나와 있습니다.
| 날짜. | 하이라이트 |
|---|---|
| 2007년 7월 11일 | Clang 프런트 엔드는 오픈 소스 라이선스로 출시되었습니다. |
| 2009년 2월 25일 | Clang/LLVM은 동작하는 FreeB를 컴파일할 수 있습니다.SD [29][30]커널 |
| 2009년 3월 16일 | Clang/LLVM은 동작하는 DragonFly BSD [31][32]커널을 컴파일할 수 있습니다. |
| 2009년 10월 23일 | Clang 1.0은 LLVM 2.6과 함께 처음으로 출시되었습니다. |
| 2009년 12월 | C 및 Objective-C의 코드 생성은 생산 품질에 도달합니다.C++ 및 Objective-C++ 지원이 아직 완료되지 않았습니다.Clang C++는 GCC 4.2 libstdc++를 해석하여 중요하지 않은 프로그램의 [19]작업 코드를 생성할 수 있으며 컴파일도 [33]가능합니다. |
| 2010년 2월 2일 | 쨍그랑 [34]셀프호스팅 |
| 2010년 5월 20일 | Clang 최신 버전은 Boost C++ 라이브러리를 정상적으로 구축하여 거의 모든 테스트를 [35]통과했습니다. |
| 2010년 6월 10일 | Clang/LLVM은 FreeBSD의 일부가 되지만 기본 컴파일러는 여전히 GCC입니다.[36] |
| 2010년 10월 25일 | Clang/LLVM은 작동 중인 수정된 Linux [37]커널을 컴파일할 수 있습니다. |
| 2011년 1월 | 초안 C++0x 표준을 지원하기 위한 예비 작업이 완료되었으며, 초안의 새로운 기능 중 일부는 Clang 개발 [38][12]버전에서 지원됩니다. |
| 2011년 2월 10일 | Clang은 작동하는 HotSpot Java 가상 [24]머신을 컴파일할 수 있습니다. |
| 2012년 1월 19일 | Clang은 NetBSD 크로스 플랫폼 빌드 시스템에서 옵션 컴포넌트가 되지만 GCC는 여전히 [39]기본입니다. |
| 2012년 2월 29일 | Clang 3.0은 Debian [40]아카이브의 91.2%를 재구축할 수 있습니다. |
| 2012년 2월 29일 | Clang이 MINIX[41] 3의 디폴트 컴파일러가 되다 |
| 2012년 5월 12일 | Clang/LLVM은 FreeBSD에서 [42]GCC를 대체하는 것을 발표했습니다. |
| 2012년 11월 5일 | Clang이 FreeB 디폴트 컴파일러가 되다amd64/[43]i386의 SD 10.x. |
| 2013년 2월 18일 | Clang/LLVM은 Nexus [44][45]7용 Android Linux 커널을 컴파일할 수 있습니다. |
| 2013년 4월 19일 | Clang은 C++11 기능이 완료되었습니다.[46] |
| 2013년 11월 6일 | Clang은 C++14 기능이 완료되었습니다.[47] |
| 2014년 9월 11일 | Clang 3.5는 Debian 아카이브의 94.3%를 재구축할 수 있습니다.GCC 플래그와의 [48]호환성이 향상되었기 때문에 2013년 1월 이후 장애 비율은 릴리스별로 1.2% 감소했습니다. |
| 2016년 10월 | Clang은 Android의[49] 디폴트 컴파일러가 되었습니다(나중에 Android NDK에서[50] 지원되는 컴파일러만 해당). |
| 2017년 3월 13일 | Clang 4.0.0 출시 |
| 2017년 7월 26일 | Clang은 amd64/i386의 [51]OpenBSD 6.2 디폴트 컴파일러가 됩니다. |
| 2017년 9월 7일 | Clang 5.0.0 출시 |
| 2018년 1월 19일 | Clang은 OpenBSD 6.3의 기본 컴파일러가 됩니다.[52] |
| 2018년 3월 5일 | Clang은 [53]현재 Windows용 Google Chrome을 구축하는 데 사용됩니다. |
| 2018년 3월 8일 | Clang 6.0.0 출시 |
| 2018년 9월 5일 | 현재 Clang은 [54]Windows용 Firefox 구축에 사용되고 있습니다. |
| 2018년 9월 19일 | Clang 7.0.0 출시 |
| 2019년 3월 20일 | Clang 8.0.0 출시 |
| 2019년 7월 1일 | Clang은 mips64의 [55]OpenBSD 6.6에서 기본 컴파일러가 됩니다. |
| 2019년 9월 19일 | Clang 9.0.0은 공식 RISC-V 타깃 지원으로 [56]출시되었습니다. |
| 2020년 2월 29일 | Clang은 GCC를 [57]삭제함으로써 FreeBSD 기반 시스템에서 유일한 C 컴파일러가 됩니다. |
| 2020년 3월 24일 | Clang 10.0.0 출시 |
| 2020년 4월 2일 | Clang은 PowerPC의 OpenBSD [58]6.7 디폴트 컴파일러가 됩니다. |
| 2020년 10월 12일 | Clang 11.0.0 출시 |
| 2020년 12월 21일 | Clang은 mips64el의 [59]OpenBSD 6.9에서 기본 컴파일러가 됩니다. |
| 2021년 4월 14일 | Clang 12.0.0 출시 |
| 2021년 10월 4일 | Clang 13.0.0 출시 |
| 2022년 3월 25일 | Clang 14.0.0 출시 |
「 」를 참조해 주세요.
레퍼런스
- ^ "LLVM 2.1 Release Notes". llvm.org. LLVM Developer Group. September 27, 2007.
- ^ "LLVM 14.0.6". Retrieved July 3, 2022.
- ^ "Releases". llvm / llvm-project repo. LLVM Developer Group. August 27, 2021 – via GitHub.com.
- ^ a b c "LICENSE.TXT", llvm.org, LLVM Developer Group, retrieved September 24, 2019
- ^ a b c "LLVM Developer Policy", llvm.org, LLVM Developer Group, § Copyright, License, and Patents
- ^ "OpenMP Support". LLVM Project Blog. May 22, 2015. Retrieved March 28, 2016.
- ^ "C++ Heterogeneous-Compute Interface for Portability". GitHub. Retrieved February 18, 2020.
- ^ "Clang Language Extensions". Retrieved November 8, 2017.
In addition to the language extensions listed here, Clang aims to support a broad range of GCC extensions.
- ^ a b Clang - Features and Goals: GCC Compatibility, April 15, 2013
- ^ "Clang Static Analyzer". LLVM. Retrieved September 3, 2009.
- ^ "Getting Involved with the Clang Project", clang.llvm.org, LLVM Developer Group, retrieved September 18, 2012,
Clang is a subproject of the LLVM Project, but has its own mailing lists because the communities have people with different interests.
- ^ a b "C++ and C++'0x Support in Clang". LLVM.
- ^ "Clang 6.0.0 Release Notes". LLVM.
- ^ Treat, Adam (February 19, 2005). "mkspecs and patches for LLVM compile of Qt4". Qt4-preview-feedback (Mailing list). Archived from the original on October 4, 2011.
- ^ Lattner, Chris (May 25, 2007). LLVM for OpenGL and other stuff (Slides). LLVM Developers' Meeting.
- ^ Zadeck, Kenneth (November 19, 2005). "Re: LLVM/GCC Integration Proposal". GCC development (Mailing list).
- ^ a b Naroff, Steve (May 25, 2007). New LLVM C Front-end (Slides). LLVM Developers' Meeting.
- ^ Lattner, Chris (July 11, 2007). "New LLVM C front-end: "clang"". cfe-dev (Mailing list).
- ^ a b Clang 팀, clang: LLVM용 C 언어 패밀리 프런트 엔드
- ^ Clang: 유틸리티 및 애플리케이션: 라이브러리 기반 아키텍처
- ^ FLANG: NVIDIA가 Fortran을 LLVM에 도입
- ^ Clang can often be used as a drop-in replacement for GCC, May 2020
- ^ Clang - Features and Goals: Fast compiles and Low Memory Use, October 2007
- ^ a b c Simonis, Volker (February 10, 2011). "Compiling the HotSpot VM with Clang". Archived from the original on February 18, 2011. Retrieved February 13, 2011.
While the overall GCC compatibility is excellent and the compile times are impressive, the performance of the generated code is still lacking behind a recent GCC version.
- ^ "Benchmarking LLVM & Clang Against GCC 4.5". Phoronix. April 21, 2010. Retrieved February 13, 2011.
Binaries from LLVM-GCC and Clang both struggled to compete with GCC 4.5.0 in the timed HMMer benchmark of a Pfam database search. LLVM-GCC and Clang were about 23% slower(...)Though LLVM / Clang isn't the performance champion at this point, both components continue to be under very active development and there will hopefully be more news to report in the coming months
- ^ a b "GCC 4.9 VS. LLVM Clang 3.5 Linux Compiler Benchmarks". OpenBenchmarking.org. April 14, 2014. Retrieved June 25, 2014.
- ^ a b Michael Larabel (December 23, 2019). "LLVM Clang Achieves ~96% The Performance Of GCC On Intel Ice Lake".
- ^ "Clang vs GCC - which produces better binaries?". stackoverflow.com. Retrieved October 1, 2018.
- ^ Divacky, Roman. "[Announce] clang/llvm can compile booting FreeBSD kernel on i386/amd64".
- ^ Building FreeBSD with Clang, Wiki.freebsd.org, August 24, 2012, retrieved September 18, 2012
- ^ Hornung, Alex. "llvm/clang once more".
- ^ Clang, DragonFly BSD, retrieved September 18, 2012
- ^ "Clang can compile LLVM and Clang". LLVM Project Blog. December 24, 2009.
- ^ "Clang Successfully Self-Hosts". LLVM Project Blog. February 4, 2010.
- ^ Gregor, Doug (May 20, 2010). "Clang++ Builds Boost!". LLVM Project Blog.
- ^ Davis, Brad. "FreeBSD Status Reports April–June , 2010".
- ^ Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts), Lists.cs.uiuc.edu, archived from the original on September 7, 2015, retrieved September 18, 2012
- ^ Gregor, Douglas (January 26, 2011). "New C++0x feature support in Clang" (Mailing list). Archived from the original on January 30, 2011. Retrieved January 29, 2011.
- ^ Sonnenberger, Jörg (January 19, 2012). "Status of NetBSD and LLVM". Archived from the original on September 21, 2016. Retrieved February 26, 2014.
- ^ Ledru, Sylvestre. "Rebuild of the Debian archive with clang".
- ^ "Official Minix 3 website: News".
- ^ Gerzo, Daniel (May 12, 2012). "FreeBSD Quarterly Status Report January–March , 2012" (Mailing list). Retrieved May 14, 2012.
- ^ Davis, Brooks (November 5, 2012). "Heads Up: Clang now the default on x86" (Mailing list). Retrieved November 7, 2012.
- ^ Webster, Behan (February 18, 2013). "LLVMLinux: Compiling Android with LLVM" (PDF). Archived from the original (PDF) on May 12, 2014. Retrieved May 11, 2013.
- ^ Tinti, Vinicius (March 17, 2013). "LLVMLinux: Nexus 7". Archived from the original on June 11, 2014. Retrieved May 11, 2013.
- ^ Du Toit, Stefanus. "Clang is C++11 feature complete as of *just now*!".
- ^ "[llvm-project] Revision 194194". Archived from the original on November 18, 2018. Retrieved April 30, 2018.
- ^ Ledru, Sylvestre. "Rebuild of Debian using Clang 3.5.0".
- ^ "NDK Revision History Android Developers". developer.android.com. Retrieved March 6, 2018.
- ^ "NDK Revision History Android NDK Android Developers". Android Developers. Retrieved April 30, 2018.
- ^ Nagy, Robert (July 26, 2017). "switch the default compiler on amd64 and i386 to clang" (Mailing list). Retrieved September 30, 2017.
- ^ Kettenis, Mark (January 19, 2018). "Switch the default compiler on armv7 to clang" (Mailing list). Retrieved August 27, 2020.
- ^ "Clang is now used to build Chrome for Windows". blog.llvm.org. March 5, 2018. Retrieved April 7, 2018.
- ^ "Firefox Beta 63.0beta, See All New Features, Updates and Fixes". www.mozilla.org. Retrieved March 18, 2020.
- ^ Hankala, Visa (July 1, 2019). "Switch the default compiler on octeon to clang" (Mailing list). Retrieved August 27, 2020.
- ^ "LLVM 9 Releases With Official RISC-V Target Support, Asm Goto, Clang 9, And More". riscv.org. September 26, 2019. Retrieved September 26, 2019.
- ^ "FreeBSD svn commit r358454".
- ^ Kettenis, Mark (April 2, 2020). "Switch the default compiler on powerpc to clang" (Mailing list). Retrieved August 27, 2020.
- ^ Hankala, Visa (December 21, 2020). "Make clang the default compiler on loongson" (Mailing list). Retrieved January 1, 2021.