LLVM/Clang 在工程領域應用如何?
01-11
先限定一下條件,就是指在主流的x86-64的linux服務端領域,使用LLVM/Clang取代GCC作為生產環境的主要選項,是否條件已經成熟,或者有一些代表?是否還有一些坑?
我用Clang跑過很多很多開源軟體,我跑的是POWER平台,而不是x86,至少在POWER平台下我是不支持Clang的,會有很多問題,如自身內嵌的彙編器有一些彙編語法不支持,inline ASM支持不好,或者builtin沒有(Clang / LLVM 的 inline asm特別多的Bug,但是一些軟體特別喜歡用,如Ruby,資料庫軟體等,而GCC builtin函數Clang從來沒有明確說過什麼時候支持完,總是一個版本添加一些)。我想在x86平台下也會有一些問題,但是若交給熟悉編譯的人應該都能找辦法繞過去,但是若是沒有的話,我目前覺得除非開源軟體明確支持Clang,否則還是用GCC比較穩妥,個人建議。
相對於GCC,Clang主要的坑是語言的builtin和intrinsic不全,有時你需要使用的buildin在Clang上並沒有實現。
好在Clang開發還算快,會經常地添加這些功能。問題是你很可能需要自己編譯、安裝Clang的代碼包,因為系統軟體庫自帶的Clang通常不會那麼新。
freebsd從10.0開始把clang作為大多數架構默認編譯器,10.0發布已經兩年多了吧,系統本身和第三方軟體默認都用clang編譯。
cloudera有個大數據查詢系統impala,使用clang做jit編譯。Google現在就是用clang來做的c++的編譯時的錯誤提示。也算是生產環境的應用了吧233
(然而後面的編譯器還是gcc。
我們做電視的,UI引擎(包括一個VM、圖形引擎)是幾年前就開發了,現在已經轉到Clang,程序改動不大,效能提升了大約11%。
現在FreeBSD和Android的最新生產版本都將clang/llvm作為默認的c/c++編譯器。因此可以認為clang/llvm已經可以滿足生產環境運行標準。
據說下一個Android就全LLVM了
推薦閱讀: