官术网_书友最值得收藏!

第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é)。

主站蜘蛛池模板: 绍兴县| 永安市| 沁水县| 新沂市| 桐柏县| 雷山县| 碌曲县| 招远市| 成武县| 凤庆县| 曲阳县| 沙田区| 富民县| 霍邱县| 平山县| 康定县| 内乡县| 乌鲁木齐市| 河池市| 泌阳县| 行唐县| 蛟河市| 竹山县| 师宗县| 正蓝旗| 吴川市| 庄河市| 潞西市| 胶南市| 洪雅县| 萝北县| 威远县| 渭南市| 黑山县| 保靖县| 普洱| 兰溪市| 河津市| 长宁区| 临桂县| 府谷县|