专业的编程技术博客社区

网站首页 > 博客文章 正文

WasmEdge 0.10.0 发布!全新插件扩展机制、Socket API 增强、LLVM 14

baijin 2024-08-21 11:19:59 博客文章 6 ℃ 0 评论

今天北美云原生大会的WASM演讲不要错过哦!


在 0.10.0 版本中,WasmEdge[1] 提供了全新的插件(plug-in)机制,使本地扩展更易于开发和安装,提高了与 LLVM 14 的兼容性,并支持新的 WebAssembly 规范、提案和特性。

  • 本地 host 函数的新插件系统
  • 对 WasmEdge socket API 的增强(例如,WasmEdge 中的微服务和 Web 服务客户端)
  • 支持新的 WebAssembly 提案和规范
  • WasmEdge C API 增强
  • 其他特性以及漏洞修复

本地 host 函数的新插件系统

host 函数[2]是允许 WebAssembly 程序访问本地库提供的功能和特性的桥梁。这是我们使用更多特性和函数扩展 WebAssembly runtime 的方式。例如,WASI 标准本身就是通过 host 函数让 WebAssembly 应用可以使用 libc 进行系统调用。

WasmEdge 的 TensorFlow、NN、Socket 和图像处理扩展都是通过 host 函数实现的。让开发者容易使用 host 函数,对 WebAssembly runtime 至关重要。

新的 WasmEdge 插件系统旨在简化 host 函数开发和管理。插件系统可以让开发者可以使用统一的 host 函数接口轻松创建新的 WasmEdge 扩展。查看 WasmEdge Book 中的指南:如何使用 WasmEdge 的插件系统添加 host 函数[3] ,来试试吧。

目前只支持使用 C++ 编写 WasmEdge 插件。在不久的将来,我们将增加对 Rust 和 C 的支持。

WasmEdge 的用户现在可以通过在 WasmEdge 文件夹中添加或删除包含 host 函数的文件来启用或禁用 WasmEdge 扩展。插件系统让用户在未来可以轻松、安全地管理大量开发者贡献的 WasmEdge 扩展。

例如, WasmEdge 团队实现了 `wasmedge_process`[4] 扩展作为插件。wasmedge_process 允许 WebAssembly 程序调用操作系统命令。接下来的几周,我们会把 WasmEdge 的现有扩展移植到新的插件格式。同时,也欢迎你为 WasmEdge 贡献基于 host 函数的扩展。

Wasi-socket 提升

WasmEdge networking sockets 是 non-blocking 和高性能的。WasmEdge 是目前唯一可以运行 Web 服务应用程序的 WebAssembly runtime。许多开发者尝试创建和部署基于 WasmEdge 的 Web 服务或客户端。在此版本中,我们继续改进了 WasmEdge socket API。

  • IPV4 和 IPV6 模式
  • UDP 函数:send_toresv_from
  • DNS 名称查找
  • 检查 socket 选项枚举的有效值
  • 修正:MacOS 上的 wasi-socket
  • 修正:用同一个 fd 调用 poll_oneoff 两次和在 socket 上调用 fd_close 时出错。
  • ::getaddrinfo 以零结尾的字符串。

展望未来,我们将提供兼容 wasm 的 Rust TLS 实现[5] ,从而支持 HTTPS 和在 WasmEdge 中创建 Tokio 异步 runtime[6]。

C API 提升

C API 是 WasmEdge 其他语言 API 的基础,例如 WasmEdge Rust API 和 WasmEdge Go API。此版本改进了 WasmEdge C API。

  • WasmEdge_ImportObjectContext 合并到 WasmEdge_ModuleInstanceContext 中。
  • 使用指向 WasmEdge_FunctionInstanceContext 的指针而不是 FuncRef 值类型中的索引。
  • WasmEdge_StoreContext 的函数移至 WasmEdge_ModuleInstanceContext
  • 更新了 WasmEdge_VMContext API。

此新版本也带来新的 C API[7]Go API[8] 文档。对于想使用更新的 C 和 Go API 的开发者来说,请参考 WasmEdge Book[9]

标准 Wasm 扩展

WasmEdge 发展势头迅猛,完全符合了 WebAssembly 标准,并支持所有强制性和可选的 WebAssembly 规范。从 0.10.0 版开始,WasmEdge 支持Tail Callextended-const提案。

其他特性及漏洞修复

除了上述特性外,还有一些特性需要注意。

  • 兼容 LLVM 14,提高了性能。
  • WasmEdge_VMContextWasmEdge_ConfigureContextWasmEdge_ModuleInstanceContextWasmEdge_StoreContext APIs 中的线程安全。
  • AOT 模式下的 gas 限制,允许在 WasmEdge 中精确计量应用程序。
  • 新的单元测试。

要了解有关 WasmEdge 0.10.0 版本的更多信息,请查看 changelog[10]! 加入我们吧!

最后,感谢我们的贡献者!

apepkuss, dm4, q82419, cyw3, SAtacker, ibmibmibm, hydai, gusy1234, hangedfish, 0yi0, tpmccallum, MediosZ, hantmc, LFsWang, eat4toast, eee4017, situ2001, meoww-bot, juntao, mfordjody, joyaaa, sunnywa, DarumaDocker, spacewander, luckyJ-nj, mydreamer4134, malc0lm,kgpp34, wenchajun, laingke, cold-Elite, border1px, zhuyaguang, bbcfive, JooKS-me, KerneIErr, zswaaa, zhannicholas, O3OI, KcjinChen, FlyingOnion, swartz-k, Bevisy, deyuhua, zephoon, abhinandanudupa, chinzhiweiblank.

参考资料

[1]

WasmEdge: https://github.com/WasmEdge/WasmEdge

[2]

host 函数: https://www.secondstate.io/articles/extend-webassembly/

[3]

如何使用 WasmEdge 的插件系统添加 host 函数: https://wasmedge.org/book/en/extend/plugin/loadable.html

[4]

wasmedge_process: https://github.com/WasmEdge/WasmEdge/tree/master/plugins

[5]

提供兼容 wasm 的 Rust TLS 实现: https://github.com/WasmEdge/WasmEdge/issues/1430

[6]

在 WasmEdge 中创建 Tokio 异步 runtime: https://github.com/WasmEdge/WasmEdge/issues/1429

[7]

C API: https://wasmedge.org/book/en/embed/c/ref.html

[8]

Go API: https://wasmedge.org/book/en/embed/c/ref.html

[9]

WasmEdge Book: https://wasmedge.org/book/en/embed/c/0.9.1/upgrade_to_0.10.0.html

[10]

changelog: https://github.com/WasmEdge/WasmEdge/releases/tag/0.10.0

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表