WebAssembly 30.01.2018, 17:22 Uhr

C# mit Hilfe von Mono nach WebAssembly kompilieren

Seitdem alle wichtigen Webbrowser WebAssembly (WASM) unterstützen, können Entwickler auf eine neue Plattform für ihre Anwendungen setzen. Ein Team von Open-Source-Entwicklern arbeitet derzeit an einer Möglichkeit, C#-Code nach WASM zu kompilieren.
Die Standard-Toolchain für WebAssembly-Anwendungen setzt auf das Kompilieren von C/C++-Code nach WebAssembly. Programmiersprachen wie C# sind von der WebAssembly Group nicht vorgesehen. Allerdings arbeitet die  Community des Mono-Projektes an zwei unterschiedlichen Ansätzen WebAssembly zu unterstützen.
Der erste Ansatz nutzt Monos IL-Interpreter um verwalteten Code (managed code) wie etwa C#-Code auszuführen. Ziel dieses Ansatzes ist die Unterstützung von Rapid Prototyping und Rapid Development.
Der zweite Ansatz setzt darauf, bereits fertigen Code in eine WASM-Datei zu kompilieren, welcher nativ auf jedem Browser ausgeführt werden kann, der WebAssembly unterstützt. Um eine WASM-Datei zu erzeugen bietet das Mono-Projekt ein neues Werkzeug namens mono-wasm an. Es nimmt C#-Assemblies entgegen und generiert daraus LLVM-Bitcode für das LLVM-Backend von WebAssembly. Die generierte WASM-Datei enthält alle Abhängigkeiten, welche für die Ausführung des C#-Programms erforderlich sind, inklusive der Bibliothek mscorlib.dll und der Mono-Laufzeitumgebung.
Obwohl die Mono-Lösung bereits etliches an Entwicklungszeit hinter sich hat, betont Haupt-Entwickler Laurent Sansonetti, dass mono-wasm noch immer im Stadum einer Pre-Alpha-Version ist. In absehbarer Zeit soll eine reguläre Alpha-Version fertiggestellt werden. Auf etwas längere Sicht ist geplant, die erzeugten WASM-Dateien zu verkleinern -- noch ist eine schlichte Hallo-Welt-Anwendung zehn Megabyte groß. Nächstes Ziel ist dann, dass der Mono-Compiler WASM32 direkt erzeugen kann, außerdem soll die Zusammenarbeit von C# und JavaScript-Code verbessert werden.
Das Projekt wird gerade sehr eifrig weiterentwickelt. Interessierte Entwickler finden das Projekt auf GitHub unter https://github.com/lrz/mono-wasm
Quelle: InfoQ


Das könnte Sie auch interessieren