天天看點

《編譯與反編譯技術實戰》——1.5 編譯器LLVM

本節書摘來自華章計算機《編譯與反編譯技術實戰》一書中的第1章,第1.5節,作者 劉曉楠 陶紅偉 嶽峰 戴超,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

llvm是構架編譯器的架構系統,由c++編寫而成,用于優化以任意程式語言編寫的程式的編譯時間、連結時間、運作時間以及空閑時間,對開發者保持開放,并相容已有腳本。llvm計劃啟動于2000年,最初由伊利諾伊大學香槟分校的chris lattner主持開展。2006年chris lattner加盟apple公司并緻力于llvm在apple開發體系中的應用。apple公司也是llvm計劃的主要資助者。

llvm的命名最早源自于low level virtual machine(底層虛拟機)的縮寫,由于命名帶來的混亂,目前llvm就是該項目的全稱。llvm 核心庫提供了與編譯器相關的支援,可以作為多種語言編譯器的背景來使用,能夠進行程式語言的編譯期優化、連結優化、線上編譯優化、代碼生成。llvm的項目是一個子產品化和可重複使用的編譯器和工具技術的集合。llvm提供一個現代化的、基于ssa的編譯政策,能夠同時支援靜态和動态的任意程式設計語言的編譯目标。至今為止,llvm已被應用到許多商業和開源的項目,并被廣泛用于學術研究。

llvm榮獲2012年acm軟體系統獎。

對關注編譯技術的開發人員,llvm提供了很多優點:

1)現代化的設計。llvm的設計是高度子產品化的,使得其代碼更為清晰和便于排查問題所在。

2)語言無關的中間代碼。一方面,這使得通過llvm能夠将不同的語言互相聯結起來,也使得llvm能夠緊密地與ide互動和內建。另一方面,釋出中間代碼而非目标代碼能夠在目标系統上更好地發揮其潛能而又不影響可調試性(比如,在目标系統上針對本機的硬體環境産生目标代碼,但又能夠直接通過中間代碼來進行行級調試)。

3)可作為工具和函數庫。使用llvm提供的工具可以比較容易地實作新的程式設計語言的優化編譯器或虛拟機,或為現有的程式設計語言引入一些更好的優化/調試特性。