首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Wasmtime:终于可以在.NET应用中运行WebAssembly了

尽管围绕WebAssembly的势头一直在增长,WebAssembly运行时Wasmtime才增加对.NET Core的支持,使得基于.NET Core的应用程序可以运行WebAssembly代码。

WebAssembly是安全、可移植的低级代码格式,旨在提供高效执行和紧凑表示。WebAssembly通过实现硬件无关、语言无关和平台无关,尽可能将可移植性做到极致。

根据来自Mozilla的工程师Peter Huene介绍,将WebAssembly和.NET集成,可以简化代码共享同时提供更好的未授信代码隔离。

Huene表示,相较于共享类似C库这样的本地库,共享WebAssembly模块明显要容易很多,因为前者依赖特定平台构建。而WebAssembly模块可以在无需修改的情况下分发。

作为一个示例,Huene展示了将Rust编写的一个库编译成WebAssembly,然后集成到.NET应用中。整个过程不需要考虑.NET应用程序运行的实际处理器架构和操作系统。整个工作流尚未完美简化,因为开发者还需要处理许多诸如值转换等低级别细节。正如Huene所说,多亏了即将发布的WebAssembly接口类型提案,这些问题将来都会解决。这个提案将会提升WebAssembly和.NET之间的交互性,简化二者之间复杂数据类型的交换,无需再编写太多胶水代码,可以将WebAssembly模块当成是.NET的包。

WebAssembly要求显示导入允许模块使用的所有外部函数,并且仅能访问主机平台上保留的内存区域,从而使隔离未受信代码成为可能。该功能让WebAssembly模块能够在沙箱环境中高效运行的同时,无需担心陌生插件任意访问主机平台。

Huene在他的文章中为希望在.NET应用程序中使用WebAssembly的开发者提供了很多有价值的信息,涵盖了整个流程中的所有方面。包括了创建WebAssembly代码来解决问题;检查模块需要从主机获得哪些内容,以及想主机提供什么功能;创建.NET工程并导入WebAssembly模块,同时将.NET函数暴露给WebAssembly模块。

浏览器外运行WebAssembly应用程序的运行时环境中,Wasmtime不是唯一一个。这里尤其需要提一下的有,Wasmer,它也和Wasmtime一样是一个通用运行时环境;WebAssembly Micro Runtime,专注于小尺寸设备。多亏了Miguel de Icaza创建的项目Wasmer-sharp,Wasmer也能够用于.NET项目。Wasmtime和Wasmer都处于活跃开发阶段,虽然它们的目标不是完全重合

这两个项目或多或少有些竞争。

原文链接:

Wasmtime Enables Running WebAssembly From .NET Programs

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/5QcN1eJ0A8xUVhNifDjK
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券