WebAssembly

WebAssembly，簡稱Wasm，是一個低階程式語言。WebAssembly是可移植性的抽象語法樹，被設計來提供比JavaScript更快速的編譯及執行。WebAssembly將讓開發者能運用自己熟悉的程式語言（最初以C/C++作為實作目標）編譯，再藉虛擬機器引擎在瀏覽器內執行。WebAssembly的開發團隊分別來自Mozilla、Google、Microsoft、Apple，代表著四大網路瀏覽器Firefox、Chrome、Microsoft Edge、Safari。2017年11月，以上四個瀏覽器都開始實驗性的支援WebAssembly。2019年12月5日，在W3C制定《WebAssembly核心規範WebAssembly核心規範 》後，WebAssembly正式被認證為Web的標準之一。

 設計 

 最高指導目標 
在官方的一個github頁面與說明文件中，闡述了WebAssembly的設計與實作原則，包含：
 定義一個可移植，具有大小與載入高效率的二進位格式，作為編譯標的。這個編譯標的必須可以被編譯至常見的平台，包含移動端與物聯網，並且可以善用硬體資源、有原生執行碼的執行速度。
 規格與實作：
 最初的MVP(Minimum Viable Product)與Asm.js有大略相等的功能，並以C/C++語言為優先；
 其他額外的特性最初集中在執行緒，零消耗的-{zh-tw:例外;zh-cn:异常}-，和SIMD。這些額外的特性先以回饋和實驗為主，包含C/C++以外其他語言的支持。
 設計可以執行在現有的網路平台之內以及與之整合：
 保持無版本問題、特色測試、向後相容的網路平台
 在與Javascript相同的環境中執行
 允許從Javascript中同步呼叫
 強化同源（Same-origin）和安全性權限政策
 允許瀏覽器存取相同功能的Javascript API
 定義一個可人工讀取，能和二進位格式互換的純文字格式，以支援查看原始碼
 設計也可以用於非瀏覽器的嵌入式系統
 製作大平台
 為WebAssembly建置新的LLVM後端與伴隨的Clang接口
 推動其他WebAssembly的編譯器與工具
 啟用更多有用的工具

 下一階段要實作的特色 
在2017年推出第一個版本後，同時也列出了下一階段將實作的特色
 制定規格
 執行緒
 固定長度的SIMD
 例外處理
 垃圾回收
 記憶體區塊操作
 網頁內容安全性政策
 ECMAScript 模組整合
 尾端呼叫
 Non-trapping浮點數-整數轉換
 多值函數
 Host bindings

 官方的宣傳 
 Ending定律 

Ending定律也称为终结者定律，
它是Ending在2016年Emscripten技术交流会上给出的断言：

現在這個定律除了 WebAssembly 的支持者用做宣傳之外看不到任何實現的跡象。

 參見 
 JavaScript / ECMAScript / Ajax
 Dart
 TypeScript
 V8
 SpiderMonkey
 Qt for WebAssembly

其他逐漸被捨棄的網頁用戶端技術與RIA
 ActiveX
 VBScript
 Flash / ActionScript
 Microsoft Silverlight
 Java Applet / JavaFX
 asm.js
 Native Client

其他位元組碼
 Java bytecode
 通用中間語言 (CIL)

參考資料

外部連結

 WebAssembly Community Group
 WebAssembly Design 
 WebAssembly资源精选 - 中文版 
 WebAssembly标准入门 - 人民邮电 
 C/C++面向WebAssembly编程 - 开源图书 
 MDN Web Docs WebAssembly文档（中文版 、英文版 ）

Category:2015年面世
Category:汇编语言
Category:网页标准
Category:位元組碼