Konvertieren des WebAssembly-Textformats in Wasm
WebAssembly hat eine auf S-Ausdrücken basierende textuelle Darstellung, eine Zwischenform, die in Texteditoren, Browser-Entwicklerwerkzeugen usw. angezeigt werden soll. Dieser Artikel erklärt ein wenig, wie es funktioniert, und wie man verfügbare Werkzeuge verwendet, um Textformatdateien in das Wasm-Format zu konvertieren.
Hinweis:
Textformatdateien werden normalerweise mit der Erweiterung .wat
gespeichert. Historisch wurde auch die Erweiterung .wast
verwendet, diese wird jedoch jetzt für die Skriptsprache der WebAssembly-Test-Suite verwendet.
Ein erster Blick auf das Textformat
Werfen wir einen Blick auf ein Beispiel — das folgende Programm importiert eine Funktion namens imported_func
aus einem Modul namens my_namespace
und exportiert eine Funktion namens exported_func
:
(module
(func $i (import "my_namespace" "imported_func") (param i32))
(func (export "exported_func")
i32.const 42
call $i
)
)
Die WebAssembly-Funktion exported_func
wird zur Verwendung in unserer Umgebung (z. B. der Web-App, in der wir unser WebAssembly-Modul verwenden) exportiert. Wenn sie aufgerufen wird, ruft sie eine importierte JavaScript-Funktion namens imported_func
auf, die mit dem Wert (42) als Parameter ausgeführt wird.
Konvertieren des Textformats .wat in eine binäre .wasm-Datei
Versuchen wir, das obige .wat
-Textrepräsentationsbeispiel in das .wasm
-Assembly-Format zu konvertieren.
-
Erstellen Sie zunächst eine Kopie des obigen Listings in einer Textdatei; nennen Sie sie
simple.wat
. -
Wir müssen diese textuelle Darstellung in die Assemblersprache umwandeln, die der Browser tatsächlich liest, bevor wir sie verwenden können. Dazu können wir das
wabt
-Tool verwenden, das Compiler zur Konvertierung zwischen WebAssemblys Textdarstellung und Wasm sowie mehr enthält. Gehen Sie zu https://github.com/webassembly/wabt — folgen Sie den Anweisungen auf dieser Seite, um das Tool einzurichten. -
Sobald Sie das Tool erstellt haben, fügen Sie das Verzeichnis
/wabt/out/clang/Debug
zu Ihrem SystemPATH
hinzu. -
Führen Sie als nächstes das Programm
wat2wasm
aus, indem Sie den Pfad zur Eingabedatei übergeben, gefolgt von einem-o
Parameter und dem Pfad zur Ausgabedatei:bashwat2wasm simple.wat -o simple.wasm
Dies wird das Wasm in eine Datei namens simple.wasm
konvertieren, die den .wasm
-Assembly-Code enthält.
Hinweis:
Sie können die Assembly auch mit dem wasm2wat
-Tool wieder in das Textformat umwandeln; zum Beispiel wasm2wat simple.wasm -o text.wat
.
Anzeigen der Assembly-Ausgabe
Da die Ausgabedatei auf Assembly basiert, kann sie nicht in einem normalen Texteditor angesehen werden. Sie können sie jedoch mit der -v
Option des wat2wasm
-Tools anzeigen. Versuchen Sie Folgendes:
wat2wasm simple.wat -v
Dies wird Ihnen eine Ausgabe in Ihrem Terminal auf folgende Weise geben:
Siehe auch
- Das WebAssembly-Textformat verstehen — eine detaillierte Erklärung der Syntax des Textformats.
- Compilieren von C/C++ zu WebAssembly — Werkzeuge wie Binaryen/Emscripten kompilieren Ihren Quellcode sowohl in Wasm als auch in den API-Code, der benötigt wird, um das Modul in einem JavaScript-Kontext auszuführen. Erfahren Sie mehr darüber, wie Sie sie verwenden können.
- Verwendung der WebAssembly JavaScript API — lesen Sie dies, wenn Sie mehr darüber erfahren möchten, wie der WebAssembly-API-Code funktioniert.
- Textformat — weitere Erklärungen zum Textformat im WebAssembly GitHub-Repo.
- wast-loader — ein Loader für webpack, der alles für Sie erledigt.