Suche
JavaScript-Experte Eric Elliot zur Zukunft der Web-Entwicklung

Turbo-Boost für JavaScript: Eric Elliott über WebAssembly

Moritz Hoffmann

(c) Shutterstock.com / billdayone

Vor wenigen Tagen gab Brendan Eich, Chief Technical Officer bei Mozilla, Einzelheiten über das Projekt WebAssembly (wasm) bekannt, das das Software-Unternehmen zusammen mit Microsoft und Google entwickelt. Dabei handelt es sich um ein Binärcodeformat, das zunächst für C- und C++-Programmierer konzipiert wurde. Für den JavaScript-Veteran Eric Elliot, u.a. Autor von „Programming JavaScript Applications“, war das ein Grund, sich den geplanten neuen Standard für die Web-Entwicklung genauer anzusehen.

Laut Ankündigung soll das wasm-Format 20 Mal schneller als JavaScript dekodiert werden können, da WebAssembly nicht wie JavaScript geparst werden muss.  Zudem stellt WebAssembly-Code eine neue Binärsprache dar, die nach Elliots Einschätzung zu einer besseren Browser-Performance führen wird. Die kompilierten Binary Bundles werden leichter zu komprimieren sein und für eine schnellere Auslieferung sorgen.

Als Kompilierungsziel erhalten andere Sprachen mit wasm „first class binary support“, um im gesamten Web-Plattform-Stack durchzustarten. Elliott zufolge wird WebAssembly somit die Sprachvielfalt in der Web-Entwicklung erhöhen. Was aber bedeutet das für JavaScript?

Back to the roots…

Bevor Elliott die Frage nach der Konkurrenz zu JavaScript beantwortet, nimmt er uns mit auf eine Zeitreise in die MS-DOS-Ära, genauer, ins Jahr 1991. Damals wollte Elliot zum Schreiben eines Text-Adventure-Games aus bloßem Überdruss an BASIC und Pascal auf C zurückgreifen. Ohne den Kompiler Turbo C++ aber musste sich Elliott etwas einfallen lassen. Also „kompilierte“ er die verwendete Assembly-Sprache zur Ausführung mit der DOS „Debug“-Kommandozeile:

If that sounds crazy, believe me, it was. I’m betting even those of you who used DOS probably didn’t realize you could use debug to assemble instructions, as well as disassemble (reverse engineer) existing code. Sound cool? I hated it.

Entscheidend an der Geschichte aus alten Zeiten ist für Elliott die Tatsache, dass im Borland Turbo C++-Paket, auf das er so lange gespart hatte, auch ein entsprechender Turbo-Assembler enthalten war. Gegen die allgemeine Abneigung, sich mit schwierigen und meist umständlichen Hardware-nahen Programmiersprachen zu beschäftigen, ist Elliot überzeugt:

Sometimes you want to get to the bare metal, or as close to it as you can get without melting your brain.

JavaScript und seine Lücken

Und hier kommt wieder JavaScript ins Spiel. So flexibel die von Elliott explizit gelobte Skriptsprache auch sein mag, sie ist abstrakt und komplex. Selbst der Ausdruck einfacher Dinge in JavaScript mache die Sprache komplizierter, insofern dafür neue Features geschrieben werden müssen.

Dagegen könnten in WebAssembly anhand eines Sets an low-level-Bausteinen sehr einfache bis primitive Komponenten gebaut werden, ganz ohne automatischen Garbage Collector oder ein komplexes Objektsystem. Es gehe dabei mehr um Mechanik als um Sprache:

In fact, it may be useful not to think of WebAssembly as a language at all. It’s more like a machine, vaguely shaped like a Turing…

Auch für die Web-App-Entwicklung, das unbestrittene Steckenpferd von JavaScript, sieht Elliott Potentiale bei WebAssembly. Keineswegs gehe es um Konkurrenz, schließlich sei mit JavaScript so ziemlich jeder Web-App-Wunsch zu verwirklichen. Und dennoch bleiben Dinge, die man mit JavaScript einfach nicht macht:

WebAssembly fills in the gaps that would be awkward to fill with JavaScript.

So war es beispielsweise bislang nicht möglich, den Großteil des Codes in einer High-Level-Sprache wie JavaScript zu schreiben und trotzdem von Zeit zu Zeit auf eine spezialisierte, Hardware-nahe Assemblersprache zurückzugreifen, wenn man mal dringend einen „Boost“ nötig hat. Im größeren Zusammenhang will Elliott WebAssembly als Erweiterung zu JavaScript verstanden wissen, insofern beispielsweise Performance-kritische Elemente in wasm implementiert und wie eine JavaScript-Modul importiert werden können.

Was tun mit WebAssembly?

Im eben erwähnten Boost-Faktor von wasm erkennt Elliott durchaus vielseitige Einsatzmöglichkeiten für WebAssembly. Die neue Binärcode-Sprache könnte sich bestens eignen, um Threads und SIMD (Single Instruction, Multiple Data) auszudrücken, in denen mehrere nebeneinander gelegte Datenströme mit einem Befehl gesteuert werden können:

That means fat, parallel processing pipelines for your realtime video stream effects processor.

WebAssembly könne desweiteren als Brückenkopf dienen, um andere Sprachen auf Web-Plattformen zu transportieren. Für Eric Elliott stehen mit der UnrealEngine und Unity3D zwar bereits die besten JavaScript-Compiler zur Verfügung. WebAssembly aber bietet ein anderes und eben zu diesem Zweck ausgerichtetes Kompilierungsziel als JavaScript:

I’d bet that the process of writing a compiler for WebAssembly will be somewhat less complicated than writing a compiler for JavaScript, simply because there’s a better mapping from the source language features to the target AST.

WebAssembly wird Elliots Einschätzung zufolge die Vielfalt älterer Programmiersprachen in der Web-Entwicklung erhöhen, vor allem aber auch die Entwicklung neuer Programmiersprachen voranzubringen:

The future of the web platform has never looked brighter. You’d better pull out your shades.

WebAssembly befindet sich noch in der Planungsphase. Auf der Seite der W3C Community Group kann man sich über das Projekt auf dem Laufenden halten lassen.

Aufmacherbild: von Shutterstock.com / Urheberrecht: billdayone

 
Geschrieben von
Moritz Hoffmann
Moritz Hoffmann
Moritz Hoffmann hat an der Goethe Universität Soziologie sowie Buch- und Medienpraxis studiert. Er lebt seit acht Jahren in Frankfurt am Main und arbeitet in der Redaktion von Software und Support Media.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: