HeadlinesBriefing HeadlinesBriefing.com

NetWasm:C# 编译为带 WASI 的小型独立 Wasm

Hacker News •
×

NetWasm 是一款独立的 .NET 编译器、核心库、运行时和 SDK,可将 C# 与 .NET CIL 直接编译为 WebAssembly。与其他方案不同,它不会将桌面 CLR、Mono、dotnet.js 或应用程序 DLL 带入生产环境,因此生成的模块体积小巧且可独立运行。

在针对同一 print-42 工作负载的实测对比中,采用精确型 Compact 垃圾回收器的 NetWasm 生成了 47,895 字节的 WASI Preview 2 组件。针对体积优化的 Rust 1.95.0 构建版本则为 53,635 字节。原始体积小 10.7%,使用 Brotli-11 压缩后小 19.5%。NetWasm 的数据来自其默认的 Release 发布设置,而 Rust 构建则添加了 Cargo 文档中记载的体积相关设置。Binaryen 的 wasm-opt 已内置于 NetWasm 的编译流程中,无需额外安装。

在分配与垃圾回收基准测试中,NetWasm 的运行速度也快于 Mono AOT。两者均由同一 C# 源代码编译,并在 Wasmtime 中运行。完整事务时间缩短了 26%,保留对象图时间减少了 38%,UI 频繁分配与回收的时间减少了 40%。这些数据是在 Apple M1 Max 上进行 15 次运行的中位数,且每次运行结果都与桌面 .NET 的结果进行了核对。

46.7 KiB 的基准值并非上限。NetWasm 支持 C# 15、JavaScript 模块、Web Workers、静态 .a 互操作、WIT 与 WASI P2 组件、表达式树、HTTP、JSON、XML 和 Regex 库,以及 wasm64。它还可以通过常规的 dotnet CLI 构建、运行、发布和测试项目。

来源: Hacker News · 由HeadlinesBriefing整理摘要