Von
Lionel Lindt
/30.04.19

WebAssembly ist der neue Trendbegriff in der Webentwicklung. Es ist als Ergänzung zu JavaScript gedacht und wird bald fähig sein, Code in jeder beliebigen, geschriebenen Programmiersprache im Web auszuführen.

Was ist Assembler?

Als «Assembler Sprache» (kurz Assembler oder englisch Assembly) wird eine Programmiersprache bezeichnet, die eine Stufe höher eingestuft wird, als die direkte Maschinensprache.

Die Prozessoren-Hersteller haben jeweils individuelle Instruktionen («Codes») für ihren Prozessor in binärer Form definiert. Der Programmierer konnte diese Instruktionen in eine Datei schreiben, die dann vom Prozessor gelesen und ausgeführt wurden. Diese Codes ermöglichen die ganze Funktionalität einer Computeranwendung, welche im Hintergrund nur aus Speicher Manipulation/Verschiebung besteht.

Die Codes als Zahl waren für Programmierer sehr schwer zu merken. (z.B.: 11111010 Binär und FA Hexadezimal). Darum haben Hersteller angefangen den Codes Namen und Kürzel zu geben, welche die Entwickler einsehen und nutzen konnten (z.B.: ADD, MOV, PUSH etc.).

Assembler ist fähig, diese Kürzel zu verstehen und auszuführen. In Assembler nimmt man einen beliebigen Datenwert (in Form einer Speicheradresse) und führt eine Operation darauf aus, welche meist in einem neuen Wert resultiert, der dann erneut verwendet werden kann. Dabei können aber auch ständig neue Daten eingelesen und verwendet werden. «Höhere Sprachen» wie zum Beispiel «C» machen sich Assembler zunutze, indem sie zuerst zur Assemblersprache (Maschinensprache) und anschliessend zu Maschinencodes «down» kompiliert (übersetzt) werden.

Was ist WebAssembly (WASM)?

Im Web werden «Internetseiten» grundsätzlich mit Sprachen wie HTML, CSS und JavaScript geschrieben. Die JavaScript-Sprache hat sich seit ihrem Anfang (1995) enorm entwickelt und Programmierer können sie heute viel breiter verwenden als damals. JavaScript kann heutzutage auch serverseitig verwendet werden (zum Beispiel als Node.js), das bedeutet, dass sie die auf einem Server hinterlegten Daten entnehmen und aufbereiten kann. Dieses Vorgehen kommt vor allem dann zum Einsatz, wenn dynamische Daten vorhanden sind. Zum Beispiel bei einer Liste von allen Usern auf einer Seite muss nicht jeder Datensatz einzeln manuell hineingeschrieben werden, sondern die serverseitige Sprache kann die Daten aus der Datenbank auslesen und HTML übergeben.

JavaScript bietet viele Vorteile und ist als Scriptsprache sehr beliebt, jedoch kann man Vorteile wie dynamische Typen auch als Nachteile auffassen. Ein anderer Nachteil von JavaScript ist seine Performance. JavaScript wird wie HTML interpretiert, das heisst es wird Zeile für Zeile für den Computer «übersetzt». Im Gegensatz dazu sind sogenannte «Compiler Sprachen» vorher schon für die Maschine verständlich bzw. «übersetzt». So bleibt mehr Zeit, gewisse Optimierungen vorzunehmen.

JavaScript hat jedoch seit ihrem Anfang 1995 sehr an Performance zugelegt, da Browser angefangen haben, in jeder Interpretation des Codes Muster zu erkennen und diese abzuspeichern. Das hat zur Folge, dass jeweils die optimierte Version des Codes geladen werden kann. (Diese Optimierung ist unter dem Begriff «JIT» bekannt, was für Just-in-time compilation steht.)

Dennoch büsst JavaScript an Performance ein, nur schon durch den Fakt, dass diese Optimierung der Browser vorgenommen werden muss.

Mozilla, das Unternehmen, hinter Firefox, Thunderbird und JavaScript hat im März 2017 WebAssembly (WASM) released. WebAssembly funktioniert ähnlich wie der «echte» Assembler:

WebAssembly kann auch als Maschinencode in das Binärformat übertragen werden und Compilersprachen – Sprachen, deren Code bereits vor dem Ausführen in Maschinensprache übertragen wird, wie C, C++ oder Rust – können zu WebAssembly kompiliert («übersetzt») werden.

Da das Web aber die jeweilige Prozessorarchitektur des Nutzers einer Seite, welche WebAssembly nutzt, nicht kennt, ist WebAssembly noch in den passenden Assembler zu kompilieren. Die mit WebAssembly kompilierten Programme müssen in JavaScript anschliessend durch sogenannte «Module» hinein geladen werden.

WebAssembly löst nun als Ergänzung von JavaScript dessen Performance Problem. Kompilierbare und damit sehr schnelle «nicht-Ressourcen-hungrige» Programme, welche zum Beispiel in C geschrieben wurden, konnten bisher nicht über das Web ausgeführt werden, sondern wie vorher erwähnt nur mit JavaScript.

Dank WebAssembly können diese Programme nun im Internet verwendet werden. Damit ist WebAssembly eines der wichtigsten neuen Features in der Webentwicklung, da es sich den entscheiden Vorteil der Compiler-Sprachen zunutze macht.

Anwendung

Seit dem Release von WebAssembly sind damit schon viele innovative und interessante Anwendungen entstanden. Durch die Funktionalität von WebAssembly lassen sich nicht nur neue Apps – welche in der Lieblings-Compiler-Sprache des Entwicklers geschrieben werden können – über den Browser ausführen, sondern auch sonstige Desktop-Anwendungen durch einige Anpassungen problemlos darüber laufen. Auch können «alte», längst nicht mehr oft verwendete Programme oder Games im Browser ausgeführt werden, womit neues Interesse an ihnen geweckt würde und sie wieder unter die Leute kämen. Als Beispiel: Jemand hat sich die Mühe gemacht, das früher sehr beliebte Windows 95 mit WebAssembly wiederzubeleben.

Interessante Links:

WebAssembly Repertoire auf Github