注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)深入淺出WebAssembly

深入淺出WebAssembly

深入淺出WebAssembly

定 價(jià):¥128.00

作 者: 于航 著
出版社: 電子工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購(gòu)買(mǎi)這本書(shū)可以去


ISBN: 9787121352171 出版時(shí)間: 2018-11-01 包裝: 平裝
開(kāi)本: 16 頁(yè)數(shù): 548 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  WebAssembly是一種新的二進(jìn)制格式,它可以方便地將C/C++等靜態(tài)語(yǔ)言的代碼快速地“運(yùn)行”在瀏覽器中,這一特性為前端密集計(jì)算場(chǎng)景提供了無(wú)限可能。不僅如此,通過(guò)WebAssembly技術(shù),我們還可以將基于Unity等游戲引擎開(kāi)發(fā)的大型游戲快速地移植到Web端。WebAssembly技術(shù)現(xiàn)在已經(jīng)被計(jì)劃設(shè)計(jì)成W3C的標(biāo)準(zhǔn),眾多瀏覽器廠(chǎng)商已經(jīng)提供了對(duì)其MVP版本標(biāo)準(zhǔn)的支持。在Google I/O 2017大會(huì)上,Google首次針對(duì)WebAssembly技術(shù)進(jìn)行了公開(kāi)演講和推廣,其Post-MVP版本標(biāo)準(zhǔn)更是對(duì)諸如DOM操作、多線(xiàn)程和GC等特性提供了支持。WebAssembly所帶來(lái)的Web技術(shù)變革勢(shì)不可擋。 《深入淺出WebAssembly》力求從一些簡(jiǎn)單的實(shí)踐入手,深入理論,到復(fù)雜的具有實(shí)際業(yè)務(wù)價(jià)值的綜合實(shí)踐,深入淺出地介紹Wasm技術(shù)發(fā)展至今,其背后所涉及的各種底層設(shè)計(jì)原理與實(shí)現(xiàn)、相關(guān)工具鏈以及未來(lái)發(fā)展方向等多方面內(nèi)容。本書(shū)內(nèi)容包括:WebAssembly技術(shù)的發(fā)展歷程,從PNaCl到ASM.js再到WebAssembly,以及這些技術(shù)的基本應(yīng)用方法與性能對(duì)比;WebAssembly的標(biāo)準(zhǔn)上層API、底層堆棧機(jī)的設(shè)計(jì)原理,以及對(duì)MVP標(biāo)準(zhǔn)理論的深入解讀;與WebAssembly標(biāo)準(zhǔn)相關(guān)的進(jìn)階內(nèi)容,如單指令多數(shù)據(jù)流(SIMD)、動(dòng)態(tài)鏈接(DL)等;LLVM工具鏈與WAT可讀文本格式的相關(guān)內(nèi)容;基于Emscripten工具鏈開(kāi)發(fā)WebAssembly應(yīng)用的基本流程,以及工具鏈的一些基本常用功能和特性;基于Emscripten工具鏈實(shí)現(xiàn)C/C++語(yǔ)言動(dòng)態(tài)關(guān)系綁定技術(shù);Emscripten工具鏈所提供的一些如WebGL支持、虛擬文件系統(tǒng)、應(yīng)用優(yōu)化以及HTML 5事件系統(tǒng)等高級(jí)應(yīng)用特性;構(gòu)建一個(gè)具有實(shí)際業(yè)務(wù)價(jià)值的WebAssembly應(yīng)用,現(xiàn)階段Wasm生態(tài)的發(fā)展情況,以及在Post-MVP標(biāo)準(zhǔn)中制訂的一些WebAssembly未來(lái)發(fā)展規(guī)劃。 《深入淺出WebAssembly》的目標(biāo)讀者為Web前端開(kāi)發(fā)人員、C/C++開(kāi)發(fā)人員和對(duì)WebAssembly技術(shù)感興趣的人員。

作者簡(jiǎn)介

  于航,現(xiàn)就職于阿里巴巴 / 餓了么事業(yè)部(BU),資深前端工程師,F(xiàn)reeCodeCamp(FCC) China 上海社區(qū)負(fù)責(zé)人,QCon(2017)上海前端專(zhuān)場(chǎng)講師。2016 年開(kāi)始研究 WebAssembly 技術(shù),2017 年加入 WebAssembly 中國(guó)社區(qū),同年加入官方WCG(W3C Community Group),定期參與 WCG組織的各種線(xiàn)上視頻研討會(huì)議,在跟進(jìn) WebAssembly 新發(fā)展的同時(shí),也為 WebAssembly 的標(biāo)準(zhǔn)化提出自己的建議和意見(jiàn)。生活中喜歡彈鋼琴、演講與分享。主要技術(shù)研究方向?yàn)閃eb前端與基礎(chǔ)設(shè)施架構(gòu)、WebAssembly、LLVM以及編譯器等相關(guān)領(lǐng)域。

圖書(shū)目錄

第1章 漫談WebAssembly發(fā)展史 1
1.1 JavaScript的發(fā)展和弊端 1
1.1.1 快速發(fā)展與基準(zhǔn)測(cè)試 1
1.1.2 Web新時(shí)代與不斷挑戰(zhàn) 8
1.1.3 無(wú)法跨越的“阻礙” 11
1.1.4 Chrome V8引擎鏈路 17
1.2 曾經(jīng)嘗試——ASM.js與PNaCl 28
1.2.1 失落的ASM.js 28
1.2.2 古老的NaCl與PNaCl 42
1.3 新的可能——WebAssembly 57
1.3.1 改變與顛覆 57
1.3.2 一路向前,WCG與WWG 85
第2章 WebAssembly核心原理(基于MVP標(biāo)準(zhǔn)) 90
2.1 應(yīng)用與標(biāo)準(zhǔn)Web接口 90
2.1.1 編譯與初始化 90
2.1.2 驗(yàn)證模塊 106
2.1.3 遇到錯(cuò)誤 106
2.1.4 內(nèi)存分配 108
2.1.5 表 112
2.2 深入設(shè)計(jì)模型——堆棧機(jī) 118
2.2.1 堆棧式虛擬機(jī) 119
2.2.2 逆波蘭表達(dá)式 125
2.2.3 Shunting-yard算法 126
2.2.4 標(biāo)簽與跳轉(zhuǎn) 130
2.2.5 條件語(yǔ)句 135
2.2.6 子程序調(diào)用 137
2.2.7 變量 138
2.2.8 棧幀 139
2.2.9 堆 140
2.3 類(lèi)型檢查 141
2.3.1 數(shù)據(jù)指令類(lèi)型 142
2.3.2 基本流程控制 144
2.3.3 基于表達(dá)式的控制流 149
2.3.4 類(lèi)型堆棧的一致性 151
2.3.5 不可達(dá)代碼 155
2.4 二進(jìn)制編碼 156
2.4.1 字節(jié)序——大端模式與小端模式 157
2.4.2 基于LEB-128的整數(shù)編碼 161
2.4.3 基于IEEE-754—2008的浮點(diǎn)數(shù)編碼 164
2.4.4 基于UTF-8的字符串編碼 167
2.4.5 模塊數(shù)據(jù)類(lèi)型 168
2.4.6 虛擬指令與編碼 169
2.4.7 類(lèi)型構(gòu)造符 174
2.5 模塊 175
2.5.1 段 175
2.5.2 索引空間 185
2.5.3 二進(jìn)制原型結(jié)構(gòu) 186
2.6 內(nèi)存結(jié)構(gòu) 196
2.6.1 操作運(yùn)算符 197
2.6.2 尋址 197
2.6.3 對(duì)齊 198
2.6.4 溢出與調(diào)整 202
第3章 動(dòng)態(tài)鏈接與SIMD(基于MVP標(biāo)準(zhǔn)) 204
3.1 動(dòng)態(tài)鏈接(Dynamic Linking) 204
3.1.1 ELF 206
3.1.2 重定向(Relocation) 212
3.1.3 GOT(Global Offset Table,全局偏移表) 225
3.1.4 PLT(Procedure Lookup Table,過(guò)程查詢(xún)表) 229
3.1.5 基于表的Wasm模塊動(dòng)態(tài)鏈接 233
3.2 單指令多數(shù)據(jù)流(SIMD) 236
3.2.1 SIMD應(yīng)用 238
3.2.2 并行與并發(fā) 243
3.2.3 費(fèi)林分類(lèi)法 244
3.2.4 SIMD.js & TC39 246
3.2.5 WebAssembly上的SIMD擴(kuò)展 248
第4章 深入LLVM與WAT 250
4.1 LLVM——底層虛擬機(jī) 250
4.1.1 傳統(tǒng)的編譯器架構(gòu) 251
4.1.2 LLVM中間表示層 252
4.1.3 基于LLVM的編譯器架構(gòu) 254
4.1.4 LLVM優(yōu)化策略 256
4.1.5 LLVM命令行工具 261
4.1.6 WebAssembly與LLVM 267
4.2 基于LLVM開(kāi)發(fā)編程語(yǔ)言 272
4.2.1 圖靈完備與DSL 276
4.2.2 簡(jiǎn)易詞法分析器 280
4.2.3 RDP與OPP算法 287
4.2.4 AST 295
4.2.5 簡(jiǎn)易語(yǔ)法分析器 296
4.2.6 生成LLVM-IR代碼 303
4.2.7 鏈接優(yōu)化器 307
4.2.8 編譯到目標(biāo)代碼 308
4.2.9 整合I/O交互層 312
4.3 WAT 315
4.3.1 S-表達(dá)式 317
4.3.2 WAT/Wasm與Binary-AST 319
4.3.3 其他與設(shè)計(jì)原則 320
第5章 Emscripten基礎(chǔ)應(yīng)用 322
5.1 利器——Emscripten工具鏈 322
5.1.1 Emscripten發(fā)展歷史 322
5.1.2 Emscripten組成結(jié)構(gòu) 324
5.1.3 Emscripten下載、安裝與配置 326
5.1.4 運(yùn)行測(cè)試套件 330
5.1.5 編譯到ASM.js 331
5.2 連接C/C++與WebAssembly 333
5.2.1 構(gòu)建類(lèi)型 333
5.2.2 Emscripten運(yùn)行時(shí)環(huán)境 342
5.2.3 在JavaScript代碼中調(diào)用C/C++函數(shù) 351
5.2.4 在C/C++代碼中調(diào)用JavaScript函數(shù) 362
第6章 基于Emscripten的語(yǔ)言關(guān)系綁定 382
6.1 基于Embind實(shí)現(xiàn)關(guān)系綁定 384
6.1.1 簡(jiǎn)單類(lèi) 389
6.1.2 數(shù)組與對(duì)象類(lèi)型 391
6.1.3 高級(jí)類(lèi)元素 393
6.1.4 重載函數(shù) 407
6.1.5 枚舉類(lèi)型 408
6.1.6 基本類(lèi)型 409
6.1.7 容器類(lèi)型 411
6.1.8 轉(zhuǎn)譯JavaScript代碼 413
6.1.9 內(nèi)存視圖 416
6.2 基于WebIDL實(shí)現(xiàn)關(guān)系綁定 417
6.2.1 指針、引用和值類(lèi)型 420
6.2.2 類(lèi)成員變量 422
6.2.3 常量“const”關(guān)鍵字 423
6.2.4 命名空間 424
6.2.5 運(yùn)算符重載 425
6.2.6 枚舉類(lèi)型 426
6.2.7 接口類(lèi) 429
6.2.8 原始指針、空指針與void指針 430
6.2.9 默認(rèn)類(lèi)型轉(zhuǎn)換 433
第7章 探索Emscripten高級(jí)特性 436
7.1 加入優(yōu)化流程 436
7.1.1 使用編譯器代碼優(yōu)化策略 441
7.1.2 使用GCC壓縮代碼 443
7.1.3 使用IndexedDB緩存模塊對(duì)象 445
7.1.4 其他優(yōu)化參數(shù) 452
7.2 使用標(biāo)準(zhǔn)庫(kù)與文件系統(tǒng) 453
7.2.1 使用基于musl和libc++的標(biāo)準(zhǔn)庫(kù) 454
7.2.2 虛擬文件系統(tǒng)結(jié)構(gòu) 457
7.2.3 打包初始化文件 458
7.2.4 基本文件系統(tǒng)操作 460
7.2.5 懶加載 469
7.2.6 Fetch API 472
7.3 處理瀏覽器事件 477
7.3.1 事件注冊(cè)函數(shù) 479
7.3.2 事件回調(diào)函數(shù) 479
7.3.3 通用類(lèi)型與返回值類(lèi)型 481
7.3.4 常用事件 482
7.4 基于EGL、OpenGL、SDL和OpenAL的多媒體處理 485
7.4.1 使用EGL與OpenGL處理圖形 486
7.4.2 使用SDL處理圖形 492
7.4.3 使用OpenAL處理音頻 495
7.5 調(diào)試WebAssembly應(yīng)用 497
7.5.1 編譯器的調(diào)試信息 498
7.5.2 使用調(diào)試模式 500
7.5.3 手動(dòng)跟蹤 501
7.5.4 其他常用編譯器調(diào)試選項(xiàng) 503
第8章 WebAssembly綜合實(shí)踐、發(fā)展與未來(lái) 504
8.1 DIP綜合實(shí)踐應(yīng)用 504
8.1.1 應(yīng)用描述 504
8.1.2 濾鏡與卷積 505
8.1.3 基本組件類(lèi)型與架構(gòu) 509
8.1.4 編寫(xiě)基本頁(yè)面骨架(HTML與CSS) 510
8.1.5 編寫(xiě)核心卷積函數(shù)(C++) 511
8.1.6 編寫(xiě)主渲染循環(huán)與“膠水”代碼(JavaScript) 513
8.1.7 使用Emscripten編譯并運(yùn)行應(yīng)用 518
8.1.8 性能對(duì)比 519
8.2 WebAssembly常用工具集 520
8.2.1 Cheerp 520
8.2.2 Webpack 4 522
8.2.3 Go和Rust的WebAssembly實(shí)踐 525
8.2.4 Binaryen 527
8.2.5 WasmFiddle 528
8.2.6 Wabt 529
8.2.7 AssemblyScript 529
8.3 WebAssembly未來(lái)草案 529
8.3.1 GC(垃圾回收) 530
8.3.2 Multi-Thread(多線(xiàn)程)與原子操作 530
8.3.3 異常處理 530
8.3.4 多返回值擴(kuò)展 530
8.3.5 ES模塊 530
8.3.6 尾遞歸 531
8.3.7 BigInts的雙向支持 531
8.3.8 自定義注釋語(yǔ)法 531

本目錄推薦

掃描二維碼
Copyright ? 讀書(shū)網(wǎng) www.talentonion.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)