- 可移植性(調用約定:它真的在LLVM的水平關係時只調用到C或OS庫函數)的影響
- 鏈接時
- 優化
我想編譯LLVM玩具語言,因爲所有已經存在(優化,目標代碼的生成)困難的部分,但我掙扎着一個我想保留的概念,如果它是值得的:庫文件應該是可重新分發的,可用作靜態和共享庫(用於鏈接,在共享的情況下,當鏈接最終應用程序時,會生成一個真正的so或dll) ),便攜式。我相信這會減少部分編譯時間(因爲本地代碼生成和可能的優化只在最終的二進制鏈接時間完成一次)。我設想鏈接器負責調用約定(如果可能的話)以及在需要時轉換爲共享庫。在遠距離擴展中,可能會將LLVM用於而不是鏈接,並使用LLVM JIT直接運行生成的字節碼,在編寫代碼時完全刪除鏈接時間。
這聽起來
- 可行?
- 值得嗎?我知道C/C++鏈接時間相對較長,這在經常重建時很成問題。自由鏈接時間優化(cfr
/GL
和-flto
,因爲它本質上將LLVM字節碼鏈接在一起,然後將轉換爲本機二進制)。
這可能是一個模糊的問題,如果我必須澄清一些事情,請詢問。
鏈接時間比什麼時間長? Afaik鏈接時間主要取決於每個編譯單元必須解析的符號數量(源自其他編譯單元),而不是語言。我也不確定LLVM字節碼實際上會自動刷掉調用約定。然後用LLVM編譯的C++代碼無法訪問編譯的任何非LLVM。 – 2012-02-25 13:26:11
@MarcovandeVoort:當LLVM生成原生對象代碼時,負責調用約定。如果我只調用LLVM代碼(所以沒有OS庫),所有東西都會遵循相同的LLVM生成的調用約定。首先,C/C++代碼根據特定的調用約定進行編譯。 Clang生成的LLVM位碼不是平臺無關的。我不明白爲什麼我的玩具語言需要關心內部的C調用約定。 – rubenvb 2012-02-25 15:50:56