WebAssembly ist eine Assembler-ähnliche Low-Level-Sprache mit kompaktem Binärformat, die in Webbrowsern mit nahezu nativer Leistung ausgeführt werden kann. Parellel bietet WebAssembly ein portables Kompilierungsziel für C/C++, C#, Rust, Go, Kotlin, Swift und weitere Programmiersprachen.
WebAssembly wird nicht nur als Möglichkeit gepriesen, die Performance von Webanwendungen zu optimieren. Das Browser-Tool soll auch dazu beitragen, dass andere Programmiersprachen als JavaScript eingesetzt werden, um Webapplikationen zu entwickeln. WebAssembly wird von Google, Mozilla, Apple und Microsoft unterstützt, die die Technologie in ihren Browser-Engines einsetzen.
14 WebAssembly-Projekte, die Sie kennen sollten
WebAssembly hat darüber hinaus auch zur Entwicklung einer Reihe neuer Technologien beigetragen - darunter auch völlig neue Programmiersprachen, die sich seine Leistungsfähigkeit zunutze machen. Die folgenden vierzehn Compiler- und Programmiersprachen-Projekte, die auf WebAssembly fußen, sollten Sie kennen.
1. Binaryen
Binaryen ist eine Compiler-Toolchain-Infrastrukturbibliothek für WebAssembly. Sie ist in C++ geschrieben und soll es möglichst einfach, effektiv und schnell gestalten, nach WebAssembly zu kompilieren. Binaryen bringt eine C-API in einem einzigen Header mit und kann über JavaScript verwendet werden. Inputs werden in WebAssembly-ähnlicher Form akzeptiert. Für Compiler, die das bevorzugen, kann auch ein allgemeiner Control Graph eingesetzt werden.
Die interne Intermediate Representation (IR) von Binaryen verwendet kompakte Datenstrukturen und nutzt alle CPU-Kerne, um Code zu generieren und gleichzeitig zu optimieren. Die IR lässt sich auch leicht zu WebAssembly kompilieren, da sie im Wesentlichen ein Subset davon darstellt. WebAssembly-spezifische Optimierungen verbessern sowohl die Codegröße als auch die -geschwindigkeit. Das macht Binaryen selbst auch als Compiler-Backend nützlich.
Binaryen steht über GitHub zum Download bereit.
2. Blazor WebAssembly
Bei Blazor WebAssembly handelt es sich um ein Framework, um interaktive, Client-seitige Single-Page-Web-Apps mit .NET zu erstellen - und diese dann in modernen Browsern auszuführen. Plug-ins oder Code in andere Sprachen neu zu kompilieren ist dabei nicht erforderlich. Die Runtime ermöglicht dem .NET-Code den Zugriff auf Browserfunktionen über die JavaScript-APIs von WebAssembly.
Wenn eine Blazor-WebAssembly-Anwendung im Browser ausgeführt wird, werden C#-Code-Dateien und Razor-Dateien in .NET-Assemblies kompiliert, die zusammen mit der .NET-Laufzeitumgebung in den Browser heruntergeladen werden. Da der .NET-Code auf WebAssembly in der JavaScript-Sandbox des Browsers ausgeführt wird, ist er vor bösartigen Aktionen auf dem Client-Rechner geschützt. Blazor-WebAssembly-Anwendungen können Standalone oder mit serverseitigem Support bereitgestellt werden.
Ein Tutorial für die ersten Schritte mit Blazor finden Sie hier.
3. Cheerp
Cheerp aus dem Hause Leaning Technologies ist als Enterprise-tauglicher C/C++-Compiler für das Web positioniert. Er kompiliert C und C++ (bis hin zu C++ 17) in WebAssembly, JavaScript oder eine Kombination aus beidem. Cheerp ist in die LLVM/Clang-Infrastruktur integriert und verfügt über benutzerdefinierte Optimierungen, um die Performance zu verbessern und die Größe des kompilierten Outputs zu minimieren. Der Compiler wird in erster Linie verwendet, um bestehende C/C++-Bibliotheken und -Anwendungen auf HTML5 zu portieren. Er kann aber auch genutzt werden, um Webanwendungen und WebAssembly-Komponenten zu schreiben. Cheerp wird mit quelloffenen und kommerziellen Lizenzen angeboten.
Cheerp können Sie über die Webseite von Leaning Technologies herunterladen.
4. CheerpJ
Dieser LLVM-basierte Compiler wird als "Java-Compiler für das Web" vermarktet und konvertiert jede Java-Client-Anwendung in WebAssembly, JavaScript und HTML. Das ermöglicht es, diese in modernen Browsern auszuführen. Dabei nutzt CheerpJ drei Komponenten: einen AOT-Compiler (AOT = ahead-of-time), eine WebAssembly- und JavaScript-Runtime sowie JavaScript-DOM-Interoperabilitäts-APIs, um von Java auf das DOM zuzugreifen. Mit CheerpJ können auch JAR-Archive mit Hilfe des AOT-Compilers kompiliert werden. Der Compiler benötigt keine serverseitige Unterstützung.
Auch CheerpJ steht auf der Webpräsenz von Leaning Technologies zum Download zur Verfügung.
5. Emscripten
Diese Open-Source-Compiler-Toolchain kompiliert C und C++ oder jede andere Sprache, die die LLVM-Compilertechnologie verwendet, in WebAssembly für den Einsatz im Web, in Node.js oder in einer Wasm-Laufzeitumgebung wie Wasmer. Emscripten wurde bereits eingesetzt, um eine Reihe realer Codebasen in WebAssembly zu konvertieren - darunter auch kommerzielle, wie die Unreal Engine 4 und die Unity-3D-Plattform. Emscripten unterstützt die C- und C++- Standardbibliotheken, C++ Exceptions sowie OpenGL/WebGL Grafikbefehle. Das Emscripten SDK, das zur Installation der Emscripten Toolchain (emcc, LLVM, etc.) verwendet wird, ist kompatibel mit Linux, MacOS und Windows.
Emscripten können Sie über die offizielle Webseite des Projekts herunterladen.
6. Extism
Extism ist ein Plug-in-System, um WebAssembly-Extensions innerhalb einer App auszuführen. Das Ziel: die gesamte Software programmierbar zu machen. Häufige Anwendungsfälle für Extism sind etwa
Funktionen zu Befehlszeilen-Tools hinzuzufügen,
benutzerdefinierte Funktionen in einer Datenbank zu erstellen,
No-Code-Anwendungserweiterungen und
Extensions für Content-Management-Systeme zu entwickeln.
Mit Extism können Entwickler idiomatische Host-SDKs für Programmiersprachen verwenden - beispielsweise Go, Ruby, Python, Rust und C++.
Eine Anleitung zur Installation von Extism finden Sie hier.
7. Forest
Forest ist eine funktionale Programmiersprache, die nach WebAssembly kompiliert. Das Ziel von Forest ist es, die Entwicklung von komplexen, interaktiven und funktionalen Webanwendungen zu vereinfachen - und dabei den traditionellen Overhead dieses Ansatzes über Bord zu werfen. Seine Entwickler beschreiben Forest derzeit als "experimentelle, konzeptionelle Forschungssoftware in der Pre-Alpha-Phase".
Die Sprache bietet eine statische Typisierung, Pattern Matching, unveränderliche Datenstrukturen, mehrere Syntaxen und automatische Codeformatierung.
Zu den Designprinzipien der Forest-Programmiersprache gehören:
eine einfache Zusammenarbeit,
möglichst unkompliziertes Testing, und
eine einheitliche Struktur und Semantik.
Entwickler Nick Johnstone ist nach eigener Aussage bestrebt, seine Coding-Sprache schnell genug zu machen, um komplexe Spiele damit entwickeln zu können. Sollte das gelingen, dürften normale Web-Applikationen tatsächlich rasend schnell laufen.
Forest steht auf GitHub zum Herunterladen bereit.
8. Grain
Die Programmiersprache Grain transportiert Features akademischer und funktionaler Sprachen ins 21. Jahrhundert - wie es auf der Projekt-Website heißt. Durch die Kompilierung nach WebAssembly über die Binaryen-Toolchain und -Compiler-Infrastruktur kann Grain im Browser, auf dem Server und potenziell überall ausgeführt werden. Es gibt keine Laufzeit-Typfehler und keine Notwendigkeit für Typ-Annotationen. Die Grain-Toolchain umfasst eine CLI, einen Compiler, eine Laufzeitumgebung und eine Standardbibliothek, die in Form einer einzigen Binärdatei ausgeliefert werden. Entwickler benötigen Node.js und Yarn, um Grain aus dem Quellcode zu erstellen. Die Binärdateien sind für Linux, MacOS und Windows verfügbar.
Das Tutorial auf der offiziellen Webseite unterstützt Sie beim Einstieg in Grain.
9. JWebAssembly
JWebAssembly von I-Net Software ist ein Java-Bytecode-zu-WebAssembly-Compiler, der Java-Class-Dateien als Eingabe akzeptiert und als Output das WebAssembly-Binär- (.wasm) oder -Textformat (.wat-Datei) erzeugt. Das Ziel ist es, mit WebAssembly nativ im Browser zu laufen. Theoretisch kann JWebAssembly jede Sprache kompilieren, die sich zu Java-Bytecode kompilieren lässt, beispielsweise Clojure, Groovy, JRuby, Kotlin und Scala. Praktische Tests stehen allerdings noch aus.
JWebAssembly sollte in Kürze produktionsreif sein: Alle Meilensteine, die für die Veröffentlichung von JWebAssembly 1.0 erforderlich sind, wurden implementiert, ein Release Candidate bereits veröffentlicht. Die Roadmap von Version 1.0 sieht Features wie einen Java-Bytecode-Parser, ein Test-Framework und ein Gradle-Plugin vor.
Sie können JWebAssembly über GitHub herunterladen.
10. Pyodide
Das Pyodide-Projekt, das sich kürzlich von Mozilla unabhängig gemacht hat, kompiliert Python und den wissenschaftlichen Python-Stack in WebAssembly und bringt die Python 3.8-Laufzeitumgebung, NumPy, SciPy, Matplotlib, Scikit-learn und Dutzende anderer Pakete in den Browser. Pyodide bietet eine transparente Konvertierung von Objekten zwischen JavaScript und Python und ermöglicht Python den Zugang zu Web-APIs.
Instruktionen zu Download und Installation von Pyodide finden Sie hier.
11. Spin
Spin vom Softwareanbieter Fermyon Technologies ist ein WebAssembly-Framework für Microservices, Webanwendungen und andere serverbasierte Anwendungen. Entwickler können Spin verwenden, um WebAssembly für die Cloud zu schreiben. Dazu werden Schnittstellen für Funktionen wie die Beantwortung von HTTP-Anfragen bereitgestellt.
Mit Spin können Entwickler Sprachen wie Rust, Go, Python, Ruby, AssemblyScript, Grain, C/C++ und andere verwenden. Zudem unterstützt das Framework auch WAGI-Module (WebAssembly Gateway Interface) und das Bindle-Packaging-System. Spin befindet sich derzeit in einer frühen Preview-Version und wird derzeit noch als experimentell betrachtet.
Auch Spin wird auf GitHub gehostet.
12. TeaVM
TeaVM ist ein "Ahead-of-Time"-Compiler für Java-Bytecode, der WebAssembly und JavaScript zur Ausführung im Browser generiert. Dabei ist zu beachten, dass sich der WebAssembly-Support derzeit noch in der Experimentierphase befindet. TeaVM ermöglicht Entwicklern, Anwendungen in Java zu schreiben und sie als JavaScript auszuführen. Dabei arbeitet TeaVM mit kompilierten Class-Dateien, nicht mit Quellcode. Darüber hinaus stützt sich TeaVM auf bestehende Compiler wie javac, kotlinc und scalac, kann also Kotlin- und Scala-Code ebenso kompilieren wie Java.
Der Compiler ist in erster Linie als Werkzeug für die Webentwicklung gedacht und nicht dafür, große Java- oder Kotlin-Codebasen in JavaScript zu übersetzen. Ein Unterprojekt von TeavM ist Flavour, das als Framework dient, um Single-Page-Webanwendungen zu erstellen.
TeaVM finden Sie auf GitHub.
13. Uno-Plattform
Die UI-Plattform Uno ist eine Alternative zur Xamarin-Mobile-App-Plattform und ermöglicht .NET-Teams, Single-Codebase-Applikationen für WebAssembly, das Web, Windows, MacOS, Linux, iOS und Android zu erstellen. Dabei nutzt Uno die Mono-WASM-Laufzeit in .NET 5, um C#-Code in allen wichtigen Webbrowsern auszuführen und dient als Brücke für WinUI- und UWP-Anwendungen (Universal Windows Platform), die nativ auf WebAssembly laufen. Um Webanwendungen mit Uno zu erstellen können Entwickler auf Visual Studio oder Visual Studio Code zurücgreifen.
Die Webpräsenz zum Projekt hält eine detaillierte Anleitung für den Einstieg mit der Uno-Plattform bereit.
14. Wasmcloud
Die Application Runtime Wasmcloud nutzt WebAssembly, um compatible, portable Anwendungen zu entwickeln, die in Multi-Cloud-, Edge- und Browser-Umgebungen eingesetzt werden können.
Die Technologie soll eine nahezu native Performance bieten, wobei Sicherheit unter anderem über eine WebAssembly-Sandbox gewährleistet wird. Entwickler können mit Wasmcloud Microservices einmal in der Sprache ihrer Wahl schreiben und sie überall bereitstellen. Zu den derzeit unterstützten Sprachen gehören Rust, TinyGo und AssemblyScript. Wasmcloud wurde als Sandbox-Projekt der Cloud Native Computing Foundation (CNCF) akzeptiert.
Installationsanweisungen für wasmCloud finden Sie hier. (fm)
Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.