Bytecode im Browser: Mit WebAssembly und Rust zur Webanwendung.

0

WebAssembly (Wasm) ist ein offener Standard für Bytecode, mit dem Programme in einem Webbrowser ausgeführt werden können.

Gängige Browser wie Firefox, Chrome, Safari und Edge unterstützen Wasm bereits.

Das WebAssembly-Projekt ist von Mozilla’s asm abgeleitet.

js und dem Portable Native Client (PNaCl) von Mozilla abgeleitet.

Beide Projekte schufen die Voraussetzungen, um vorkompilierten C/C++-Code vom Browser für das Hostsystem zu kompilieren und dann nativ im Browser auszuführen.

Im Vergleich zu JavaScript ermöglicht dies eine höhere Leistung bei gleichzeitiger Beibehaltung wichtiger Browser-Sicherheitsfunktionen wie Sandboxing – und die Benutzer profitieren von einer potenziell höheren Sicherheit.

Beispiel 1: Was ist Bytecode?
WebAssembly im Browser

Am Beispiel eines Chat-Systems demonstrieren die Autoren die Programmierung eines browserbasierten Chat-Clients und -Servers mit Rust und Wasm.

Wegen seiner Ähnlichkeit mit Assembler kann WebAssembly als zusätzliches Backend leicht in einen Compiler integriert werden.

Zum Beispiel kann die Compiler-Infrastruktur LLVM WebAssembly erzeugen.

Daher ist es möglich, WebAssembly mit Clang aus C/C++ oder mit Rustc aus Rust zu erzeugen.

Auch mit dem Compiler Emscripten kann C-Code über das LLVM-Backend im Browser ausgeführt werden.

Java- und WebAssembly-Bytecode unterscheiden sich deutlich.

Java-Bytecode bietet eine höhere Abstraktionsebene und enthält u.a. Typinformationen – erfordert aber Garbage Collection, da Objekte nicht explizit freigegeben werden.

WebAssembly hingegen ist eher mit klassischem Assembler vergleichbar und enthält keine Informationen über Objekte.

Daher ist es nicht überraschend, dass eine typische Java-VM viel komplexer ist als ihr WebAssembly-Pendant.

Die Idee, vorkompilierten Bytecode zu liefern, ist nicht neu.

Sie wurde bereits in den neunziger Jahren mit Java verwendet.

Damals stand den Benutzern vorkompilierter Java-Code als Java-Bytecode zur Verfügung.

Wenn das Programm startete, musste es von einem Just-in-Time (JIT)-Compiler interpretiert oder kompiliert werden und konnte dann ausgeführt werden.

Bytecode bezieht sich auf eine Reihe von Anweisungen für eine virtuelle Maschine.

Sie sind im Allgemeinen unabhängig von der spezifischen Hardware und dem verwendeten Betriebssystem.

Bytecode kann durch Kompilieren des Quellcodes erzeugt werden.

Ein prominentes Beispiel ist Java-Bytecode, der mit einer Java Virtual Machine (JVM) auf verschiedenen Betriebssystemen und unterschiedlicher Hardware ausgeführt werden kann.

Obwohl sich die JVMs je nach Plattform unterscheiden, ist der Code immer derselbe.

Als Vorteil gegenüber der Interpretation des Quellcodes zur Laufzeit verspricht Bytecode eine schnellere Ausführung.

Alle anderen Beispiele in diesem Artikel verwenden Rust.

Die Programmiersprache geht ursprünglich auf Mozilla zurück, so dass unter anderem Teile des Firefox-Browsers in Rust geschrieben sind.

Da Mozilla nach dem Wechsel von Teilen des Wasm-Teams zu Fastly immer noch einer der engagierten Unterstützer von WebAssembly ist, ist die WebAssembly-Unterstützung von Rust umfangreich.

..

Share.

Leave A Reply