WebAssembly基礎

WebAssembly定義

WebAssembly是一種的語言,能夠在現代瀏覽器環境中運行,並提供了功能和性能上的優點。能夠將其它語言,如C/C++等,編譯成Assembly格式的代碼,而後在瀏覽器中運行。javascript

WebAssembly的目標

  • WebAssembly代碼能夠得到很是快的運行速度。html

  • 增長可讀性,WebAssembly還有可讀的文本格式,易於編寫,調試和閱讀。java

  • WebAssembly具備很是高安全性,它在一個沙箱環境中執行,同時遵照瀏覽器的同源策略和權限規則。c++

  • 和其它Web語言有很好的兼容性git

WebAssembly工做原理

Web平臺有兩不分組成組成:a)執行應用程序的虛擬機,b)Web API,例如(DOM,WebGL等)。爲了讓瀏覽器支持Assembly,虛擬機實現了加載兩種語言(javascript,Assembly)的功能,javascript能夠同過Web API引入WebAssembly代碼,WebAssembly能夠導入和異步執行javascript的模塊。github

WebAssembly的關鍵部分概覽

  • module:表示由瀏覽器編譯爲可執行機器代碼的WebAssembly二進制文件。 對於一個模塊是無狀態的,所以,像Blob同樣,能夠顯式緩存在IndexedDB中,也能夠在windows和worker之間共享(經過postMessage())。 A模塊像ES2015模塊同樣聲明導入和導出。windows

  • Memory:一個可調整大小的ArrayBuffer,它包含能夠被WebAssembly的低級內存訪問指令讀取和寫入的線性字節數組。數組

  • Table:一種引用類型的可變素組(例如函數),沒法將其做爲原始字節存儲在存儲器中。瀏覽器

  • Instance:module,Memory,Table等得運行實例緩存

一個C++程序轉化爲Assembly的例子

圖片描述

#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,便可查看效果

相關文章
相關標籤/搜索