WebAssembly goes GraalVM

GraalWasm: Oracle veröffentlicht WebAssembly Engine für GraalVM

Katharina Degenmann

© Shutterstock / Pasuwan

Oracle hat unter dem Namen GraalWasm eine WebAssembly Engine veröffentlicht, die in der GraalVM implementiert ist. GraalWasm kann WebAssembly-Programme im Binärformat interpretieren und kompilieren sowie in andere Programme einbetten.

 

WebAssembly oder kurz „Wasm“ ist ein vom World Wide Web Consortium (W3C) entwickelter Bytecode für eine virtuelle Maschine, der innerhalb einer Sandbox läuft. Wasm wird von allen gängigen Desktop- und mobilen Browsern unterstützt. C, C++, Rust und Go kompilieren nativ nach WebAssembly, und durch das experimentelle Projekt Blazor auch C#.

Die GraalVM ist ein polyglotter und hochperformanter Compiler für die JVM. Nicht ohne Grund ist im Namen nur die Abkürzung VM enthalten und nicht JVM, denn auf einer anderen Architektur kann sie nicht nur Java-Bytecode ausführen, sondern ist eine echte polyglotte virtuelle Maschine, auf der prinzipiell jede Programmiersprache ausgeführt werden kann. Nun hat Oracle Wasm und die GraalVM in einem neuen Projekt zusammengeführt.

Seit Längerem besteht in der GraalVM-Community große Nachfrage nach weiteren Sprachen für die GraalVM. Dieser Nachfrage hat sich Oracle angenommen und kürzlich eine WebAssembly Engine präsentiert, die durch die Unterstützung von WebAssembly den Umfang an unterstützten Sprachen durch die GraalVM erweitert. Doch Achtung: Derzeit befindet sich GraalWasm in einem experimentellen Status!

GraalWasm stellt sich vor

Für die Implementierung von GraalWasm wurde die GraalVM als Plattform verwendet, die eine effiziente Engine zur teilweisen Evaluierung bietet. Mithilfe des Truffle-APIs von GraalVM wurde zunächst ein Interpreter für WebAssembly-Binärdateien implementiert.

Quelle: Medium

Überdies kommt ein Bitcode-basierte GraalVM-Interpreter, wie der Sulong for LLVM, zum Einsatz, der in der Regel einen geringen Speicherbedarf aufweist. Durch das semi-strukturierte Format von WebAssembly können alle speicherinternen Datenstrukturen als ASTs dargestellt werden.

Der auf dieser Datenstruktur implementierte Interpreter ist ein Hybrid zwischen AST-basierter und Bitcode-basierter Interpretation. Zur Laufzeit werden der Interpreter und das Programm an die teilweise auswertende Engine von Truffle übergeben, die dann den Interpreter an das Programm weitergibt und den spezialisierten Code an den GraalVM-Compiler weiterleitet. Dieser erzeugt letztendlich einen effizienten Assembly-Code für die Zielplattform.

Weitere Informationen

Derzeit implementiert GraalWasm die Spezifikation WebAssembly MVP (Minimum Viable Product) und kann WebAssembly-Programme im Binärformat ausführen, die mit Compiler-Backends wie Emscripten erzeugt werden. GraalWasm kann mit der aktuellsten Version der GraalVM, GraalVM 19.3.0, mithilfe des gu-Tools von GraalVM installiert werden.

Alle weiteren Informationen zu GraalWasm stehen entweder auf GitHub oder auf dem Blog von Medium zum Nachlesen bereit.

Geschrieben von
Katharina Degenmann
Katharina Degenmann
Katharina ist hauptberuflich hilfsbereite Online- und Print-Redakteurin sowie Bücher- und Filme-Junkie. Nebenbei ist sie Möchtegern-Schriftstellerin, die heimlich hofft, eines Tages ihr Geld als Kaffee-Testerin zu verdienen. Seit Februar 2018 arbeitet sie als Redakteurin bei der Software & Support Media GmbH, davor hat sie Politikwissenschaft und Philosophie studiert.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
4000
  Subscribe  
Benachrichtige mich zu: