AssemblyScript - AssemblyScript

AssemblyScript
AssemblyScript-Logo 2020.svg
Paradigma Multi-Paradigma : funktional , generisch , imperativ , objektorientiert
Familie JavaScript , TypeScript
Entworfen von Daniel Wirtz, Max Graey
Entwickler Das AssemblyScript-Projekt
Erstmals erschienen 2017 ; vor 4 Jahren  ( 2017 )
Stabile Version
0,18,29 / 28. April 2021 ; Vor 0 Tagen  ( 2021-04-28 )
Schreibdisziplin Statisch
Umfang Lexikalisch
Lizenz Apache License 2.0
Dateinamenerweiterungen .ts
Dateiformate Text , Unicode (Quelle)
.wasm Binärformat (Objekt)
Webseite www .assemblyscript .org
Wichtige Implementierungen
asc (AssemblyScript-Compiler)
Beeinflusst von
JavaScript , TypeScript , WebAssembly

AssemblyScript ist eine TypeScript- basierte Programmiersprache (im Wesentlichen JavaScript mit statischen Typen), die für WebAssembly optimiert und mit asc , dem Referenz-AssemblyScript-Compiler , zu WebAssembly kompiliert wurde. Es wird vom AssemblyScript-Projekt und der AssemblyScript-Community entwickelt.

Überblick

Im Jahr 2017 verbreitete sich die Verfügbarkeit von Unterstützung für WebAssembly , eine Standarddefinition für einen Bytecode auf niedriger Ebene und eine zugehörige virtuelle Maschine , unter den großen Webbrowsern und bot Webentwicklern ein Kompilierungsziel auf niedrigerer Ebene und möglicherweise mit höherer Leistung für die Clientseite Programme und Anwendungen, die in Webbrowsern ausgeführt werden sollen, zusätzlich zu der interpretierten (und normalerweise auch dynamisch kompilierten ) JavaScript- Web-Skriptsprache. Mit WebAssembly können Programme und Code vorab statisch kompiliert werden, um in Webbrowsern mit potenziell nativer oder " Bare-Metal " -Leistung ausgeführt zu werden, ohne den Aufwand für die Interpretation oder die anfängliche Latenz der dynamischen Kompilierung.

Mit der Einführung von WebAssembly in den wichtigsten Webbrowsern fügte Alon Zakai, Entwickler von Emscripten , einem LLVM / Clang- basierten C- und C ++ - Compiler, der auf eine Teilmenge von JavaScript mit dem Namen asm.js abzielte , die Unterstützung für WebAssembly als Kompilierungsziel in Emscripten hinzu C- und / oder C ++ - Programme und Code, die direkt in WebAssembly kompiliert werden sollen.

Mit Emscripten und ähnlichen Compilern können Webentwickler neuen Code schreiben oder vorhandenen Code portieren , der in einer höheren Sprache wie C, C ++, Go und Rust to WebAssembly geschrieben ist, um eine potenziell höhere Ausführungsleistung auf nativer Ebene in Webbrowsern zu erzielen Dies zwingt Webentwickler, die daran gewöhnt sind, clientseitige Web-Skripte und -Anwendungen in JavaScript (der de facto clientseitigen Programmiersprache in Webbrowsern) zu entwickeln, eine andere Sprache für das Targeting von WebAssembly als JavaScript zu verwenden. AssemblyScript als eine Variante von TypeScript, die syntaktisch nahezu identisch mit JavaScript ist, ermöglicht Entwicklern, die an JavaScript gewöhnt sind, die Verwendung einer vertrauten Sprache für das Targeting von WebAssembly, wodurch möglicherweise die Lernkurve einer separaten Sprache reduziert wird, die zu WebAssembly kompiliert werden kann. Da AssemblyScript als optimale Ausgangssprache für WebAssembly konzipiert wurde, spiegelt das Typensystem der Sprache das von WebAssembly genau wider, und die Sprache bietet Standardfunktionen auf niedriger Ebene (normalerweise als Makros implementiert ), die direkt WebAssembly-Anweisungen zugeordnet sind, die spezielle Hardware widerspiegeln Anweisungen, die von modernen Prozessoren wie SIMD- und Vektoranweisungen bereitgestellt werden, und speziellere Anweisungen wie clz (Anzahl der führenden Nullbits zählen), ctz (Anzahl der nachfolgenden Nullbits) und popcnt ( Anzahl der Populationen ), die in Anwendungen wie Verschlüsselungs- und kryptografischen Bibliotheken verwendet werden.

Der AssemblyScript-Compiler asc basiert auf Binaryen, einer von Alon Zakai entwickelten Back-End-Compiler-Toolchain, die in WebAssembly kompiliert wird und Bestandteil von Emscripten ist (das auch Zakai entwickelt hat). Der ASC- Compiler und andere Tools sind über den npm- Paketmanager verfügbar .

Während WebAssembly ursprünglich für die Ausführung in Webbrowsern konzipiert wurde, hat die Entwicklung von WASI (WebAssembly System Interface), einer Community-Spezifikation für eine Standard- API , die WebAssembly-Programmen den Zugriff auf Systemaufrufe und andere Betriebssystemfunktionen ermöglicht , zur Entwicklung der WebAssembly- Laufzeit geführt Umgebungen aus Projekten wie Wasmtime und Wasmer, die WebAssembly ermöglichen, und Code, der in Sprachen wie AssemblyScript geschrieben wurde, die dazu kompiliert werden können, können auch in Nicht-Web-Umgebungen ausgeführt werden.

Kompatibilität mit JavaScript

AssemblyScript wird zu WebAssembly-Modulen kompiliert, die dann mithilfe von Standard-JavaScript-Methoden wie WebAssembly.compileStreaming und WebAssembly.instantiateStreaming genau wie Standard-WebAssembly-Binärdateien in clientseitige Webseiten instanziiert werden können . Die Datenübertragung zwischen JavaScript und den kompilierten WebAssembly-Modulen sowie Funktionsaufrufe zwischen JavaScript und WebAssembly sind dann dieselben wie für jedes WebAssembly-Modul.

Da die AssemblyScript-Sprache hauptsächlich eine Teilmenge von TypeScript ist (sie enthält auch eine kleine Obermenge von TypeScript), ist es möglich, ein AssemblyScript-Programm mithilfe der Teilmenge zu schreiben und es sowohl mit einfachem JavaScript als auch mit WebAssembly zu kompilieren, wobei sowohl der TypeScript-Compiler als auch der AssemblyScript-Compiler verwendet werden , beziehungsweise. Dies ermöglicht portablen Code, der sowohl in JavaScript- als auch in WebAssembly-Umgebungen ausgeführt wird.

Verwendung

Ab März 2021 werden ungefähr 3000 Projekte, die auf GitHub gehostet werden, ganz oder teilweise in AssemblyScript geschrieben, mit ungefähr 5000 Downloads des AssemblyScript-Compilers pro Woche über npm .

Rezeption

Der führende Emscripten-Entwickler Alon Zakai hat AssemblyScript als „mit Blick auf WebAssembly und Codegröße entwickelt“ charakterisiert. Es ist keine vorhandene Sprache, die wir für einen neuen Zweck verwenden, aber es ist eine Sprache, die für WebAssembly entwickelt wurde. Es hat eine großartige wasm-opt Integration - tatsächlich ist es damit aufgebaut - und es ist sehr einfach, eine gute Codegröße zu erhalten. “

Der norwegische Musiker Peter Salomonsen demonstrierte in einem Vortrag des WebAssembly Summit 2020 mit dem Titel „WebAssembly Music“ die Verwendung von AssemblyScript für die Echtzeitkompilierung von WebAssembly in der elektronischen Live-Musiksynthese Low-Level-Kontrolle; Es ist wie eine Hochsprache, aber Sie haben das Gefühl auf niedriger Ebene, und Sie können sogar direkte WebAssembly-Eigenschaften schreiben, wenn Sie möchten. “

Aaron Turner, Senior Engineer bei Fastly , einem Cloud-Computing-Dienstleister, der WebAssembly für die serverlose Compute @ Edge-Computerumgebung des Unternehmens verwendet, schrieb in einer Überprüfung von AssemblyScript:

Während AssemblyScript eine strengere Eingabe erfordert als TypeScript, bleibt es so nah wie möglich an der TypeScript-Syntax und -Semantik - was bedeutet, dass die meisten JavaScript-Entwickler die Verwendung von AssemblyScript als angenehm empfinden - und ermöglicht eine hervorragende Unterstützung für das moderne JavaScript-Ökosystem. Zum Beispiel ist der AssemblyScript-Compiler auf npm verfügbar , ebenso wie gängige AssemblyScript-Tools und -Bibliotheken wie as-pect . AssemblyScript-Dateien verwenden auch die Dateierweiterung ' .ts ' von TypeScript und enthalten die richtigen Typisierungen, damit AssemblyScript auf TypeScript-Tools wie den TypeScript-Linter zurückgreifen kann. Mit den richtigen kleinen Verbesserungen kann AssemblyScript sogar mit dem TypeScript-Compiler verwendet werden.

Dies ist sehr aufregend, da AssemblyScript JavaScript-Entwicklern einen Einstiegspunkt mit geringem Overhead bietet, um eine Sprache für die Ausgabe von WebAssembly zu erlernen - sowohl im Hinblick auf das Lesen und Schreiben von AssemblyScript als auch auf die Verwendung vieler bereits vorhandener Tools Dies ist möglicherweise bereits im Workflow eines JavaScript-Entwicklers enthalten. AssemblyScript wird in der WebAssembly-Community häufig als hervorragendes Gateway zum Aufnehmen von WebAssembly bezeichnet. Es bietet einer großen Gruppe von Entwicklern, die bereits Anwendungen für das Web schreiben, einen Pfad zum Aufnehmen und Erlernen von WebAssembly. Selbst wenn Sie bei Null anfangen und mit JavaScript oder TypeScript nicht besonders vertraut sind, ist AssemblyScript eine gute Wahl, wenn Sie eine Sprache für die Ausgabe von WebAssembly auswählen.

Turner führte jedoch die relative Neuheit der Sprache und damit das Fehlen einiger Funktionen, die in größeren, komplexeren und etablierten Programmiersprachen verfügbar sind, als mögliche Mängel der Sprache an.

Siehe auch

Verweise

Externe Links