LLVM 概覽

下面是 LLVM 首頁對 LLVM 介紹的中文翻譯。前端

LLVM 項目是一系列模塊化、可重用和工具鏈技術的集合。沒必要在乎它的名稱,LLVM 和以前的虛擬機基本沒什麼關係了,然而也確實提供了對構建這些虛擬機有幫助的庫。LLVM 不是首字母的縮寫,它就是項目的全稱。c++

LLVM 起源於伊利諾伊大學的一個研究項目,這個項目致力於提供現代化的、基於 SSA編譯策略可以同時支持任意語言靜態和動態編譯。從那時起,LLVM 已經發展爲具備多個子項目的巨型項目,它們中不少被用於各類各樣商業的和開源的產品中,與此同時也普遍用於學術研究。LLVM 項目的代碼遵照「伊利諾伊大學」BSD風格許可。緩存

LLVM 主要的子項目以下:
1. LLVM 核心庫提供了一個源代碼級別和目標平臺無關的優化器開發庫,以及許多流行 CPU(固然也包括一些不常見的) 的代碼生成支持。這些開發庫都是創建在代碼表達有良好定義的,稱爲 LLVM 中間表達(LLVM IR)。LLVM 核心開發庫文檔齊全,使用 LLVM 做爲一個優化器和代碼生成器開發你本身的語言(或移植現有編譯器)是一件特別容易的事情。安全

2. Clang 使用一個「LLVM 原生的」 C/C++/Objective-C 編譯器。它致力於提供使人難以置信快速編譯(例如當以調試配置編譯 Objective-C 代碼時的速度比 GCC 快 3 倍)、高度有用的錯誤和警告信息以及爲構建強大源代碼級工具的平臺。最好的例子就是有不少工具使用 Clang 前端做爲開發庫去解析 C/C++代碼。
3. dragonegg 整合了 LLVM 優化器代、碼生成器以及 GCC 解析器。這樣就可讓 LLVM 編譯 Ada、Fortran 以及一些 GCC 編譯器前端支持的語言,另外能夠支持一些 Clang 不支持的 C 特性。
4. LLDB 構建於 LLVM 和 Clang 提供的開發庫上,它提供了個強大的原生調試器。它使用 Clang 的抽象語語法樹、表達式解析器、LLVM 及時編譯、LLVM 反彙編器等,這樣使得它給人映象就是「就是如此有效」,並且在加載符號時相較於 GCC 快並且內存使用效率更高。
5. libc++ 和 libc++ ABI 提供了一個標準的、高性能 C++ 標準庫的實現,包括對 C++ 11 的徹底支持。
6. compiler-rt 提供了通過精心調校實現的底層代碼生成器,支持諸如「__fixunsdfdi」這樣的過程以及其餘用於目標平臺沒有原生的簡短指令實現核心 IR 操做時調用的生成。它同時也爲動態測試工具提供了運行時的實現,例如AddressSanitizer、ThreadSanitizer、MemorySanitizer 以及 DataFlowSanitizer。
7. OpenMP 爲使用 Clang 中實現的 OpenMP 提供一個 OpenMP 的運行環境。
8. vmkit 是構建於 LLVM 技術之上的 Java 和 .NET 虛擬機的實現。
9. polly 實現了一組局部性緩存優化套件,以及自動並行和多面體模型的矢量化。
10. libclc 致力於實現 OpenCL 的標準庫。
11. klee 實現了一個「符號虛擬機」,它基於的原理是,嘗試經過查找缺陷和證實函數屬性對全部動態路徑進行求值。klee 一個主要的特性就是當一個缺陷被探測到時能生成一個測試用例。
12. SAFECode 是一個內存安全的 C/C++ 編譯程序。它的指令代碼附帶了探測內存安全錯誤的運行時檢查(例如,緩衝區溢出),它能夠用於軟件免受安全攻擊,也能夠被用做像 Valgrind 同樣的內存安全錯誤的調試工具。
13. lld 致力於爲 clang/llvm 提供一個內建的連接器。目前 clang 多半是調用系統的連接器來生成可執行文件。模塊化

除了 LLVM 官方子項目,還有大量各類各樣使用 LLVM 完成其餘各類任務的其餘項目。經過這些項目,你可使用 LLVM 編譯 Ruby、Python、Haskell、Java、D、PHP、Pure、Lua 以及其餘多種語言。LLVM 主要優點就是多功能性、靈活以及可重用性。這就是爲何它被用於如此普遍而多樣的任務中:全部工做均使用輕量級的及時編譯完成的嵌入式語言,就像 Lua 爲大規模超級計算機編譯 Fortran 代碼。函數

像全部其餘的開源的項目同樣,LLVM有一個由大量而友好的、對構建強大的底層工具感興趣的人組成的社區。若是你有興趣加入,略讀 LLVM 博客和訂閱 LLVM 開發者郵件列表是一個不錯的開始。關於如何發送補丁、獲取提交權限以及版權和許可的事項,請參考 LLVM 開發者準則。工具

【譯註】看完這篇文章,應該會對 LLVM 這個項目有一個比較全面的瞭解。性能

相關文章
相關標籤/搜索