WebAssembly 原理與核心技術

張秀宏

  • 出版商: 機械工業
  • 出版日期: 2020-09-20
  • 售價: $474
  • 貴賓價: 9.5$450
  • 語言: 簡體中文
  • 頁數: 272
  • 裝訂: 平裝
  • ISBN: 7111665546
  • ISBN-13: 9787111665540
  • 相關分類: WebAssembly
  • 立即出貨

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

商品描述

WebAssembly是棧式虛擬機和字節碼技術的應用,在Web開發、
後端開發、區塊鍊等領域大顯身手,越來越受歡迎。
本書是WebAssembly入門和進階的必讀書,它不僅對WebAssembly的工作原理、
核心技術和規范進行了全面的剖析和解讀,而且給出了實現WebAssembly解釋器和AOT編譯器的思路和代碼。
本書共14章,分為四個部分:
第一部分WebAssembly概述(第1章)
主要介紹了WebAssembly的概念、發展歷史以及閱讀本書需要做的準備工作。
第二部分二進制和文本格式(第2~4章)
詳細講解了WebAssembly的二進制格式、文本格式以及指令集。
第三部分虛擬機和解釋器(第5~11章)
詳細講解了WebAssembly的解釋器和虛擬機的工作原理以及實現思路,包括操作數棧、
內存、函數調用、控制指令、鏈接和實例化、錯誤處理和驗證等。
第四部分WebAssembly進階(第12~14章)
深入地講解了AOT編譯器的實現思路和WebAssembly的提案等內容。
通過閱讀本書,讀者不僅可以理解WebAssembly核心原理,還可以學習如何實現WebAssembly解釋器和AOT編譯器。
即收穫了“魚”,又學會了“漁”。

作者簡介

張秀宏

資深服務器開發工程師,在遊戲服務器、區塊鍊等領域有多年的開發和架構經驗。
曾在EA、樂元素、比特大陸等公司擔任高級服務器工程師,對Java、Go、Lua等語言以及高級語言虛擬機有非常深入的研究。
曾獨立撰寫暢銷書《自己動手寫Java虛擬機》和《自己動手實現Lua:虛擬機、編譯器、標準庫》,廣受讀者好評。
《WebAssembly原理與核心技術》是作者在高級語言虛擬機領域的又一力作。

目錄大綱

前言
第一部分概述
第1章Wasm介紹3
1.1 Wasm簡史3
1.2 Wasm簡介6
1.3準備工作10
1.4你好Wasm 11
1.5本章小結13

第二部分二進制和文本格式
第2章二進制格式17
2.1二進制格式介紹17
2.1.1 Wasm二進制格式總體結構18
2.1.2索引空間21
2.1.3實體類型23
2.2二進制格式分析25
2.2.0魔數和版本號25
2.2.1類型段26
2.2.2導入段28
2.2.3函數段30
2.2.4表段30
2.2.5內存段31
2.2.6全局段32
2.2.7導出段33
2.2.8起始段34
2.2.9元素段35
2.2.10代碼段35
2.2.11數據段37
2.2.12自定義段38
2.3二進制格式解碼39
2.3.1 LEB128介紹39
2.3.2解碼基本類型41
2.3.3解碼向量類型44
2.3.4處理tag 44
2.3.5解碼代碼項和表達式45
2.3.6解碼整體結構45
2.3.7處理錯誤情況47
2.4實現dump命令48
2.5本章小結50

第3章指令集51
3.1指令集介紹51
3.1.1操作碼51
3.1.2助記符53
3.1.3立即數54
3.1.4操作數57
3.2指令分析58
3.2.1數值指令58
3.2.2變量指令60
3.2.3內存指令61
3.2.4結構化控制指令62
3.2.5跳轉指令64
3.2.6函數調用指令65
3.3指令解碼66
3.4完善dump命令69
3.5本章小結70

第4章文本格式71
4.1基本結構71
4.1.1類型域72
4.1. 2導入和導出域73
4.1.3函數域75
4.1.4表域和元素域75
4.1.5內存域和數據域76
4.1.6全局域77
4.1.7起始域77
4.2指令78
4.2.1普通形式78
4.2.2折疊形式79
4.3本章小結81

第三部分虛擬機和解釋器
第5章操作數棧85
5.1操作數棧85
5.2虛擬機87
5.2.1指令循環88
5.2 .2指令分派88
5.3參數指令89
5.3.1 drop指令90
5.3.2 select指令90
5.4數值指令91
5.4.1常量指令92
5.4.2測試指令92
5.4.3比較指令93
5.4.4一元算術指令95
5.4.5二元算術指令96
5.4.6類型轉換指令99
5.5本章效果103
5.6本章小結105

第6章內存107
6.1內存介紹107
6.2內存實現108
6.3內存指令109
6.3.1 size和grow指令110
6.3. 2加載指令111
6.3.3存儲指令113
6.4本章效果115
6.5本章小結117

第7章函數調用(上) 119
7.1函數調用介紹119
7.2函數調用實現122
7.2.1增強操作數棧123
7.2.2添加調用棧124
7.2.3增強虛擬機126
7.2.4 call指令127
7.3局部變量指令129
7.3.1 local.get指令130
7.3.2 local.set指令130
7.3.3 local.tee指令131
7.4全局變量指令132
7.4.1 global.get指令132
7.4.2 global.set指令133
7.5本章效果134
7.6本章小結135

第8章控制指令137
8.1控制指令介紹137
8.1.1跳轉標籤138
8.1.2跳轉標籤索引139
8.1.3塊類型141
8.2控制指令實現142
8.2.1 block和loop指令142
8.2.2 if指令144
8.2.3 br指令146
8.2.4 br_if指令148
8.2.5 br_table指令149
8.2.6 return指令150
8.2.7 unreachable和nop指令151
8.3本章效果152
8.4本章小結153

第9章函數調用(下) 155
9.1本地函數調用155
9.1.1本地函數介紹155
9.1.2統一兩種函數158
9.1.3調用本地函數159
9.1.4鏈接本地函數161
9.1.5測試本節代碼162
9.2間接函數調用163
9.2.1間接函數調用介紹163
9.2.2實現表165
9.2.3初始化表166
9.2.4 call_indirect指令167
9.2.5測試本節代碼168
9.3本章小結169

第10章鏈接和實例化171
10.1定義實例接口171
10.2實現實例接口174
10.2.1函數174
10.2.2表176
10.2.3全局變量177
10.2.4虛擬機177
10.3實例化模塊178
10.4本章效果180
10.5本章小結183

第11章錯誤處理和驗證185
11.1各種錯誤186
11.1.1解碼錯誤186
11.1.2結構錯誤188
11.1.3實例化錯誤189
11.1.4運行時錯誤190
11.2驗證整體結構190
11.3驗證函數字節碼192
11.3.1數據結構193
11.3.2操作數棧194
11.3.3控制棧195
11.3.4驗證指令197
11.4本章效果198
11.5本章小結199

第四部分進階
第12章編譯為Wasm 203
12.1控制指令203
12.2參數指令207
12.3變量指令208
12.4內存指令210
12.5數值指令213
12.6本章小結215

第13章AOT編譯器217
13.1 AOT介紹217
13.2編譯模塊219
13.3編譯函數220
13.3.1內部函數221
13.3.2外部函數222
13.3.3導出函數222
13.3.4輔助方法223
13.4編譯指令224
13.4. 1參數指令224
13.4.2變量指令225
13.4.3內存指令226
13.4.4數值指令227
13.4.5結構化控制指令228
13.4.6跳轉指令230
13.4.7函數調用指令231
13.5本章效果233
13.6本章小結234

第14章提案和前景235
14.1提案235
14.1.1多塊內存237
14.1.2內存塊操作237
14.1.3引用類型239
14.1.4尾遞歸調用241
14.1.5異常處理242
14.1.6多線程支持244
14.1.7其他提案247
14.2前景248
附錄A Wasm指令表249
附錄B二進制格式253
附錄C WAT語法255