W3C揭幕 最近通過一個帖子 新規範草案 標準化的準備代碼 WebAssembly 2.0 和相關的 API 能夠創建可跨瀏覽器和硬件平台移植的高性能應用程序。
對於那些剛接觸 WebAssembly 的人,你應該知道 這提供了一個通用中間件, 低電平和 獨立於瀏覽器,運行已編譯的應用程序 來自各種編程語言。 通過將 JIT 用於 WebAssembly,您可以獲得接近原生代碼的性能水平。
關於 WebAssembly
WebAssembly 可用於在瀏覽器中執行高性能任務,例如視頻編碼、音頻處理、3D 和圖形操作、遊戲開發、密碼運算和數學計算,通過執行用 C/C++ 等編譯語言編寫的代碼。
WebAssembly 的主要任務之一是在不同平台上提供可移植性、行為可預測性和代碼執行身份。 最近,WebAssembly 也被推廣為在任何基礎設施、操作系統和設備上安全執行代碼的通用平台,不僅限於瀏覽器。
關於 WebAssembly 2.0 草案
自 WebAssembly 以來所做的部分更改是 WebAssembly 2.0 的最終提案,包括固定寬度 SIMD、大容量內存操作、引用類型、JavaScript BigInt 對 WebAssembly i64 的支持、對多個返回值的支持以及可變的導入/導出全局變量。
W3C 發布了三個 WebAssembly 2.0 規範草案:
- Web 組裝核心: 描述了用於運行中間 WebAssembly 代碼的低級虛擬機。 與 WebAssembly 相關的資源採用“.wasm”格式,類似於 Java“.class”文件,其中包含靜態數據和用於處理該數據的代碼段。
- WebAssembly JavaScript界面: 提供與 JavaScript 集成的 API。 允許您獲取值並將參數傳遞給 WebAssembly 函數。 WebAssembly 執行遵循 JavaScript 安全模型,與主機的所有交互都與運行 JavaScript 代碼類似。
- WebAssembly Web API: 定義了一個基於 Promise 機制的 API,用於請求和執行“.wasm”資源。 WebAssembly 資源格式經過優化,無需等待文件完全下載即可開始執行,從而提高了 Web 應用程序的響應能力。
WebAssembly 和 WebAssembly 2.0 的區別
另外,應該注意的是,WebAssembly 2.0 與標準的第一版相比有一些重要的變化:
- v128 向量類型支持 以及相關的向量指令,允許您對多個數值並行執行操作(SIMD,單指令,多數據)。
- 能夠導入和導出可變全局變量,它允許將值全局綁定為 C++ 中的堆棧指針。
- 將 float 轉換為 int 的新指令,而不是在結果溢出時引發異常,而是返回最小或最大可能值(SIMD 需要)。
- 擴展整數符號的說明 (增加保持符號和值的數字的位深度)。
- 支持按塊和函數返回多個值 (以及將多個參數傳遞給函數)。
- 實現 JavaScript 函數 BigInt64Array 和 BigUint64Array 在 JavaScript 類型 BigInt 和 64 位整數的 WebAssembly 表示之間進行轉換。
- 支持引用類型 (funcref 和 externref)及其相關語句(select、ref.null、ref.func 和 ref.is_null)。
- memory.copy、memory.fill、memory.init 和 data.drop 指令 在內存區域之間複製數據並刪除內存區域。
- 直接訪問和修改表的說明 (table.set、table.get、table.size、table.grow)。
- 能夠在一個模塊中創建、導入和導出多個表. 以批處理模式複制/填充表的函數(table.copy、table.init 和 elem.drop)。
最後,如果你有興趣了解更多,可以諮詢詳情 在下面的鏈接中。