書名: 深入理解LLVM:代碼生成作者名: 彭成寒 李靈 戴賢澤 王志磊 俞佳嘉本章字?jǐn)?shù): 705字更新時(shí)間: 2024-12-18 16:44:26
第1章 緒論
在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,編譯器是必不可少的基礎(chǔ)軟件。程序員使用高級(jí)語(yǔ)言進(jìn)行編程完成業(yè)務(wù)需求,編譯器則負(fù)責(zé)將高級(jí)語(yǔ)言轉(zhuǎn)換為底層硬件可以執(zhí)行的機(jī)器指令。
編譯器是計(jì)算機(jī)科學(xué)發(fā)展史中最為悠久的學(xué)科之一。現(xiàn)代公認(rèn)的第一款編譯器是IBM于1957年發(fā)布的Fortran編譯器;讀者所熟知的GCC早在1987年就發(fā)布了第一個(gè)版本,距今快40年了;而本書討論的LLVM于2003年正式開源,也有20多年的歷史了。
早期編譯器研究聚焦于從高級(jí)語(yǔ)言到機(jī)器碼的轉(zhuǎn)換以及優(yōu)化程序滿足對(duì)時(shí)間和空間的需求。隨著時(shí)代的發(fā)展,應(yīng)用程序執(zhí)行性能和多硬件支持逐步成為編譯器的主要需求,在編譯器領(lǐng)域產(chǎn)生了大量的有關(guān)程序分析與轉(zhuǎn)換、代碼自動(dòng)生成以及運(yùn)行時(shí)等新知識(shí)。與早期的編譯器實(shí)現(xiàn)相比,今天的編譯算法明顯更為復(fù)雜。例如,早期的編譯器采用簡(jiǎn)單直觀的技術(shù)對(duì)程序進(jìn)行詞法分析,而現(xiàn)代的編譯器詞法分析技術(shù)都是基于形式語(yǔ)言和自動(dòng)機(jī)理論實(shí)現(xiàn)的,這使得編譯器前端的開發(fā)更為系統(tǒng)化;再例如,早期編譯器優(yōu)化技術(shù)更多采用簡(jiǎn)單直觀的技術(shù)進(jìn)行依賴分析和循環(huán)變換,而現(xiàn)代編譯器可以采用更為復(fù)雜的算法,例如多面體理論、線性規(guī)劃等。
本書討論的LLVM是過(guò)去20多年最成功的編譯項(xiàng)目之一,它不僅被廣泛用于C/C++等傳統(tǒng)語(yǔ)言的編譯,更被很多新型語(yǔ)言作為開發(fā)基礎(chǔ)。為什么LLVM能取得這么大的成就?根本原因在于LLVM良好的設(shè)計(jì)與實(shí)現(xiàn)。LLVM為編譯項(xiàng)目開發(fā)提供基礎(chǔ),程序被前端編譯到LLVM IR,再由LLVM后端編譯至任意平臺(tái)(指LLVM所支持的大多數(shù)主流平臺(tái)),不同目標(biāo)架構(gòu)可以重用內(nèi)置的編譯優(yōu)化,這極大地簡(jiǎn)化了針對(duì)某一編程語(yǔ)言開發(fā)編譯器的過(guò)程。此外,LLVM還提供了完備的編譯相關(guān)的工具鏈。
本章主要探討LLVM的設(shè)計(jì)思路、發(fā)展現(xiàn)狀,以及LLVM構(gòu)建和在線學(xué)習(xí)工具Compiler Explorer,方便讀者在學(xué)習(xí)后續(xù)章節(jié)。
- Java語(yǔ)言程序設(shè)計(jì)
- DBA攻堅(jiān)指南:左手Oracle,右手MySQL
- Mastering Zabbix(Second Edition)
- Spring Boot開發(fā)與測(cè)試實(shí)戰(zhàn)
- 自己動(dòng)手寫Java虛擬機(jī)
- jQuery EasyUI網(wǎng)站開發(fā)實(shí)戰(zhàn)
- 實(shí)戰(zhàn)Java程序設(shè)計(jì)
- Object-Oriented JavaScript(Second Edition)
- SSM輕量級(jí)框架應(yīng)用實(shí)戰(zhàn)
- Responsive Web Design by Example
- Learning Python Design Patterns
- Lighttpd源碼分析
- 微信小程序開發(fā)與實(shí)戰(zhàn)(微課版)
- Creating Data Stories with Tableau Public
- JBoss:Developer's Guide