WebAssembly

WebAssembly ist eine Art von Code, der in modernen Webbrowsern ausgeführt werden kann. Es handelt sich um eine niedrigstufige, assemblerähnliche Sprache mit einem kompakten Binärformat, das nahezu native Leistung bietet und Sprachen wie C/C++, C# und Rust ein Kompilierungsziel bietet, damit sie im Web ausgeführt werden können. Es ist auch dafür konzipiert, neben JavaScript ausgeführt zu werden, wodurch beide zusammenarbeiten können.

WebAssembly ist darauf ausgelegt, JavaScript zu ergänzen und daneben zu laufen — mit den WebAssembly-JavaScript-APIs können Sie WebAssembly-Module in eine JavaScript-App laden und Funktionalitäten zwischen beiden teilen. Dies ermöglicht es Ihnen, die Leistung und Stärke von WebAssembly sowie die Ausdruckskraft und Flexibilität von JavaScript in derselben App zu nutzen, selbst wenn Sie nicht wissen, wie man WebAssembly-Code schreibt.

WebAssembly hat große Auswirkungen auf die Webplattform, nicht nur weil es ermöglicht, dass Code in mehreren Sprachen im Web mit nahezu nativer Geschwindigkeit ausgeführt werden kann, sondern auch weil es Client-Apps ermöglicht, im Web ausgeführt zu werden, die zuvor nicht ausgeführt werden konnten.

Und das Beste ist, dass es als Webstandard über die W3C WebAssembly Working Group und die Community Group mit aktiver Beteiligung aller großen Browser-Anbieter entwickelt wird.

Leitfaden

Die WebAssembly-Leitfäden behandeln Themen wie Konzepte auf hoher Ebene, das Kompilieren aus verschiedenen Sprachen, die textuelle Darstellung des Wasm-Binärformats und wie WebAssembly ausgeführt wird.

WebAssembly-Konzepte

Beginnen Sie mit dem Lesen der Konzepte auf hoher Ebene hinter WebAssembly — was es ist, warum es so nützlich ist, wie es in die Webplattform (und darüber hinaus) passt und wie es verwendet wird.

Kompilierung eines neuen C/C++-Moduls zu WebAssembly

Wenn Sie Code in C/C++ geschrieben haben, können Sie ihn mit einem Tool wie Emscripten in Wasm kompilieren. Schauen wir uns an, wie das funktioniert.

Kompilierung eines bestehenden C-Moduls zu WebAssembly

Ein Hauptanwendungsfall für WebAssembly ist es, das bestehende Ökosystem von C-Bibliotheken zu nutzen und Entwicklern zu ermöglichen, sie im Web zu verwenden.

Kompilieren von Rust zu WebAssembly

Wenn Sie Rust-Code geschrieben haben, können Sie ihn in WebAssembly kompilieren! Dieses Tutorial führt Sie durch alles, was Sie wissen müssen, um ein Rust-Projekt zu Wasm zu kompilieren und in einer bestehenden Web-App zu verwenden.

Laden und Ausführen von WebAssembly-Code

Nachdem Sie ein Wasm-Modul haben, behandelt dieser Artikel, wie man es abrufen, kompilieren und instanziieren kann, indem man die WebAssembly-JavaScript-API mit den Fetch- oder XHR-APIs kombiniert.

Verwenden der WebAssembly-JavaScript-API

Sobald Sie ein Wasm-Modul geladen haben, möchten Sie es verwenden. In diesem Artikel zeigen wir Ihnen, wie man WebAssembly über die WebAssembly-JavaScript-API nutzt.

Exportierte WebAssembly-Funktionen

Exportierte WebAssembly-Funktionen sind die JavaScript-Spiegelungen von WebAssembly-Funktionen, die das Aufrufen von WebAssembly-Code aus JavaScript ermöglichen. Dieser Artikel beschreibt, was sie sind.

Verstehen des WebAssembly-Textformats

Dieser Artikel erklärt das Wasm-Textformat. Dies ist die niedrigstufige textuelle Darstellung eines Wasm-Moduls, die in den Entwickler-Tools des Browsers beim Debugging angezeigt wird.

Konvertierung des WebAssembly-Textformats in Wasm

Dieser Artikel bietet eine Anleitung, wie man ein in Textformat geschriebenes WebAssembly-Modul in ein Wasm-Binärformat konvertiert.

API-Referenz

WebAssembly-Instruktionsreferenz

Referenzdokumentation mit interaktiven Beispielen für die Menge der WebAssembly-Operatoren.

WebAssembly-JavaScript-Schnittstelle

Dieses Objekt fungiert als Namensraum für alle WebAssembly-bezogenen Funktionen.

WebAssembly.Global()

Ein WebAssembly.Global-Objekt stellt eine globale Variableninstanz dar, die sowohl von JavaScript aus zugänglich als auch in/zwischen mehreren WebAssembly.Module-Instanzen importierbar/exportierbar ist. Dies ermöglicht das dynamische Verknüpfen mehrerer Module.

WebAssembly.Module()

Ein WebAssembly.Module-Objekt enthält zustandslosen WebAssembly-Code, der bereits vom Browser kompiliert wurde und effizient mit Workern geteilt und mehrfach instanziiert werden kann.

WebAssembly.Instance()

Ein WebAssembly.Instance-Objekt ist eine zustandsbehaftete, ausführbare Instanz eines Module. Instance-Objekte enthalten alle exportierten WebAssembly-Funktionen, die das Aufrufen von WebAssembly-Code aus JavaScript ermöglichen.

WebAssembly.compile()

Die Funktion WebAssembly.compile() kompiliert WebAssembly-Binärcode in ein WebAssembly.Module-Objekt.

WebAssembly.compileStreaming()

Die Funktion WebAssembly.compileStreaming() kompiliert ein WebAssembly.Module direkt aus einer gestreamten zugrunde liegenden Quelle.

WebAssembly.instantiate()

Die Funktion WebAssembly.instantiate() ermöglicht es Ihnen, WebAssembly-Code zu kompilieren und zu instanziieren.

WebAssembly.instantiateStreaming()

Die Funktion WebAssembly.instantiateStreaming() ist die primäre API zum Kompilieren und Instanziieren von WebAssembly-Code und gibt sowohl ein Module als auch seine erste Instance zurück.

WebAssembly.validate()

Die Funktion WebAssembly.validate() validiert ein gegebenes typisiertes Array von WebAssembly-Binärcode.

WebAssembly.Memory()

Ein WebAssembly.Memory-Objekt ist ein anpassbares ArrayBuffer, das die rohen Byte von Speicher enthält, auf die eine Instance zugreift.

WebAssembly.Table()

Ein WebAssembly.Table-Objekt ist ein anpassbares typisiertes Array von undurchsichtigen Werten, wie Funktionsreferenzen, die von einer Instance zugegriffen werden.

WebAssembly.Tag()

Das WebAssembly.Tag-Objekt definiert eine Art von WebAssembly-Ausnahme, die in/zur WebAssembly-Code geworfen werden kann.

WebAssembly.Exception()

Das WebAssembly.Exception-Objekt stellt eine Laufzeitausnahme dar, die von WebAssembly zu JavaScript oder von JavaScript zu einem WebAssembly-Ausnahmehandler geworfen wird.

WebAssembly.CompileError()

Erstellt ein neues WebAssembly CompileError Objekt.

WebAssembly.LinkError()

Erstellt ein neues WebAssembly LinkError Objekt.

WebAssembly.RuntimeError()

Erstellt ein neues WebAssembly RuntimeError Objekt.

Beispielprojekte

Spezifikationen

Specification
WebAssembly JavaScript Interface
# webassembly-namespace
WebAssembly JavaScript Interface
# ref-for-syntax-numtype①⓪
Unknown specification
Unknown specification
Unknown specification
Unknown specification
WebAssembly Core: Garbage Collection
# garbage-collection①
Unknown specification
Unknown specification
WebAssembly JavaScript Interface
# dom-globaldescriptor-mutable
Unknown specification
Unknown specification
Unknown specification
Unknown specification
Unknown specification

Browser-Kompatibilität

Siehe auch