天天看點

LLVM編譯器前端 Clang 簡介

昨天晚上安裝rails的開發環境,被ruby的編譯搞的有點崩潰。下載下傳的ruby的源碼不能用系統自帶的gcc -4.21編譯,也不能用系統自帶的clang進行編譯,必須下載下傳并使用gcc -4.2進行編譯才能通過。今天稍微看看編譯器的一些背景。

LLVM編譯器前端 Clang 簡介

什麼是LLVM

LLVM是構架編譯器(compiler)的架構系統,以C++編寫而成,用于優化以任意程式語言編寫的程式的編譯時間(compile-time)、連結時間(link-time)、運作時間(run-time)以及空閑時間(idle-time),對開發者保持開放,并相容已有腳本。LLVM計劃啟動于2000年,最初由University of Illinois at Urbana-Champaign的Chris Lattner主持開展。2006年Chris Lattner加盟Apple Inc.并緻力于LLVM在Apple開發體系中的應用。Apple也是LLVM計劃的主要資助者。

什麼是Clang

Clang ( 發音為 /klæŋ/) 是 LLVM 的一個編譯器前端,它目前支援 C, C++, Objective-C 以及 Objective-C++ 等程式設計語言。Clang 對源程式進行詞法分析和語義分析,并将分析結果轉換為 Abstract Syntax Tree ( 抽象文法樹 ) ,最後使用 LLVM 作為後端代碼的生成器。

Clang 的開發目标是提供一個可以替代 GCC 的前端編譯器。與 GCC 相比,Clang 是一個重新設計的編譯器前端,具有一系列優點,例如子產品化,代碼簡單易懂,占用記憶體小以及容易擴充和重用等。由于 Clang 在設計上的優異性,使得 Clang 非常适合用于設計源代碼級别的分析和轉化工具。Clang 也已經被應用到一些重要的開發領域,如 Static Analysis 是一個基于 Clang 的靜态代碼分析工具。

Clang 的開發背景

由于 GNU 編譯器套裝 (GCC) 系統龐大,而且 Apple 大量使用的 Objective-C 在 GCC 中優先級較低,同時 GCC 作為一個純粹的編譯系統,與 IDE 配合并不優秀,Apple 決定從零開始寫 C family 的前端,也就是基于 LLVM 的 Clang 了。Clang 由 Apple 公司開發,源代碼授權使用 BSD 的開源授權。

Clang 的特性

相比于 GCC,Clang 具有如下優點:

  1. 編譯速度快:在某些平台上,Clang 的編譯速度顯著的快過 GCC。
  2. 占用記憶體小:Clang 生成的 AST 所占用的記憶體是 GCC 的五分之一左右。
  3. 子產品化設計:Clang 采用基于庫的子產品化設計,易于 IDE 內建及其他用途的重用。
  4. 診斷資訊可讀性強:在編譯過程中,Clang 建立并保留了大量詳細的中繼資料 (metadata),有利于調試和錯誤報告。

Clang 需要加強的地方

  1. 支援更多語言:GCC 除了支援 C/C++/Objective-C, 還支援 Fortran/Pascal/Java/Ada/Go 和其他語言。Clang 目前支援的語言有 C/C++/Objective-C/Objective-C++。
  2. 加強對 C++ 的支援:Clang 對 C++ 的支援依然落後于 GCC,Clang 還需要加強對 C++ 提供全方位支援。
  3. 支援更多平台:GCC 流行的時間比較長,已經被廣泛使用,對各種平台的支援也很完備。Clang 目前支援的平台有 Linux/Windows/Mac OS。

繼續閱讀