LLVM 与 Clang 介绍 — LinuxTOY
LLVM 與 Clang 介紹 — LinuxTOY
LLVM 是 Low Level Virtual Machine
的簡稱,這個庫提供了與編譯器相關的支持,能夠進行程序語言的編譯期優化、鏈接優化、在線編譯優化、代碼生成。簡而言之,可以作為多種語言編譯器的后臺來使用。如果這樣還比較抽象的話,介紹下 Clang 就知道了:Clang 是一個 C++ 編寫、基于 LLVM、發布于 LLVM BSD 許可證下的
C/C++/Objective C/Objective C++ 編譯器,其目標(之一)就是超越 GCC。?
Clang 開發事出有因,Wiki 介紹如下:
Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端顯卡) 上生成代碼 (JIT),令程序仍然能夠正常運行。之后 LLVM 與 GCC 的集成過程引發了一些不快,GCC 系統龐大而笨重,而 Apple 大量使用的 Objective-C 在 GCC 中優先級很低。此外 GCC 作為一個純粹的編譯系統,與 IDE 配合很差。加之許可證方面的要求,Apple 無法使用修改版的 GCC 而閉源。于是 Apple 決定從零開始寫 C family 的前端,也就是基于 LLVM 的 Clang 了。
Clang 的特性:
當然,GCC 也有其優勢:
- 支持 JAVA/ADA/FORTRAN
- 當前的 Clang 的 C++ 支持落后于 GCC,參見
http://clang.llvm.org/cxx_status.html。(近日 Clang 已經可以自編譯,見
http://www.phoronix.com/scan.php?page=news_item&px=Nzk2Mw) - GCC 支持更多平臺
- GCC 更流行,廣泛使用,支持完備
- GCC 基于 C,不需要 C++ 編譯器即可編譯
相信介紹到這里大家能夠對 Clang 和 LLVM 有所了解了。除去 Clang 之外,LLVM
還被用在 Gallium3D 中進行 JIT 優化,Xorg 中的 pixman 也有考慮使用 LLVM
來優化執行速度,llvm-lua 使用 LLVM 來編譯
Lua 代碼,gpuocelot 使用 LLVM 可以令 CUDA 程序無需重新編譯即可運行在多核 X86CPU、IBM Cell、支持 OpenCL 的設備之上...
我個人感覺 Apple 在開源界口碑較差(也許是我的錯覺?),不過 Apple 也為開源界貢獻了不少,Webkit,OpenCL(雖說只是個標準),Clang。我最為佩服的是雖然出身于命令行之上的 Unix 族系統,但有魄力寫出自成體系的圖形棧,其圖形界面優美而人性化,可謂也為開源界貢獻了自己的精神與思想。
對于 Clang 這個很有潛力的項目,我希望其 C++ 支持(尤其是 template 支持)能夠早日完善。因為 GCC 在 template 出錯時的診斷信息如同小說一般...
{ Thanks guest. }
總結
以上是生活随笔為你收集整理的LLVM 与 Clang 介绍 — LinuxTOY的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AIX死进程
- 下一篇: nginx配置文件讲解(二)