WebAssembly
WebAssembly (wasm) ist ein offener Standard, der vom W3C festgelegt wurde. Er definiert einen Bytecode zur Ausführung von Programmen innerhalb von Webbrowsern, kann aber auch außerhalb von diesen genutzt werden. Ziel der Entwicklung war es, leistungsstärkere Webanwendungen als bisher zu ermöglichen, sowohl was die Ladezeiten als auch die Ausführung betrifft. Das Projekt wird von allen großen Entwicklern von Browserengines, also Mozilla, Microsoft, Google und Apple, unterstützt.[2][3]
WebAssembly | |
---|---|
Basisdaten | |
Erscheinungsjahr: | 2017 |
Entwickler: | Bytecode Alliance |
Aktuelle Version | 1.1[1] (9. Dezember 2019) |
Beeinflusst von: | asm.js, Google Native Client |
Lizenz: | Apache-Lizenz |
webassembly.org |
Seit März 2017 wird die Version 1 standardmäßig mit Chrome, Firefox, Edge und Webkit ausgeliefert.[4][5] Der Standard wurde am 5. Dezember 2019 offiziell festgelegt.[6][7] Weitere Funktionen wurden einzeln standardisiert und sind in Entwicklung oder in einigen Implementierungen bereits enthalten.[8]
Entwicklung von WebAssembly-Code
Die Entwicklung von Webassembly-Code ist in einer Reihe von Programmiersprachen möglich, für weitere Sprachen gibt es Laufzeitsysteme als WebAssembly.[9]
Neben dem Bytecode (wasm) gibt es eine Textform (wat), aus der der Bytecode mit Hilfe des Kommandos wat2wasm unmittelbar erzeugt werden kann.[10]
Außerdem werden die Programmiersprachen C und C++ unterstützt.[11] Das Tool Emscripten ist hierbei in der Lage, nahezu jeden C- und C++-Quellcode in ein WebAssembly-Modul zu kompilieren. Zusätzlich wird der notwendige JavaScript-Code zum Laden und Ausführen dieses Moduls sowie ein HTML-Dokument zur Anzeige generiert.[12] Auch die Entwicklungsumgebung Unity verwendet Emscripten um WebAssembly-Code (z. B. für Browserspiele) zu erzeugen.[13]
Auch kompilieren Rust und Go nativ nach WebAssembly.[14][15][16] Umfragen zufolge ist Rust die beliebteste Sprache für Wasm-Anwendungen.[17]
Beim JWebAssembly-Projekt wird Java-Bytecode nach WebAssembly übersetzt (experimentell).[18][19] Es gibt für Java jedoch auch einen proprietären Compiler namens CheerpJ.[20]
AssemblyScript ist eine Variante des JavaScript basierten TypeScript, die speziell für WebAssembly entwickelt wurde. Sie ermöglicht auch die Integration von Low-Level-Funktionen.[21]
Beim Blazor-Framework (für WebAssembly) wird ein Laufzeitsystem (IL-Interpreter) als WebAssembly geladen, sodass im Endeffekt die Programmiersprachen C# und F# im Browser genutzt werden können. Ab .NET 6 kann die Übersetzung in WebAssembly-Bytecode zum Entwicklungszeitpunkt (AOT) erfolgen, die App ist dann größer.[22]
Über das pyodide-Projekt kann Python im Browser genutzt werden (experimentell).[23]
Nutzung außerhalb des Browsers
Über eine neue Schnittstelle namens WASI soll in Zukunft WebAssembly auch außerhalb von Browsern benutzt werden können.[24] Hierbei startet das Kommando wasmtime eine Stand-Alone Laufzeitumgebung für WebAssembly. Die Laufzeitumgebung für WebAssembly kann außerdem in verschiedene Sprachen eingebettet werden.[25][26] Daneben gibt es auch eine Micro Runtime mit reduzierter Speichernutzung.[27] Beide stehen unter der Apache2 Lizenz.
Mit Wasmer gibt es außerdem eine weitere Implementierung einer Laufzeitumgebung, die im Januar 2021 mit einer Version 1.0.0 erschien (und sich selbst somit als stabil einstuft).[28][29][30] Die Implementierung steht unter der MIT-Lizenz. Wasmer Inc. ist dabei auch der Firmenname der Herausgeber.
Bytecode Alliance
Zur Unterstützung der Entwicklung wurde im November 2019 die Bytecode-Allianz aus verschiedenen Firmen gegründet.[31] Im April 2021 wurde diese offiziell als Non-Profit Organisation registriert und nahm neue Mitglieder auf.[32]
Weblinks
- Offizielle Website (englisch)
- WebAssembly auf GitHub (englisch)
- WebAssembly. In: developer.mozilla.org. 29. Januar 2018, abgerufen am 9. Februar 2018 (englisch).
- Details zum Projekt von Brendan Eich (englisch)
- Michael Gerhäuser: WebAssembly – Webanwendungen auf der Überholspur. In: heise Developer. 28. September 2018, abgerufen am 3. März 2019.
Einzelnachweise
- Release 1.1. 9. Dezember 2019 (abgerufen am 10. Dezember 2019).
- Peter Bright: The Web is getting its bytecode: WebAssembly. Ars Technica, 18. Juni 2015, abgerufen am 6. Juli 2017 (englisch).
- Sebastian Grüner: Webassembly: Browserhersteller wollen einheitlichen Bytecode fürs Web. In: golem.de. 18. Juni 2015, abgerufen am 6. Juli 2017.
- Luke Wagner (lwagner@mozilla.com): WebAssembly consensus and end of Browser Preview from Luke Wagner on 2017-02-28 (public-webassembly@w3.org from February 2017). Abgerufen am 8. Juni 2018 (englisch).
- Roadmap - WebAssembly. Abgerufen am 8. Juni 2018.
- heise online: Web-Anwendungen: WebAssembly ist nun ein fertiger W3C-Standard. Abgerufen am 30. April 2020.
- World Wide Web Consortium (W3C) brings a new language to the Web as WebAssembly becomes a W3C Recommendation. Abgerufen am 30. April 2020.
- Features to add after the MVP - WebAssembly. Abgerufen am 8. Juni 2018.
- appcypher: appcypher/awesome-wasm-langs. 9. Juni 2021, abgerufen am 9. Juni 2021.
- WABT(1). Abgerufen am 5. Juni 2021.
- WebAssembly High-Level Goals. In: webassembly.org. Abgerufen am 6. Juli 2017 (englisch).
- WebAssembly Concepts. In: developer.mozilla.org. Abgerufen am 3. März 2019 (englisch).
- Unity Technologies: Unity - Manual: Getting started with WebGL development. Abgerufen am 5. Juni 2021 (englisch).
- bors: rustbuild: Enable WebAssembly backend by default by alexcrichton – Pull Request #46115 – rust-lang/rust. In: GitHub. 25. November 2017, abgerufen am 4. Februar 2018 (englisch).
- Paul Krill: Direct WebAssembly compilation comes to Rust language.
- Go 1.11 Release Notes - The Go Programming Language. Abgerufen am 27. August 2018.
- heise online: State of WebAssembly 2021: Beliebteste Sprache für Wasm-Anwendungen ist Rust. Abgerufen am 24. Juni 2021.
- i-net-software/JWebAssembly. i-net /// software, 8. Juni 2021, abgerufen am 9. Juni 2021.
- WebAssembly für Java - eine Revolution. In: W-JAX 2021. 23. März 2020, abgerufen am 9. Juni 2021 (deutsch).
- Java to WebAssembly Compiler | CheerpJ. In: Leaning Technologies. Abgerufen am 9. Juni 2021 (amerikanisches Englisch).
- Introduction | The AssemblyScript Book. Abgerufen am 24. Juni 2021.
- guardrex: Hosten und Bereitstellen von ASP.NET Core Blazor WebAssembly. Abgerufen am 9. November 2021 (deutsch).
- pyodide/pyodide. pyodide, 9. Juni 2021, abgerufen am 9. Juni 2021.
- heise online: Mozilla startet Standardisierungsprozess für WebAssembly außerhalb des Webs. Abgerufen am 28. März 2019.
- bytecodealliance/wasmtime. Bytecode Alliance, 3. Juni 2021, abgerufen am 3. Juni 2021.
- Wasmtime Tutorial. Bytecode Alliance, abgerufen am 3. Juni 2021 (englisch).
- bytecodealliance/wasm-micro-runtime. Bytecode Alliance, 4. Juni 2021, abgerufen am 4. Juni 2021.
- Wasmer - The Universal WebAssembly Runtime. Abgerufen am 4. Juni 2021.
- Release 1.0.0 · wasmerio/wasmer. Abgerufen am 4. Juni 2021 (englisch).
- heise online: WebAssembly-Runtime: Major Release 1.0 von Wasmer erschienen. Abgerufen am 4. Juni 2021.
- New Bytecode Alliance Brings the Security, Ubiquity, and Interoperability of the Web to the World of Pervasive Computing. 12. November 2019, abgerufen am 3. Juni 2021 (englisch).
- The Bytecode Alliance Calls for New Members In Mission to Build Safer Software Foundations for the Internet. 28. April 2021, abgerufen am 3. Juni 2021 (englisch).