LLVM 与 Clang 介绍 — LinuxTOY
LLVM 與 Clang 介紹 — LinuxTOY
LLVM 是 Low Level Virtual Machine
的簡稱,這個庫提供了與編譯器相關(guān)的支持,能夠進(jì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 的特性:
當(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 中進(jìn)行 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. }
總結(jié)
以上是生活随笔為你收集整理的LLVM 与 Clang 介绍 — LinuxTOY的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AIX死进程
- 下一篇: nginx配置文件讲解(二)