WebAssembly是一種的語言,能夠在現代瀏覽器環境中運行,並提供了功能和性能上的優點。能夠將其它語言,如C/C++等,編譯成Assembly格式的代碼,而後在瀏覽器中運行。javascript
WebAssembly代碼能夠得到很是快的運行速度。html
增長可讀性,WebAssembly還有可讀的文本格式,易於編寫,調試和閱讀。java
WebAssembly具備很是高安全性,它在一個沙箱環境中執行,同時遵照瀏覽器的同源策略和權限規則。c++
和其它Web語言有很好的兼容性git
Web平臺有兩不分組成組成:a)執行應用程序的虛擬機,b)Web API,例如(DOM,WebGL等)。爲了讓瀏覽器支持Assembly,虛擬機實現了加載兩種語言(javascript,Assembly)的功能,javascript能夠同過Web API引入WebAssembly代碼,WebAssembly能夠導入和異步執行javascript的模塊。github
module:表示由瀏覽器編譯爲可執行機器代碼的WebAssembly二進制文件。 對於一個模塊是無狀態的,所以,像Blob同樣,能夠顯式緩存在IndexedDB中,也能夠在windows和worker之間共享(經過postMessage())。 A模塊像ES2015模塊同樣聲明導入和導出。windows
Memory:一個可調整大小的ArrayBuffer,它包含能夠被WebAssembly的低級內存訪問指令讀取和寫入的線性字節數組。數組
Table:一種引用類型的可變素組(例如函數),沒法將其做爲原始字節存儲在存儲器中。瀏覽器
Instance:module,Memory,Table等得運行實例緩存
編寫c++程序,例如:
#include <stdio.h> int main() { printf("hello, world!\n"); return 0; }
將C++命名,此處命名爲hello.c,而後編譯輸出html代碼,編譯命令以下:
emcc hello.c -s WASM=1 -o hello.html
編譯輸出文件以下:
`hello.html
hello.js
hello.js.temp.js`
用瀏覽器打開hello.html,便可查看效果