將 WebAssembly 文字格式轉換為 Wasm
WebAssembly 具有基於 S 表示式的文字表示形式,這是一種中間形式,旨在在文字編輯器、瀏覽器開發者工具等中公開。本文簡要介紹了其工作原理以及如何使用可用工具將文字格式檔案轉換為 Wasm 格式。
注意: 文字格式檔案通常以 .wat 副檔名儲存。歷史上,也使用過 .wast 副檔名,但現在它用於 WebAssembly 測試套件使用的指令碼語言。
初步瞭解文字格式
讓我們來看一個簡單的例子——以下程式從名為 my_namespace 的模組匯入名為 imported_func 的函式,並匯出名為 exported_func 的函式。
wasm
(module
(func $i (import "my_namespace" "imported_func") (param i32))
(func (export "exported_func")
i32.const 42
call $i
)
)
WebAssembly 函式 exported_func 匯出供我們的環境使用(例如,我們使用 WebAssembly 模組的 Web 應用程式)。當它被呼叫時,它會呼叫一個名為 imported_func 的匯入的 JavaScript 函式,該函式使用作為引數提供的值 (42) 執行。
將文字 .wat 檔案轉換為二進位制 .wasm 檔案
讓我們嘗試將上述 .wat 文字表示示例轉換為 .wasm 彙編格式。
- 首先,將上述列表複製到一個文字檔案中;將其命名為
simple.wat。 - 在我們能夠使用它之前,我們需要將這種文字表示形式彙編成瀏覽器實際讀取的組合語言。為此,我們可以使用 wabt 工具,該工具包括用於在 WebAssembly 的文字表示形式和 Wasm 之間進行轉換的編譯器,以及更多其他功能。請訪問 https://github.com/webassembly/wabt — 按照此頁面上的說明設定該工具。
- 構建完該工具後,將
/wabt/out/clang/Debug目錄新增到系統的PATH中。 - 接下來,執行 wat2wasm 程式,將輸入檔案的路徑作為引數傳遞,後跟
-o引數,然後是輸出檔案的路徑。bashwat2wasm simple.wat -o simple.wasm
這會將 Wasm 轉換為名為 simple.wasm 的檔案,其中包含 .wasm 彙編程式碼。
注意: 您還可以使用 wasm2wat 工具將彙編轉換回文字表示形式;例如 wasm2wat simple.wasm -o text.wat。
檢視彙編輸出
由於輸出檔案是基於彙編的,因此無法在普通文字編輯器中檢視。但是,您可以使用 wat2wasm 工具的 -v 選項檢視它。嘗試以下操作:
bash
wat2wasm simple.wat -v
這將在您的終端中以以下方式輸出:
另請參閱
- 理解 WebAssembly 文字格式 — 對文字格式語法的詳細解釋。
- 從 C/C++ 編譯到 WebAssembly — Binaryen/Emscripten 等工具都將您的原始碼編譯為 Wasm,並建立在 JavaScript 上下文中執行模組所需的 API 程式碼。詳細瞭解如何使用它們。
- 使用 WebAssembly JavaScript API — 如果您想了解有關 WebAssembly API 程式碼如何工作的更多資訊,請閱讀此內容。
- 文字格式 — WebAssembly GitHub 儲存庫上對文字格式的更多解釋。
- wast-loader — 一個 webpack 載入器,可以為您處理所有這些操作。