WasmEdge 0.10.0 发布!全新的插件扩展机制、LLVM 14、Socket API 增强
在 0.10.0 版本中,WasmEdge 提供了全新的插件(plug-in)机制,使本地扩展更易于开发和安装,提高了与 LLVM 14 的兼容性,并支持新的 WebAssembly 规范、提案和特性。
- 本地 host 函数的新插件系统
- 对 WasmEdge socket API 的增强(例如,WasmEdge 中的微服务和 Web 服务客户端)
- 支持新的 WebAssembly 提案和规范
- WasmEdge C API 增强
- 其他特性以及漏洞修复
本地 host 函数的新插件系统
host 函数是允许 WebAssembly 程序访问本地库提供的功能和特性的桥梁。 这是我们使用更多特性和函数扩展 WebAssembly runtime 的方式。 例如,WASI 标准本身就是通过 host 函数让 WebAssembly 应用可以使用 libc
进行系统调用。
WasmEdge 的 TensorFlow、NN、Socket 和图像处理扩展都是通过 host 函数实现的。 让开发者容易使用 host 函数,对 WebAssembly runtime 至关重要。
新的 WasmEdge 插件系统旨在简化 host 函数开发和管理。 插件系统可以让开发者可以使用统一的 host 函数接口轻松创建新的 WasmEdge 扩展。 查看 WasmEdge Book 中的指南:如何使用 WasmEdge 的插件系统添加 host 函数 ,来试试吧。
目前只支持使用 C++ 编写 WasmEdge 插件。 在不久的将来,我们将增加对 Rust 和 C 的支持。
WasmEdge 的用户现在可以通过在 WasmEdge 文件夹中添加或删除包含 host 函数的文件来启用或禁用 WasmEdge 扩展。 插件系统让用户在未来可以轻松、安全地管理大量开发者贡献的 WasmEdge 扩展。
例如, WasmEdge 团队实现了 wasmedge_process
扩展作为插件。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_to
和resv_from
- DNS 名称查找
- 检查 socket 选项枚举的有效值
- 修正:MacOS 上的 wasi-socket
- 修正:用同一个 fd 调用
poll_oneoff
两次和在 socket 上调用fd_close
时出错。 ::getaddrinfo
的以零结尾的字符串。
展望未来,我们将提供兼容 wasm 的 Rust TLS 实现 ,从而支持
HTTPS
和在 WasmEdge 中创建 Tokio 异步 runtime。
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 和 Go API 文档。 对于想使用更新的 C 和 Go API 的开发者来说,请参考 WasmEdge Book。
标准 Wasm 扩展
WasmEdge 发展势头迅猛,完全符合了 WebAssembly 标准,并支持所有强制性和可选的 WebAssembly 规范。 从 0.10.0 版开始,WasmEdge 支持Tail Call
和 extended-const
提案。
其他特性及漏洞修复
除了上述特性外,还有一些特性需要注意。
- 兼容 LLVM 14,提高了性能。
WasmEdge_VMContext
、WasmEdge_ConfigureContext
、WasmEdge_ModuleInstanceContext
和WasmEdge_StoreContext APIs
中的线程安全。- AOT 模式下的 gas 限制,允许在 WasmEdge 中精确计量应用程序。
- 新的单元测试。
要了解有关 WasmEdge 0.10.0 版本的更多信息,请查看 changelog! 加入我们吧!
最后,感谢我们的贡献者!
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.

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
你踩过这些坑吗?谨慎在时间类型列上创建索引
作者: Zeratulll 原文来源:https://tidb.net/blog/9468d259 MySQL中,一般情况下我们不需要关注有序数据的写入在Innodb的Btree上是否存在热点,因为它能承担的吞吐量是比较大的,在单机的范畴内不太容易达到瓶颈。 但是在TiDB中,写入有序数据很容易导致热点,这个热点与单机数据库不同。如果一个节点成为了热点(只有它在工作,或者所有请求都需要访问它),那整个集群无论增加多少台机器,都对提升数据库的性能容量毫无帮助,纯纯的浪费钱了。这是分布式相对单机额外产生的问题。 一个表包含时间字段(例如订单表、日志表、用户表等等),并且在时间字段上创建一个索引是我们使用MySQL时一种很常见的做法。这些时间字段很多会使用插入或者修改的时间(例如DEFAULT值设为CURRENT_TIMESTAMP或者SQL中使用NOW函数来作为值)。 时间是一种典型的有序数据,那么在使用TiDB时,我们是否可以保持像在MySQL中一样的做法来使用时间字段呢?时间字段是否会产生热点,又该如何避免? 本文将从TiDB的原理来解答上述问题。如果你是内核开发者,也有助于帮助读者进...
- 下一篇
RocketMQ 消息发送设计和原理详解 源码剖析
1. 背景 发送消息是 MQ 最基础的操作之一。RocketMQ 官方提供了多语言客户端支持消息的发送和消费操作。 当然,消息发送并不仅仅牵扯到客户端操作。客户端做的是向 Broker 发送请求,请求中包含了消息的全部信息。而 Broker 需要处理客户端发送来的生产请求,将消息存储起来。 在这篇文章中我将将解析消息发送流程中生产者和 Broker 的处理流程,揭秘 RocketMQ 消息发送高性能、高可靠的原理。 2. 概述 RocketMQ 的 Java 客户端提供了丰富的消息发送 API,支持多种消息发送的方式和特殊消息的发送。 包括 3 种发送方式(同步、异步、单向)和多种特殊消息(顺序消息、延时消息、批量消息、过滤消息、事务消息)。 对于客户端消息发送 API 的具体使用方式,可以参考官方文档:https://github.com/apache/rocketmq/blob/develop/docs/cn/RocketMQ_Example.md。 2.1 消息发送方式和特殊消息 2.1.1 三种消息发送方式 RocketMQ 支持 3 种消息发送方式:同步、异步和单向。 同步(...
相关文章
文章评论
共有0条评论来说两句吧...