Μια νέα προσέγγιση στο .NET για WebAssembly

Το NetWasm επαναπροσδιορίζει τη θέση της C# στο οικοσύστημα του WebAssembly (Wasm). Σε αντίθεση με τις παραδοσιακές προσεγγίσεις όπως το Blazor, το οποίο μεταφέρει ολόκληρο το runtime και τα DLLs της εφαρμογής, το NetWasm λειτουργεί ως ένας ανεξάρτητος compiler που μετατρέπει τον CIL κώδικα απευθείας σε Wasm. Αυτή η αρχιτεκτονική επιτρέπει τη δημιουργία αυτόνομων, ελαφριών components που δεν απαιτούν το πλήρες .NET runtime για την εκτέλεσή τους.

Αρχιτεκτονική βελτιστοποίηση και garbage collection

Το κλειδί για το μικρό μέγεθος των binaries βρίσκεται στη στρατηγική «closed-world compilation». Ο compiler αναλύει το δέντρο εξαρτήσεων και ενσωματώνει μόνο τον απαραίτητο κώδικα runtime. Επιπλέον, το NetWasm προσφέρει τρεις διαφορετικές στρατηγικές διαχείρισης μνήμης (garbage collection), επιτρέποντας στους μηχανικούς να επιλέξουν μεταξύ του Compact (size-first), του NetWasmGC (throughput-first) και του Bump (one-shot jobs), ανάλογα με το προφίλ της εφαρμογής τους.

Επιδόσεις και σύγκριση με το οικοσύστημα

Σε συγκριτικά τεστ (benchmarks) που αφορούν την κατανομή μνήμης και το garbage collection, το NetWasm επιδεικνύει σημαντικά χαμηλότερο latency σε σχέση με το Mono AOT. Παρά το γεγονός ότι το project βρίσκεται σε στάδιο πριν την έκδοση 1.0, η ικανότητά του να παράγει WASI Preview 2 Components το καθιστά μια εξαιρετικά ενδιαφέρουσα λύση για περιβάλλοντα όπου το μέγεθος του binary και η ταχύτητα εκκίνησης (cold-start latency) είναι κρίσιμα μεγέθη.

Περιορισμοί και οδικός χάρτης

Είναι σημαντικό να σημειωθεί ότι το NetWasm δεν αποτελεί μια πλήρη μεταφορά του desktop .NET στο Wasm. Χαρακτηριστικά όπως το runtime reflection, το dynamic keyword και η διαχείριση νημάτων (managed threading) δεν υποστηρίζονται, καθώς βρίσκονται εκτός του στοχευμένου προφίλ. Ο οδικός χάρτης για την έκδοση 1.0 εστιάζει στη σταθεροποίηση του ABI, την επέκταση της υποστήριξης για WASI Preview 2 και τη βελτίωση της συμβατότητας με υπάρχουσες βιβλιοθήκες του .NET Standard 2.1.