WebAssembly和Emscripten工作整理

雲荒杯傾發表於2018-01-08

寫在前面

之前做過一段時間的WebAssembly的研究,寫過幾個WebAssembly Demo,並且閱讀並翻譯了很多篇Emscripten官方文件,今天對這些東西做一個總結。
主要是以連結形式提供,並附上簡短的說明。

WebAssembly方面

1.WebAssembly入門

這是一篇對WebAssembly進行概括介紹的文章。裡面也有demo。

連結: https://cunzaizhuyi.github.io/webassembly/

2.WebAssembly API及呼叫過程圖示

為了搞清楚WebAssembly的幾個Web API而畫的一個典型的使用JS呼叫wasm模組所涉及的API。

圖片連結:https://github.com/cunzaizhuyi/photos/blob/master/WebAssembly/seq.png?raw=true

3.WebAssembly的CanvasDemo

介紹了一個基於canvas的圓球隨機運動小demo。

文章連結:https://cunzaizhuyi.github.io/WebAssemblyCanvasDemo/

Demo連結:https://github.com/cunzaizhuyi/wasm-canvasDemo

Emscripten官方文件翻譯

1.Emscripten入門指導

是對這個Emscripten專案的教學型介紹,原文在get started目錄下。

連結: https://segmentfault.com/a/1190000011328496

2.emcc編譯工具使用

如何使用emcc工具將c/c++程式碼編譯為wasm供js呼叫,從而生成web程式?如何使用emcc工具將c/c++程式碼直接編譯為asm,從而生成web程式?以上兩個問題的答案,要在emcc編譯命令的介紹裡面去搜尋。

連結:https://segmentfault.com/a/1190000011335568

3.程式碼可移植性與限制

介紹將C/C++程式碼編譯為wasm的過程中,有哪部分C/C++程式碼不能被編譯、哪種程式碼能編譯但是效率很低、哪種程式碼可以通過轉化程式碼寫法從而進行編譯等。

連結:https://cunzaizhuyi.github.io/em-port-one/

4.Emscripten執行時環境

因為c/c++執行時環境與web程式執行時環境不同,因此一個Emscripten程式如果將來想要能夠被編譯成web程式,它就要對自身的執行時環境進行改造,填平、處理掉這些差異。

連結:https://cunzaizhuyi.github.io/em-port-RuntimeEnv-two/

5.連線C程式和JavaScript程式碼

實際上你可以將Emscripten看成一個js API 和c、C++ sdk 優化子集,即它自己是一套完整的東西。從這個思路出發,說到c和js的程式碼互動,C裡面怎麼呼叫js,js裡面又怎麼調c,不過就是怎麼用好emscripten sdk的問題,這麼說好理解一點。

連結1:https://cunzaizhuyi.github.io/em-port-codeinteract-three/

連結2:https://cunzaizhuyi.github.io/em-port-embind-three/

6.檔案和檔案系統

根據上一個連結的說法,這部分其實就是介紹了Emscripten專案的檔案系統和c/c++的不同,為啥要有這些不同(因為要適應web環境),然後你怎麼用我Emscripten的sdk中涉及檔案系統的API等。

連結:https://cunzaizhuyi.github.io/em-port-filesystem-four/

7.對opengl的支援

介紹了Emscripten專案能夠支援的OpenGL的版本與支援程度。

連結:https://segmentfault.com/a/1190000011438279

8.除錯程式碼

Emscripten提供了好幾種除錯方式

連結:https://cunzaizhuyi.github.io/em-port-debug-six/

9.優化程式碼

其實也算emcc編譯工具使用教程之一,它集中在講解哪些emcc命令是與優化程式碼質量、大小有關的。

連結:https://cunzaizhuyi.github.io/emcscripten-Optimizing-Code/

總結

以上鍊接也可以去segmentfault的專欄閱讀。

相關文章