2008-10-05 102 views
45

有沒有人有LLVM,llvm-gccClang的經驗?LLVM的最大好處是什麼?

llvm背後的想法對我來說似乎非常有趣,我很感興趣看到它的表現。如果這些工具尚未準備好投入生產,我只是不想將大量時間花費在嘗試使用這些工具上。

如果您有使用這些工具的經驗,您如何看待它們?你遇到什麼主要限制?什麼是最大的好處?

非常感謝!

+1

我寫了以下文件討論LLVM的好處。 http://llvm4eclipsecdt.googlecode.com/files/Benefits%20of%20the%20LLVM%20compiler%20infrastructure.pdf – 2012-06-29 04:02:33

回答

21

我已經和LLVM進行了初步的遊戲,並且通過this tutorial工作,讓我非常興奮它的潛力;我可以用它來相對容易地將JIT構建到應用程序中的想法令我興奮不已。

我還沒有深入到能夠提供任何有用的意見,它的侷限性,穩定性,性能等。我明白這一切都很好,但這純粹是傳聞。

39

我不能說LLVM的好東西。與我看過的其他編譯器項目相比,它的工作非常簡單。我不是一個編譯器的人,但是當我對LLVM或clang的某些限制感到沮喪時,通常很容易就可以深入並改變它。我們(Nate Begeman,我自己和其他一些人)編寫了PPC後端,並沒有真正的編譯器設計經驗,但看起來很簡單,非專家可以接近它。我們對PPC組裝非常熟悉,但仍然非常令人難以置信,我們在空閒時間的幾個星期內成功獲得了LLVM-gcc輸出PPC代碼。肯定是我所編寫的最令人滿意的Hello World之一。

25

我一直在使用LLVM打開和關閉幾個月。我寫了兩篇OCaml Journal文章,內容涉及OCaml編程語言中LLVM的使用。這是特別有趣的,因爲OCaml語言非常適合編寫編譯器,並且具有豐富的功能強大且成熟的工具和用於解析的庫等。

總的來說,我的經驗非常積極。 LLVM在錫上表達的意思很容易使用。生成的代碼的性能非常好。我編寫的程序之一是一個簡單的Brainf * ck編譯器,它生成我測試過的任何編譯器(包括GCC)的一些最快的可執行文件。

我只有兩個LLVM的抱怨。首先,每當出現任何錯誤而不是引發異常時,它都會使用abort()。這是由其作者努力去除LLVM的所有異常使用的故意設計決定,但它使得在嘗試調試使用LLVM的編譯器時無法從OCaml獲得回溯:您的程序只是由LLVM的文本解釋而死亡但沒有線索你的來源發生錯誤的地方。其次,LLVM的編譯庫非常大(20Mb)。我認爲這是由於C++引起的膨脹,但是它使得編譯非常緩慢。

編輯:我在LLVM上的工作最終創造了一個高性能的高級垃圾收集虛擬機。免費下載here並查看相應的benchmarks(哇!)。 @Alex:我會盡快爲你在某處獲得該BF編譯器。

+2

你能發佈BF編譯器嗎?我寫了一個BF-> C翻譯器,我認爲它的質量差不多可以一次完成,而且llvm-gcc在非常大的程序中落敗得很厲害。不過,他們有點不公平。 – 2008-12-25 19:58:23

2

您問過關於工具的問題,我想提一下Eclipse CDT的LLVM插件(適用於Windows,Linux和Mac)。它將LLVM很好地集成到IDE中,用戶不需要知道有關LLVM的任何信息。按下編譯按鈕就足以生成.bc和可執行文件(並且背景上的中間文件對用戶不可見)。

最新的版本是通過官方的Eclipse更新站點可供選擇:http://download.eclipse.org/releases/mars

這是在編程語言,並命名爲「C/C++ LLVM-家庭編譯器生成的支持」。