必威电竞|足球世界杯竞猜平台

clang
來源:互聯網

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-C、C++、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編譯的程序,但兩個編譯器在性能上的差距已經縮小。

版本歷史

參考資料 >

生活家百科家居網