WebAssembly標準入門

WebAssembly標準入門
定價:294
NT $ 256
  • 作者:柴樹杉丁爾男
  • 出版社:人民郵電出版社
  • 出版日期:2018-12-01
  • 語言:簡體中文
  • ISBN10:7115500592
  • ISBN13:9787115500595
  • 裝訂:平裝 / 194頁 / 16k / 19 x 26 x 1 cm / 普通級 / 單色印刷 / 1-1
 

內容簡介

WebAssembly是一種新興的網頁虛擬機器標準,它的設計目標包括高可攜性、高安全性、高效率(包括載入效率和運行效率)、盡可能小的程式體積。本書詳盡介紹了WebAssembly程式在JavaScript環境下的使用方法、WebAssembly組合語言和二進位格式,給出了大量簡單易懂的示例,同時以C/C++和Go語言開發環境為例,介紹了如何使用其他高階語言開發WebAssembly模組。 本書適合從事高性能Web前端開發、跨語言Web應用開發的技術人員學習參考,也可以作為WebAssembly標準參考手冊隨時查閱。
 

作者介紹

柴樹杉,青雲QingCloud高級軟體工程師,Go語言和WebAssembly技術專家,著有《Go語言高級程式設計》等書。GitHub 帳號為chai2010。
 
丁爾男,Go語言愛好者,WebAssembly技術專家, 常年從事三維渲染引擎開發, 著有《C/C++面向WebAssembly程式設計》等書,現任武漢航太遠景科技股份有限公司應用技術總監。GitHub 帳號為3dgen。
 

目錄

第0章 WebAssembly誕生背景 1
0.1 JavaScript簡史 1
0.2 asm.js的嘗試 2
0.3 WebAssembly的救贖 5

第1章 JavaScript語言基礎 7
1.1 console對象 7
1.2 函數和閉包 9
1.3 Promise對象 12
1.4 二進位數字組 13

第2章 WebAssembly快速入門 17
2.1 準備工作 17
2.1.1 WebAssembly相容性 17
2.1.2 WebAssembly文本格式與wabt工具集 19
2.2 首個常式 21
2.3 WebAssembly概覽 22
2.3.1 WebAssembly中的關鍵概念 23
2.3.2 WebAssembly程式生命週期 24
2.3.3 WebAssembly虛擬機器體系結構 25
2.4 你好,WebAssembly 25
2.4.1 WebAssembly部分 26
2.4.2 JavaScript部分 27
2.5 WebAssembly調試及代碼編輯環境 28

第3章 JavaScript中的WebAssembly物件 31
3.1 WebAssembly對象簡介 31
3.2 全域方法 32
3.2.1 WebAssembly.compile() 32
3.2.2 WebAssembly.instantiate() 33
3.2.3 WebAssembly.validate() 34
3.2.4 WebAssembly.compileStreaming() 35
3.2.5 WebAssembly.instantiateStreaming() 35
3.3 WebAssembly.Module對象 36
3.3.1 WebAssembly.Module() 36
3.3.2 WebAssembly.Module.exports() 37
3.3.3 WebAssembly.Module.imports() 38
3.3.4 WebAssembly.Module.customSections() 39
3.3.5 緩存Module 40
3.4 WebAssembly.Instance對象 41
3.4.1 WebAssembly.Instance() 41
3.4.2 WebAssembly.Instance.prototype.exports 42
3.4.3 創建WebAssembly.Instance的簡潔方法 43
3.5 WebAssembly.Memory對象 44
3.5.1 WebAssembly.Memory() 44
3.5.2 WebAssembly.Memory.prototype.buffer 44
3.5.3 WebAssembly.Memory.prototype.grow() 47
3.6 WebAssembly.Table對象 50
3.6.1 WebAssembly.Table() 51
3.6.2 WebAssembly.Table.prototype.get() 52
3.6.3 WebAssembly.Table.prototype.length 54
3.6.4 在WebAssembly內部使用表格 55
3.6.5 多個實例通過共用表格及記憶體協同工作 57
3.6.6 WebAssembly.Table.prototype.set() 60
3.6.7 WebAssembly.Table.prototype.grow() 61
3.7 小結及錯誤類型 61

第4章 WebAssembly組合語言 65
4.1 S-運算式 65
4.2 資料類型 66
4.3 函式定義 67
4.3.1 函數簽名 67
4.3.2 區域變數表 68
4.3.3 函數體 68
4.3.4 函數別名 68
4.4 變數 69
4.4.1 參數與區域變數 69
4.4.2 變數別名 70
4.4.3 全域變數 70
4.5 棧式虛擬機器 72
4.5.1 棧 72
4.5.2 WebAssembly棧式虛擬機器 72
4.5.3 棧式調用 73
4.6 函式呼叫 75
4.6.1 直接調用 75
4.6.2 間接調用 76
4.6.3 遞迴 78
4.7 記憶體讀寫 79
4.7.1 記憶體初始化 79
4.7.2 讀取記憶體 80
4.7.3 寫入記憶體 81
4.7.4 獲取記憶體容量及記憶體擴容 82
4.8 控制流 83
4.8.1 nop和unreachable 83
4.8.2 block指令塊 83
4.8.3 if指令塊 85
4.8.4 loop指令塊 86
4.8.5 指令塊的label索引及嵌套 86
4.8.6 br 87
4.8.7 br_if 89
4.8.8 return 90
4.8.9 br_table 90
4.9 導入和匯出 91
4.9.1 匯出對象 91
4.9.2 導入對象 93
4.10 start()函數及指令折疊 96
4.10.1 start()函數 96
4.10.2 指令折疊 97

第5章 WebAssembly二進位格式 99
5.1 LEB128編碼 99
5.1.1 LEB128編碼原理 99
5.1.2 無符號數的LEB128編碼 100
5.1.3 有符號數的LEB128編碼 101
5.2 頭部和段資料 101
5.2.1 頭部 101
5.2.2 段類型列表 101
5.2.3 段資料結構 102
5.3 記憶體段和資料段 104
5.3.1 記憶體段 104
5.3.2 資料段 105
5.4 表格段和元素段 106
5.4.1 表格段 107
5.4.2 元素段 108
5.5 開始段和函數索引 108
5.5.1 開始段 109
5.5.2 函數索引 110
5.6 全域段 111
5.6.1 全域變數索引 111
5.6.2 全域段編碼方式 112
5.7 函數段、程式碼片段和類型段 113
5.7.1 函數段、程式碼片段和類型段之間的關係 113
5.7.2 更簡單的例子 114
5.7.3 函數段 115
5.7.4 類型段 116
5.7.5 程式碼片段 117
5.8 導入段和匯出段 118
5.8.1 例子 118
5.8.2 類型段 119
5.8.3 導入段 119
5.8.4 匯出段 120
5.9 自訂段 121
5.9.1 自訂段結構 122
5.9.2 模組的名字 122
5.9.3 全域變數的名字 123
5.9.4 函數的名字 124
5.9.5 區域變數的名字 124
5.10 補充說明 126

第6章 Emscripten和WebAssembly 127
6.1 安裝環境 127
6.1.1 emsdk命令安裝 127
6.1.2 Docker環境安裝 128
6.1.3 驗證emcc命令 129
6.2 你好,Emscripten! 129
6.2.1 生成wasm檔 130
6.2.2 流覽器環境 130
6.2.3 自動生成HTML測試檔 132
6.3 C/C++內聯JavaScript代碼 133
6.3.1 EM_ASM宏 133
6.3.2 EM_ASM_宏 134
6.3.3 EM_ASM_宏 135
6.3.4 函數參數 137
6.3.5 注意問題 138
6.4 C/C++調用JavaScript函數 139
6.4.1 C語言版本的eval()函數 139
6.4.2 打造帶參數的eval()函數 141
6.4.3 打造可變參數的eval()函數 143
6.4.4 eval()函數返回字串 146
6.5 JavaScript調用C匯出函數 149
6.5.1 調用匯出函數 149
6.5.2 輔助函數ccall()和cwrap() 152
6.6 運行時和消息迴圈 155
6.6.1 Emscripten運行時 155
6.6.2 消息迴圈 158
6.7 補充說明 162

第7章 Go語言和WebAssembly 163
7.1 你好,Go語言 163
7.2 流覽器中的Go語言 166
7.3 使用JavaScript函數 168
7.4 回檔Go函數 170
7.5 syscall/js包 172
7.6 WebAssembly模組的導入函數 175
7.7 WebAssembly虛擬機器 178
7.8 補充說明 180

附錄 指令參考 181
網路書店 類別 折扣 價格
  1. 新書
    87
    $256