如何評價Clang with Microsoft CodeGen?
Visual Studio 2015 with Update 1附贈了兩個模板,可以使用Clang編譯靜態庫以及dll,但是沒有exe的生成。目測是Clang + c2的結構。
是的,這就是clang + c2,用clang作為前端。原因我在別的帖子裡面回答過,msvc的前端已經千瘡百孔,不停地修修補補很難趕上其他編譯器。學院派有都用clang,並對其發展貢獻頗大。現在能把clang和c2接起來,相當於就能把clang的好處和c2的好處相結合。
但如果用clang的話,微軟擴展的特性將無法使用,需要做修改。這也是為什麼不能說換就換,得一點一點嘗試。
另,上次 @vczh 問我C++/CX怎麼辦,現在終於有解了。把meta data用Modern on WordPress.com搞一下,就能生成兼容gcc/clang的WinRT代碼。
挺好的,而且看cppconf的演講,對Clang的改動也是非常的小的。
然而從編譯器開發的角度來看,我覺得在中間語言轉換這一層,實現的難點基本都被微軟挑出去了。
inline asm,因為Clang產生的inline asm中間格式有自己的一套表示,如果要做的話,的確是需要設計一套單獨的措施來轉換成以前的中間格式,並且這裡面有很多很多的corner case,很繁瑣,目前llvm自身對inline asm的支持也不太好,ICE很多。
禁掉了llvm的優化與verifier,於是也就沒有了結合llvm優化與C2優化這一說了、如果要結合llvm優化,絕對夠微軟喝一壺了,然而目前來看,微軟只是想利用Clang的標準支持,沒有考慮過性能這一點。
這應該是一個探路吧,Clang + C2會不會成為以後微軟默認的編譯器?我想任重道遠吧。前後端分離的好處又體現出來了。生成exe不知道能不能自己造個模板,直接調clang.exe是可以生成exe的。這次的clang.exe+c2.dll是單獨打包進來的。c2要適配clang也不是個輕鬆活,很多數據結構定義不能直接傳給不同文件,所以定義都得搬進來。這個c2目測也還沒有open source計劃。多研究下實現再來更新。
推薦閱讀:
※windows下如何使用clang來編譯c++14項目?
※想在程序runtime的時候動態編譯其他code為.bc file,有什麼辦法?
※Clang parser是完全手寫的嗎?
※在編譯C語言代碼時,Clang跟gcc編譯器哪一個編譯出來的程序運行更快?特別是在浮點運算方面。