作 者:張秀宏 著
定 價:79
出 版 社:機械工業出版社
出版日期:2020年10月01日
頁 數:272
裝 幀:平裝
ISBN:9787111665540
(1)作者是的WebAssembly技術專家,對WebAssembly的規範、源代碼、核心技術都有非常深入的研究,而且在Web開發、遊戲和區塊鏈領域有豐富的實踐經驗。(2)作者是的虛擬機技術專家,對Java、Go和Lua等語言及其虛擬機有非常深入的研究,撰寫了《自己動手寫Java虛擬機》和《自己動手實現Lua:虛擬機、編譯器、標準庫》。(3)本書從工作原理、核心技術和規範3個維度全面解讀WebAssembly,同時給出具體實現思路和代碼
●前言
第一部分 概述
第1章 Wasm介紹
1.1 Wasm簡史
1.2 Wasm簡介
1.3 準備工作
1.4 你好Wasm
1.5 本章小結
第二部分 二進制和文本格式
第2章 二進制格式
2.1 二進制格式介紹
2.1.1 Wasm二進制格式總體結構
2.1.2 索引空間
2.1.3 實體類型
2.2 二進制格式分析
2.2.0 魔數和版本號
2.2.1 類型段
2.2.2 導入段
2.2.3 函數段
2.2.4 表段
2.2.5 內存段
2.2.6 全局段
2.2.7 導出段
2.2.8 起始段
2.2素段
2.2.10 代碼段
2.2.11 數據段
2.2.12 自定義段
2.3 二進制格式解碼
2.3.1 LEB128介紹
2.3.2 解碼基本類型
2.3.3 解碼向量類型
2.3.4 處理tag
2.3.5 解碼代碼項和表達式
2.3.6 解碼整體結構
2.3.7 處理錯誤情況
2.4 實現dump命令
2.5 本章小結
第3章 指令集
3.1 指令集介紹
3.1.1 操作碼
3.1.2 助記符
3.1.3 立即數
3.1.4 操作數
3.2 指令分析
3.2.1 數值指令
3.2.2 變量指令
3.2.3 內存指令
3.2.4 結構化控制指令
3.2.5 跳轉指令
3.2.6 函數調用指令
3.3 指令解碼
3.4 完善dump命令
3.5 本章小結
第4章 文本格式
4.1 基本結構
4.1.1 類型域
4.1.2 導入和導出域
4.1.3 函數域
4.1.4 素域
4.1.5 內存域和數據域
4.1.6 全局域
4.1.7 起始域
4.2 指令
4.2.1 普通形式
4.2.2 折疊形式
4.3 本章小結
第三部分 虛擬機和解釋器
第5章 操作數棧
5.1 操作數棧
5.2 虛擬機
5.2.1 指令循環
5.2.2 指令分派
5.3 參數指令
5.3.1 drop指令
5.3.2 select指令
5.4 數值指令
5.4.1 常量指令
5.4.2 測試指令
5.4.3 比較指令
5.4.算術指令
5.4.算術指令
5.4.6 類型轉換指令
5.5 本章效果
5.6 本章小結
第6章 內存
6.1 內存介紹
6.2 內存實現
6.3 內存指令
6.3.1 size和grow指令
6.3.2 加載指令
6.3.3 存儲指令
6.4 本章效果
6.5 本章小結
第7章 函數調用(上)
7.1 函數調用介紹
7.2 函數調用實現
7.2.1 增強操作數棧
7.2.2 添加調用棧
7.2.3 增強虛擬機
7.2.4 call指令
7.3 局部變量指令
7.3.1 local.get指令
7.3.2 local.set指令
7.3.3 local.tee指令
7.4 全局變量指令
7.4.1 global.get指令
7.4.2 global.set指令
7.5 本章效果
7.6 本章小結
第8章 控制指令
8.1 控制指令介紹
8.1.1 跳轉標簽
8.1.2 跳轉標簽索引
8.1.3 塊類型
8.2 控制指令實現
8.2.1 block和loop指令
8.2.2 if指令
8.2.3 br指令
8.2.4 br_if指令
8.2.5 br_table指令
8.2.6 return指令
8.2.7 unreachable和nop指令
8.3 本章效果
8.4 本章小結
第9章 函數調用(下)
9.1 本地函數調用
9.1.1 本地函數介紹
9.1.2 統一兩種函數
9.1.3 調用本地函數
9.1.4 鏈接本地函數
9.1.5 測試本節代碼
9.2 間接函數調用
9.2.1 間接函數調用介紹
9.2.2 實現表
9.2.3 初始化表
9.2.4 call_indirect指令
9.2.5 測試本節代碼
9.3 本章小結
第10章 鏈接和實例化
10.1 定義實例接口
10.2 實現實例接口
10.2.1 函數
10.2.2 表
10.2.3 全局變量
10.2.4 虛擬機
10.3 實例化模塊
10.4 本章效果
10.5 本章小結
第11章 錯誤處理和驗證
11.1 各種錯誤
11.1.1 解碼錯誤
11.1.2 結構錯誤
11.1.3 實例化錯誤
11.1.4 運行時錯誤
11.2 驗證整體結構
11.3 驗證函數字節碼
11.3.1 數據結構
11.3.2 操作數棧
11.3.3 控制棧
11.3.4 驗證指令
11.4 本章效果
11.5 本章小結
第四部分 進階
第12章 編譯為Wasm
12.1 控制指令
12.2 參數指令
12.3 變量指令
12.4 內存指令
12.5 數值指令
12.6 本章小結
第13章 AOT編譯器
13.1 AOT介紹
13.2 編譯模塊
13.3 編譯函數
13.3.1 內部函數
13.3.2 外部函數
13.3.3 導出函數
13.3.4 輔助方法
13.4 編譯指令
13.4.1 參數指令
13.4.2 變量指令
13.4.3 內存指令
13.4.4 數值指令
13.4.5 結構化控制指令
13.4.6 跳轉指令
13.4.7 函數調用指令
13.5 本章效果
13.6 本章小結
第14章 提案和前景
14.1 提案
14.1.1 多塊內存
14.1.2 內存塊操作
14.1.3 引用類型
14.1.4 尾遞歸調用
14.1.5 異常處理
14.1.6 多線程支持
14.1.7 其他提案
14.2 前景
附錄A Wasm指令表
附錄B 二進制格式
附錄C WAT語法
WebAssembly是棧式虛擬機和字節碼技術的近期新應用,在Web開發、後端開發、區塊鏈等領域大顯身手,越來越受歡迎。本書是WebAssembly入門和進階的推薦閱讀書,它不僅對WebAssembly的工作原理、核心技術和規範進行了全面的剖析和解讀,而且給出了實現WebAssembly解釋器和AOT編譯器的思路和代碼。本書共14章,分為四個部分:第壹部分 WebAssembly概述(第1章)主要介紹了WebAssembly的概念、發展歷史以及閱讀本書需要做的準備工作。第二部分 二進制和文本格式(第2~4章)詳細講解了WebAssembly的二進制格式、文本格式以及指令集。第三部分 虛擬機和解釋器(第5~11章)詳細講解了WebAssembly的解釋器和虛擬機的工作原理以及實現思路,包括操作數棧、內存、函數調用、控制指令、鏈接和實例化、錯誤處理和驗證等。第四部分 WebAssembly進階等