HeadlinesBriefing HeadlinesBriefing.com

NetWasm: C# в компактный автономный Wasm с WASI

Hacker News •
×

NetWasm — это независимый компилятор .NET, базовая библиотека, среда выполнения и SDK, которые напрямую компилируют C# и .NET CIL в WebAssembly. В отличие от других подходов, он не переносит в продакшен настольный CLR, Mono, dotnet.js или DLL приложения, поэтому получаемые модули остаются небольшими и автономными.

В измеренном сравнении на одной и той же нагрузке print-42 NetWasm с его точным сборщиком мусора Compact создал компонент WASI Preview 2 размером 47 895 байт. Сборка Rust 1.95.0, оптимизированная по размеру, составила 53 635 байт. Это на 10,7% меньше без сжатия и на 19,5% меньше при сжатии Brotli-11. Показатель NetWasm отражает его стандартную публикацию Release, тогда как для сборки на Rust были добавлены задокументированные в Cargo настройки размера. Binaryen wasm-opt работает внутри конвейера NetWasm, и ничего дополнительно устанавливать не нужно.

В тестах выделения памяти и сборки мусора NetWasm также работал быстрее Mono AOT, скомпилированного из того же исходного кода C# и запущенного в Wasmtime. Полное время транзакции сократилось на 26%, время обхода сохраняемого графа объектов — на 38%, а время интенсивного обновления интерфейса — на 40%. Значения представляют собой медианы 15 запусков на Apple M1 Max, причем каждый запуск сверялся с результатом настольного .NET.

Базовый уровень в 46,7 КиБ не является пределом. NetWasm поддерживает C# 15, модули JavaScript, Web Workers, статическую интеграцию с .a-файлами, компоненты WIT и WASI P2, деревья выражений, библиотеки HTTP, JSON, XML и Regex, а также wasm64. Проекты можно собирать, запускать, публиковать и тестировать обычным интерфейсом командной строки dotnet.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing