HeadlinesBriefing HeadlinesBriefing.com

NetWasm: C# zu kleinem eigenständigem Wasm mit WASI

Hacker News •
×

NetWasm ist ein unabhängiger .NET-Compiler, eine Kernbibliothek, eine Laufzeitumgebung und ein SDK, das C# und .NET CIL direkt zu WebAssembly kompiliert. Anders als andere Ansätze überführt NetWasm weder die Desktop-CLR, Mono, dotnet.js noch Anwendungs-DLLs in die Produktion, weshalb die resultierenden Module klein und eigenständig bleiben.

In einem gemessenen Vergleich mit derselben print-42-Arbeitslast erzeugte NetWasm mit seinem präzisen Compact-Garbage-Collector eine WASI-Preview-2-Komponente mit 47.895 Byte. Ein auf Größe optimierter Rust-1.95.0-Build kam auf 53.635 Byte. Das sind 10,7 % weniger unkomprimiert und 19,5 % weniger mit Brotli-11. Der NetWasm-Wert entspricht seiner standardmäßigen Release-Veröffentlichung, während der Rust-Build die dokumentierten Größeneinstellungen von Cargo verwendet. Binaryens wasm-opt läuft innerhalb der NetWasm-Pipeline, ohne dass zusätzlich etwas installiert werden muss.

Bei Allokations- und Garbage-Collection-Benchmarks war NetWasm außerdem schneller als Mono AOT, das aus demselben C#-Quellcode kompiliert und unter Wasmtime ausgeführt wurde. Die gesamte Transaktionszeit sank um 26 %, die Zeit für den Durchlauf des erhaltenen Objektgraphen um 38 % und die Zeit für UI-Churn um 40 %. Die Werte sind Mediane aus 15 Läufen auf einem Apple M1 Max, wobei jeder Lauf mit dem Ergebnis von Desktop-.NET abgeglichen wurde.

Die Basislinie von 46,7 KiB ist keine Grenze. NetWasm unterstützt C# 15, JavaScript-Module, Web Workers, statische .a-Interop, WIT- und WASI-P2-Komponenten, Expression Trees, die Bibliotheken HTTP, JSON, XML und Regex sowie wasm64. Projekte lassen sich über die übliche dotnet-CLI bauen, ausführen, veröffentlichen und testen.

Quelle: Hacker News · Zusammengefasst von HeadlinesBriefing