- 深入理解LLVM:代碼生成
- 彭成寒 李靈 戴賢澤 王志磊 俞佳嘉
- 705字
- 2024-12-18 16:44:26
第1章 緒論
在現代計算機系統中,編譯器是必不可少的基礎軟件。程序員使用高級語言進行編程完成業務需求,編譯器則負責將高級語言轉換為底層硬件可以執行的機器指令。
編譯器是計算機科學發展史中最為悠久的學科之一。現代公認的第一款編譯器是IBM于1957年發布的Fortran編譯器;讀者所熟知的GCC早在1987年就發布了第一個版本,距今快40年了;而本書討論的LLVM于2003年正式開源,也有20多年的歷史了。
早期編譯器研究聚焦于從高級語言到機器碼的轉換以及優化程序滿足對時間和空間的需求。隨著時代的發展,應用程序執行性能和多硬件支持逐步成為編譯器的主要需求,在編譯器領域產生了大量的有關程序分析與轉換、代碼自動生成以及運行時等新知識。與早期的編譯器實現相比,今天的編譯算法明顯更為復雜。例如,早期的編譯器采用簡單直觀的技術對程序進行詞法分析,而現代的編譯器詞法分析技術都是基于形式語言和自動機理論實現的,這使得編譯器前端的開發更為系統化;再例如,早期編譯器優化技術更多采用簡單直觀的技術進行依賴分析和循環變換,而現代編譯器可以采用更為復雜的算法,例如多面體理論、線性規劃等。
本書討論的LLVM是過去20多年最成功的編譯項目之一,它不僅被廣泛用于C/C++等傳統語言的編譯,更被很多新型語言作為開發基礎。為什么LLVM能取得這么大的成就?根本原因在于LLVM良好的設計與實現。LLVM為編譯項目開發提供基礎,程序被前端編譯到LLVM IR,再由LLVM后端編譯至任意平臺(指LLVM所支持的大多數主流平臺),不同目標架構可以重用內置的編譯優化,這極大地簡化了針對某一編程語言開發編譯器的過程。此外,LLVM還提供了完備的編譯相關的工具鏈。
本章主要探討LLVM的設計思路、發展現狀,以及LLVM構建和在線學習工具Compiler Explorer,方便讀者在學習后續章節。