從源頭就優化 - 動手開發自己的編譯器實戰

于東亮 著

  • 出版商: 深智
  • 出版日期: 2025-04-19
  • 定價: $880
  • 售價: 7.9$695
  • 語言: 繁體中文
  • 頁數: 384
  • ISBN: 6267569683
  • ISBN-13: 9786267569689
  • 相關分類: Compiler
  • 尚未上市,歡迎預購

  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-1
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-2
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-3
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-4
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-5
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-6
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-7
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-8
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-9
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-10
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-11
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-12
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-13
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-14
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-15
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-16
  • 從源頭就優化 - 動手開發自己的編譯器實戰-preview-17
從源頭就優化 - 動手開發自己的編譯器實戰-preview-1

買這商品的人也買了...

商品描述

從源頭就優化 - 動手開發自己的編譯器實戰

編譯器如何誕生?從歷史到架構,古往今來

詞法分析不再難,簡單步驟拆解關鍵技術

語法分析實戰,讓程式碼變成電腦能懂的語法樹

語義分析揭秘,變數與運算子的真正奧義

三位址碼登場,讓程式碼更接近機器世界

基本區塊劃分,拆解程式流程的內部運作

聰明分配暫存器,CPU效能發揮到極致

機器碼怎麼生成?X86_64 ARM64 一次搞懂

可執行檔的秘密,Linux 連接器全解析

指令碼語言運作原理,深入虛擬機器核心

編譯器的終極挑戰,數學模型解鎖未來可能

作者簡介

于東亮

SCF編譯器作者,資深C程式設計師和FFmpeg工程師,畢業於天津大學,長期從事Linux下的程式設計工作。先後製作了「C語言技術內幕」「Linux環境的程式設計詳解」「怎麼用C語言寫一個簡單EDA」「編譯器入門」等原始影片集。本書為作者的第一部實體書,以SCF編譯器為例講述了一門高階語言的發明過程。

目錄大綱

入門篇

1 章 編譯器簡介

1.1 程式語言的發展史

1.2 編譯器在IT 產業裡的核心地位

1.3 編譯器的程式架構

2 章 詞法分析

2.1 「理想語言」的詞法分析

2.2 實際程式語言的詞法擴充

2.2.1 程式語言的標識符號

2.2.2 關鍵字

2.2.3 數字

2.2.4 資料結構

2.3 詞法分析的數學解釋

3 章 語法分析

3.1 敘述類型的劃分

3.2 敘述的巢狀結構和遞迴分析

3.2.1 變數宣告敘述的分析

3.2.2 類型定義敘述的分析

3.2.3 順序區塊的分析

3.2.4 運算式的分析

3.2.5 運算元的優先順序和結合性

3.2.6 運算式樹的建構步驟

3.2.7 完整的抽象語法樹

3.2.8 抽象語法樹的資料結構

3.2.9 變數和類型的資料結構

3.2.10 變數的語法檢查

3.2.11 星號和乘法的區分

3.3 語法的靈活編輯和有限自動機框架

3.3.1 有限自動機的簡介

3.3.2 語法的編輯

3.3.3 程式語言的語法圖

3.3.4 SCF 框架怎麼實現「遞迴」

3.5.5 語法分析框架的模組上下文

3.3.6 for 迴圈的語法分析模組

3.3.7 小括號的多種含義

3.4 語法分析的數學解釋

4 章 語義分析

4.1 類型檢查

4.2 語義分析框架

4.2.1 語義分析的回呼函數

4.2.2 語義分析中的遞迴

4.3 運算元多載

4.3.1 運算元多載的實現

4.3.2 函數呼叫

4.3.3 多載函數的查詢

4.3.4 程式實現

4.3.5 SCF 編譯器的類別物件

4.4 new 關鍵字

4.5 多值函數

4.5.1 應用程式二進位介面

4.5.2 語法層面的支援

4.5.3 語義層面的支援

進階篇

5 章 三位址碼的生成

5.1 回填技術

5.1.1 回填的資料結構

5.1.2 三位址碼的資料結構

5.1.3 回填的步驟

5.2 if-else 的三位址碼

5.3 迴圈的入口和出口

5.4 指標與陣列的賦值

5.5 new 關鍵字的三位址碼

5.6 跳躍的最佳化

5.6.1 跳躍的最佳化簡介

5.6.2 邏輯運算元的短路最佳化

5.6.3 死程式消除

5.6.4 程式實現

6 章 基本區塊的劃分

6.1 比較、跳躍導致的基本區塊劃分

6.2 函數呼叫

6.3 基本區塊的流程圖

7 章 中間程式最佳化

7.1 程式框架

7.2 內聯函數

7.3 有向無環圖

7.3.1 公共子運算式

7.3.2 資料結構

7.3.3 有向無環圖的生成

7.4 圖的搜尋演算法

7.4.1 基本區塊的資料結構

7.4.2 寬度優先搜尋

7.4.3 深度優先搜尋

7.5 指標分析

7.5.1 指標解引用的分析

7.5.2 陣列和結構的指標分析

7.6 跨函數的指標分析

7.7 變數活躍度分析

7.7.1 變數的活躍度

7.7.2 單一基本區塊的變數活躍度分析

7.7.3 基本區塊流程圖上的分析

7.7.4 程式實現

7.8 自動記憶體管理

7.9 DAG 最佳化

7.9.1 無效運算

7.9.2 相同子運算式的判斷

7.9.3 出口活躍變數的最佳化

7.9.4 ++ 的最佳化

7.9.5 邏輯運算元的最佳化

7.9.6 DAG 最佳化的程式實現

7.10 迴圈分析

7.10.1 迴圈的辨識

7.10.2 迴圈的最佳化

8 章 暫存器分配

8.1 不同CPU 架構的暫存器組

8.2 變數之間的衝突

8.3 圖的著色演算法

8.3.1 簡單著色演算法

8.3.2 改進的著色演算法

9 章 機器碼的生成

9.1 RISC 架構的優勢

9.2 暫存器溢位

9.2.1 暫存器的資料結構

9.2.2 暫存器的衝突

9.2.3 暫存器的溢位

9.3 X86_64 的機器碼生成

9.3.1 X86_64 的機器指令

9.3.2 機器碼的生成

9.3.3 目的檔案

9.4 ARM64 的機器碼生成

9.4.1 指令特點

9.4.2 機器碼生成

10 ELF 格式和可執行程式的連接

10.1 ELF 格式

10.1.1 檔案標頭

10.1.2 節標頭表

10.1.3 程式標頭表

10.1.4 ELF 格式的實現

10.2 連接器

10.2.1 連接

10.2.2 靜態連接

10.2.3 動態連接

10.2.4 編譯器的主流程

10.3 可執行檔的執行

10.3.1 處理程式建立

10.3.2 程式的載入和執行

10.3.3 動態函數庫函數的載入

10.3.4 原始程式碼的編譯、連接、執行

11 Naja 位元組碼和虛擬機器

11.1 Naja 位元組碼

11.2 虛擬機器

11.2.1 虛擬機器的資料結構

11.2.2 虛擬機器的執行

11.2.3 動態函數庫函數的載入

12 章 資訊編碼的數學哲學

12.1 資訊編碼格式的轉換

12.2 多項式時間的演算法

12.3 自然指數e 和梯度下降演算法

12.4 複雜問題的簡單解法