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正式被認證為Web的標準之一。
設計
最高指導目標
在官方的一個github頁面與說明文件中,闡述了WebAssembly的設計與實作原則,包含:
定義一個可移植,具有大小與載入高效率的二進位格式,作為編譯標的。這個編譯標的必須可以被編譯至常見的平台,包含移動端與物聯網,並且可以善用硬體資源、有原生執行碼的執行速度。
規格與實作:
#* 最初的MVP(Minimum Viable Product)與Asm.js有大略相等的功能,並以C/C++語言為優先;
#* 其他額外的特性最初集中在執行緒,零消耗的异常}-,和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)
參考資料
外部連結
*
- [https://www.w3.org/community/webassembly/ WebAssembly Community Group]
- [https://github.com/WebAssembly/design WebAssembly Design]
- [https://github.com/chai2010/awesome-wasm-zh WebAssembly资源精选 - 中文版]
- [https://github.com/chai2010/awesome-wasm-zh/blob/master/webassembly-primer.md WebAssembly标准入门 - 人民邮电]
- [https://github.com/3dgen/cppwasm-book C/C++面向WebAssembly编程 - 开源图书]
- MDN Web Docs WebAssembly文档([https://developer.mozilla.org/zh-CN/docs/WebAssembly 中文版] 、[https://developer.mozilla.org/en-US/docs/WebAssembly 英文版] )
评论 (0)