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