LLVM 是 Low Level Virtual Machine
的簡稱,這個庫提供了與編譯器相關(guān)的支持,能夠進行程序語言的編譯期優(yōu)化、鏈接優(yōu)化、在線編譯優(yōu)化、代碼生成。簡而言之,可以作為多種語言編譯器的后臺來使用。如果這樣還比較抽象的話,介紹下 Clang 就知道了:Clang 是一個 C++ 編寫、基于 LLVM、發(fā)布于 LLVM BSD 許可證下的
C/C++/Objective C/Objective C++ 編譯器,其目標(biāo)(之一)就是超越 GCC。 ?Clang 開發(fā)事出有因,Wiki 介紹如下:
Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端顯卡) 上生成代碼 (JIT),令程序仍然能夠正常運行。之后 LLVM 與 GCC 的集成過程引發(fā)了一些不快,GCC 系統(tǒng)龐大而笨重,而 Apple 大量使用的 Objective-C 在 GCC 中優(yōu)先級很低。此外 GCC 作為一個純粹的編譯系統(tǒng),與 IDE 配合很差。加之許可證方面的要求,Apple 無法使用修改版的 GCC 而閉源。于是 Apple 決定從零開始寫 C family 的前端,也就是基于 LLVM 的 Clang 了。
Clang 的特性:
- 快:通過編譯 OS X 上幾乎包含了所有 C 頭文件的 carbon.h 的測試,包括預(yù)處理 (Preprocess),語法 (lex),解析 (parse),語義分析 (Semantic Analysis),抽象語法樹生成 (Abstract Syntax Tree) 的時間,Clang 是 Apple GCC 4.0 的 2.5x 快。(2007-7-25)
- 內(nèi)存占用小:Clang 內(nèi)存占用是源碼的 130%,Apple GCC 則超過 10x。
- 診斷信息可讀性強:我不會排版,推薦去 網(wǎng)站 觀看。其中錯誤的語法不但有源碼提示,還會在錯誤的調(diào)用和相關(guān)上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示很天書。
- GCC 兼容性。
- 設(shè)計清晰簡單,容易理解,易于擴展增強。與代碼基礎(chǔ)古老的 GCC 相比,學(xué)習(xí)曲線平緩。
- 基于庫的模塊化設(shè)計,易于 IDE 集成及其他用途的重用。由于歷史原因,GCC 是一個單一的可執(zhí)行程序編譯器,其內(nèi)部完成了從預(yù)處理到最后代碼生成的全部過程,中間諸多信息都無法被其他程序重用。Clang 將編譯過程分成彼此分離的幾個階段,AST 信息可序列化。通過庫的支持,程序能夠獲取到 AST 級別的信息,將大大增強對于代碼的操控能力。對于 IDE 而言,代碼補全、重構(gòu)是重要的功能,然而如果沒有底層的支持,只使用 tags 分析或是正則表達(dá)式匹配是很難達(dá)成的。
當(dāng)然,GCC 也有其優(yōu)勢:
- 支持 JAVA/ADA/FORTRAN
- 當(dāng)前的 Clang 的 C++ 支持落后于 GCC,參見
http://clang.llvm.org/cxx_status.html 。(近日 Clang 已經(jīng)可以自編譯,見
http://www.phoronix.com/scan.php?page=news_item&px=Nzk2Mw )- GCC 支持更多平臺
- GCC 更流行,廣泛使用,支持完備
- GCC 基于 C,不需要 C++ 編譯器即可編譯
相信介紹到這里大家能夠?qū)?Clang 和 LLVM 有所了解了。除去 Clang 之外,LLVM
還被用在 Gallium3D 中進行 JIT 優(yōu)化,Xorg 中的 pixman 也有考慮使用 LLVM
來優(yōu)化執(zhí)行速度, llvm-lua 使用 LLVM 來編譯
Lua 代碼, gpuocelot 使用 LLVM 可以令 CUDA 程序無需重新編譯即可運行在多核 X86CPU、IBM Cell、支持 OpenCL 的設(shè)備之上...
我個人感覺 Apple 在開源界口碑較差(也許是我的錯覺?),不過 Apple 也為開源界貢獻(xiàn)了不少,Webkit,OpenCL(雖說只是個標(biāo)準(zhǔn)),Clang。我最為佩服的是雖然出身于命令行之上的 Unix 族系統(tǒng),但有魄力寫出自成體系的圖形棧,其圖形界面優(yōu)美而人性化,可謂也為開源界貢獻(xiàn)了自己的精神與思想。
對于 Clang 這個很有潛力的項目,我希望其 C++ 支持(尤其是 template 支持)能夠早日完善。因為 GCC 在 template 出錯時的診斷信息如同小說一般...{ Thanks guest. }
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
