C# (.NET) 现已支持新平台:关键变化与前景展望
微软持续积极拓展 .NET 生态系统的边界。在最新更新中,开发团队宣布为 C# 语言新增了对新平台的支持。这一决定为程序员打开了创建现代应用程序的更多可能性,不再局限于传统的运行环境。
这里所说的新平台是 WebAssembly System Interface (WASI)。此前 .NET 已支持浏览器中的 WebAssembly,但现在 .NET 8+ 运行时允许在浏览器之外——服务器、边缘设备和云环境中通过 WASI 运行 C# 代码。这是迈向真正跨平台的一步,同一份代码可以在 Windows、Linux、macOS 甚至隔离的沙盒环境中运行。
这对开发者意味着什么?
.NET 对 WASI 的支持不仅仅是一项技术创新。它解决了几个根本性问题:
- 通用性:现在 C# 应用程序可以在以前需要 Python、Rust 或 Go 的环境中运行——例如云函数(serverless)或物联网设备。
- 安全性:WASI 提供严格的隔离(沙盒),这对于多用户服务和执行未经审核的代码至关重要。
- 性能:得益于 .NET 8 中的原生 AOT 编译器(Ahead-of-Time),基于 WASI 的 C# 应用程序几乎可以瞬间启动,无需 JIT 编译延迟。
实际如何运作?
微软发布了 dotnet wasi-experimental 的预览版——一个允许将 C# 项目编译为 WASI 模块的包。过程很简单:
- 只需安装 .NET 8 SDK 并添加 NuGet 包
Wasi.Sdk。 - 编写常规的 C# 代码(例如控制台应用程序)。
- 使用
--wasi标志构建项目——输出将是一个.wasm文件。 - 在任何支持 WASI 的环境中运行它(例如 Wasmtime 或 Wasmer)。
需要注意的是,现阶段支持并不完整:某些功能,如多线程和直接文件系统访问,目前仍有限制。但对于服务器场景、微服务和计算任务来说,这已经足够了。
与 Python 和 Rust 的竞争
长期以来,Python 和 Rust 在需要可移植性和安全性的场景(例如 WebAssembly)中占据主导地位。支持 WASI 的 C# 凭借丰富的标准库和熟悉的语法进入这一领域。对于已经使用 .NET 的团队来说,这意味着降低了入门门槛:无需学习新语言即可在边缘平台上部署应用程序。
此外,微软正在与推动 WASI 标准的 Bytecode Alliance 项目积极合作。这确保了 .NET 将与未来版本的规范保持兼容。
下一步是什么?
.NET 对 WASI 的支持目前仍是一项实验性功能,但预计在 .NET 9 中会趋于稳定并扩展 API。开发者现在就应该开始测试,以便在正式发布时做好迁移准备。
对于习惯使用 Python 的人来说,这或许是一个将 C# 视为替代方案的契机。