Zurück zum Blog

Folgen und abonnieren

Nur auf Englisch verfügbar

Diese Seite ist momentan nur auf Englisch verfügbar. Wir entschuldigen uns für die Unannehmlichkeiten. Bitte besuchen Sie diese Seite später noch einmal.

AssemblyScript: Die Computing-Sprache der Zukunft

Aaron Turner

Senior Engineer, Fastly

Hinweis: Das AssemblyScript SDK (@fastly/as-compute) für Compute@Edge wurde zugunsten des aktuelleren und funktionsreicheren JavaScript SDK (@fastly/js-compute) eingestellt.

Hallo, ich bin Aaron Turner, Senior Software Engineer für unsere Serverless-Compute-Umgebung Compute@Edge und Mitglied des AssemblyScript Kernteams. In unserem letzten Update zu Compute@Edge haben wir angekündigt, dass wir jetzt auch AssemblyScript unterstützen. Heute wollen wir uns genauer mit dieser relativ neuen Programmiersprache beschäftigen. Ironischerweise sehe ich den besten Einstieg in dieses Gespräch in einer anderen Sprache: JavaScript.

JavaScript ist eine der gängigsten Programmiersprachen. Sie ist aber nicht für alle Anwendungsfälle gleich gut geeignet – zum Beispiel für das Ausführen von Logik auf der Edge. Die Nachteile liegen vor allem darin, dass JavaScript eine dynamisch typisierte, interpretierte Sprache ist, zu deren Ausführung eine Laufzeitumgebung erforderlich ist.

JavaScript Laufzeitumgebungen müssen hochgradig optimiert sein und sich Techniken wie der Just-in-Time-Kompilierung bedienen, um JavaScript im günstigsten Fall auf ein Niveau zu bringen, das an statisch typisierte, kompilierte Sprachen heranreicht. Laufzeitumgebungen wie V8 leisten erstaunliche Arbeit, wenn es darum geht, JavaScript mit einem vernünftigen Ressourceneinsatz auszuführen. Besser für die Performance wäre es jedoch, keine dynamisch typisierte oder interpretierte Sprache zu verwenden. Wie wäre es also, wenn wir ein ähnliches Entwicklererlebnis wie in JavaScript, aber mit den Vorteilen einer statisch typisierten, kompilierten Sprache haben könnten?

Ein Teil der Lösung liegt in TypeScript, das JavaScript um Typen erweitert und damit Typsicherheit in JavaScript Anwendungen einführt. TypeScript ist unter JavaScript Entwicklern weit verbreitet: Knapp 80 % der JavaScript Entwickler nutzen TypeScript bereits oder wollen die Sprache erlernen. Nur leider bietet TypeScript nicht alle Vorteile einer kompilierten Sprache: Es prüft zwar den Code, entfernt aber die Typen, um reines JavaScript und keine vollständig kompilierte Binärdatei zu erzeugen.

Die Lösung: AssemblyScript

AssemblyScript ist eine Variante von TypeScript, das WebAssembly Binärdateien erzeugt, wie sie auch für Compute@Edge von Fastly verwendet werden. WebAssembly ist eine neue Technologie, die von allen gängigen Browsern unterstützt wird. Im Vergleich zu JavaScript macht WebAssembly Performance kalkulierbar, wodurch es sich hervorragend für rechenintensive Aufgaben eignet. WebAssembly ist außerdem äußerst portabel, da es problemlos in Paketverzeichnissen wie npm verteilt und sowohl im Browser als auch in eigenständigen Laufzeitumgebungen wie Lucet ausgeführt werden kann.

AssemblyScript erfordert zwar eine strengere Typisierung als TypeScript, hält sich aber so nah wie möglich an die Syntax und Semantik von TypeScript. Die meisten JavaScript Entwickler kommen also mit AssemblyScript ganz gut zurecht. Außerdem ist AssemblyScript eine hervorragende Ergänzung für das moderne JavaScript Ökosystem. Der AssemblyScript Compiler ist beispielsweise auf npm erhältlich, ebenso wie gängige AssemblyScript Tools und Bibliotheken wie as-pect. AssemblyScript Dateien verwenden auch die TypeScript Dateierweiterung „.ts“ und enthalten die richtigen Typisierungen, damit AssemblyScript auf TypeScript Tools wie den TypeScript Linter zurückgreifen kann. Mit den richtigen kleinen Anpassungen eignet sich AssemblyScript sogar für den TypeScript Compiler.

Das sind aufregende Neuigkeiten für JavaScript Entwickler, denn jetzt können sie mit wenig Aufwand eine neue Sprache erlernen (AssemblyScript zu lesen und zu schreiben fällt relativ einfach), mit der sie WebAssembly Code programmieren und dabei bestehende Tools aus einem JavaScript Workflow nutzen können. In der WebAssembly Community gilt AssemblyScript oft als guter Einstiegspunkt in WebAssembly, da es zahlreichen Entwicklern, die bereits Webanwendungen programmieren, das Erlernen von WebAssembly erleichtert. Selbst für Anfänger, die mit JavaScript oder TypeScript wenig vertraut sind, ist AssemblyScript eine gute Wahl, wenn WebAssembly Code programmiert werden soll. 

Zum gegenwärtigen Zeitpunkt gibt es bei AssemblyScript aber noch einige Schwachpunkte, die Sie berücksichtigen sollten.

Die Wachstumsschmerzen von AssemblyScript im Jahr 2020

AssemblyScript ist eine noch recht junge Sprache und deshalb noch nicht vollständig ausgereift. Zwei alltägliche Sprachfunktionen, die in AssemblyScript fehlen, sind zum Beispiel die Unterstützung von Closures und RegEx. Das Fehlen von Closures erschwert es, Funktionen an andere Funktionen zu übergeben (eine gängige Praxis in JavaScript und TypeScript). Das Fehlen von RegEx macht es schwierig, Strings zu parsen und Änderungen vorzunehmen, was für einige Anwendungen wichtig wäre. Zum Glück befinden sich diese beiden Sprachfunktionen für AssemblyScript bereits in der Entwicklung.

Und weil AssemblyScript noch sehr jung ist, sind auch seine Community und sein Ökosystem noch sehr jung. Je größer die Community wird, desto selbstverständlicher sollten Portierungen gängiger JavaScript und TypeScript Bibliotheken zu AssemblyScript werden. Diese Portierungen könnten dann über gängige JavaScript Paketverzeichnisse wie npm freigegeben werden. Außerdem sehen wir bereits sehr beeindruckende Alternativlösungen zu gängigen JavaScript Bibliotheken für AssemblyScript. Zum Beispiel ist „as-pect“ ein Unit-Test-Framework für AssemblyScript, das viel von Jest übernommen hat. „as-wasi“ ist eine High-Level-Bibliothek, die auf WASI (dem WebAssembly System Interface) beruht und die Interaktion mit Systemressourcen (Dateisystem, Zeit usw.) wie der Node API ermöglicht.

Ist AssemblyScript das Richtige für Sie?

Zuerst möchte ich darauf eingehen, wofür AssemblyScript meiner Meinung nach nicht verwendet werden sollte. Wie bereits mehrfach in diesem Artikel erwähnt, ist AssemblyScript kein Ersatz für Ihre aktuellen JavaScript oder TypeScript Anwendungen. Sie sollten nicht erwarten, dass Sie Ihre „ts-node“-App oder ein JavaScript Snippet, das sich auf gängige globale Funktionen im Browser (wie „window“) verlässt, einfach durch den AssemblyScript Compiler laufen lassen können, um WebAssembly „umsonst“ zu bekommen. 

Aufgrund des sehr geringen Lernaufwands ist AssemblyScript ein hervorragender Einstiegspunkt für die Portierung von bestehendem JavaScript oder TypeScript Code und dessen Abhängigkeiten zu WebAssembly. Ihre neue AssemblyScript Anwendung und die portierten Abhängigkeiten (falls noch keine alternativen Abhängigkeiten vorhanden sind) lassen sich mit dem AssemblyScript Compiler nämlich für WebAssembly kompilieren. Wenn Ihre Anwendung oder Bibliothek nicht von globalen Plattformfunktionen abhängt (oder mit anderen Worten: Ihr JavaScript oder TypeScript „isomorph“ oder „universell“ ist), kann die Portierung sogar so einfach sein wie das Hinzufügen oder Ändern einiger Codetypen. Wenn Ihr Projekt oder seine Abhängigkeiten plattformspezifische globale Funktionen verwenden, wird dies schon schwieriger, da Sie diese Funktionen neu implementieren oder über Ihre Host-Laufzeitumgebung importieren müssen. In einem späteren Blogpost verraten wir Ihnen, wie Sie JavaScript Anwendungen zu AssemblyScript portieren können.

Wenn Sie kompletter Neuanfänger sind, eignet sich AssemblyScript auch hervorragend für den Einstieg in WebAssembly. Sollten Sie oder Ihr Team bereits Erfahrung mit JavaScript oder TypeScript haben, wird Ihnen das Erlernen von AssemblyScript besonders leicht fallen. Die Ähnlichkeiten in der Syntax und der moderne JavaScript Workflow erleichtern Ihnen den Einstieg in AssemblyScript und die Nutzung bei aktuellen Projekten. Wenn Sie mit JavaScript oder TypeScript noch gar nicht vertraut sind, bietet AssemblyScript zusätzliche Funktionen, um den Lernaufwand zu verringern, beispielsweise einfachen Zugriff und unterstützende APIs für die Konzepte, die WebAssembly ausmachen. Dies dürfte es Ihnen erleichtern, Code auszuführen und Daten in Ihrer Anwendung weiterzugeben, wenn sie als WebAssembly Modul ausgeführt wird.AssemblyScript ist eine aufregende neue Sprache, und wir freuen uns auf eine wachsende Community.

Mehr zum Thema erfahren Sie in meinem Vortrag bei der Onlinekonferenz „Web Directions Code 2020“ (siehe unten). AssemblyScript erweist sich hoffentlich nicht nur für Fastly, sondern auch für Sie und unsere Kunden als nützlich. Wir werden AssemblyScript jedenfalls weiterhin im Auge behalten und hoffen, dass Sie dasselbe tun.