< 返回版块

Koalr 发表于 2024-05-29 15:09

Tags:rust,日报

Wasmi 的新的超快的执行引擎

经过数月的研究、开发和质量保证,Wasmi 有史以来最重要的更新终于准备好投入生产使用。

Wasmi 是一种高效且多功能的 WebAssembly (Wasm) 解释器,专注于嵌入式环境。它是插件系统、云主机和智能合约执行引擎的绝佳选择。

Wasmi 在最大努力的实现 Wasmtime API,使其成为理想的运行时。

通过 cargo install wasmi_cli 安装 Wasmi 的 CLI 工具,或通过 wasmi crate 将其用作库。

Wasmi v0.32 配备了新的执行引擎,利用基于寄存器的字节码将其执行性能提高了多达 5 倍。此外,由于惰性编译和其他新技术,其启动性能也提高了几个数量级。

文中做了一系列的 benchmark, 结论如下:

到目前为止,Wasmi 和 Wasm3 的表现最好,因为它们具有惰性编译功能。正如预期的那样,优化基于 JIT 的 Wasm 运行时(如 Wasmtime 和 Wasmer)在这种情况下表现较差。专为快速启动而设计的单通道 JIT,例如 Winch 和 Wasmer Singlepass,速度也明显较慢。尽管也使用了懒惰的翻译,但 Stitch 的翻译性能并不理想。然而,需要注意的是,Winch 和 Stitch 仍处于开发的实验阶段,改进是可以预期的。

ReadMore: https://wasmi-labs.github.io/blog/posts/wasmi-v0.32/

Rust 中的类型和 Self-Document

作者在使用 Rust 时发现了一个使用的不便,即类型过于抽象后原始类型变得难以找到和理解。

标准库中有大量方法返回具体类型而不是抽象(即特征)。它们通常与方法本身具有相同的名称,只是大小写不同。这通常会使方法的签名变得不那么直观。

让我们看一个例子。字符串有一个名为 chars() 的方法。此方法具有以下签名:

pub fn chars(&self) -> Chars<'_>

OK,所以 chars() 返回 Chars ,这并没有告诉我太多。听起来我正在获取字符串的字符,但我不知道它是数组、切片、迭代器还是其他东西。

考虑一下,如果这个函数的签名是这样的:

pub fn chars(&self) -> impl Iterator<Item=char>

我们可以说,这比之前的签名更具文档性(Self-Documenting)。只需查看函数即可更轻松地理解该函数的作用。我们仍然需要某些细节的文档,例如,这迭代了 Unicode 标量而不是字形集群,但我认为即使从签名中也可以明显看出这一点。

有什么方法可以改进吗?我不希望 Rust 改变它的特征系统或丢失宏。这些都是强大的功能,即使它们有一些缺点。除了我之前提出的改进命名的建议(我认为这有很长的路要走)之外,IDE 也可以提供很多帮助。他们可以有一种简单的方法来显示给定类型的所有已实现特征,包括一揽子特征。这可以在将鼠标悬停在类型时显示,也可以在签名的文档弹出窗口中显示。也许还有一种方法可以在完成项的签名中显示一些紧凑的特征信息。

最后,也许可以显示宏调用生成的类型和隐含的摘要。甚至可能也适用于派生宏。当一种语言的类型系统如此灵活,并且有如此多的元编程工具时,IDE的帮助就变得非常有价值。RustRover 和 VS Code + Rust Analyzer 已经做了一些有用的事情,但我认为它们仍处于起步阶段。我期待这些 IDE 成熟并改善 Rust 的编码体验。

dnrs 用 rust 实现的轻量 dns server

ReadMore: https://github.com/VeroniDeev/dnrs


From 日报小组 Koalr

社区学习交流平台订阅:

评论区

写评论
github.com/shanliu/lsys 2024-05-30 11:01

RA把已实现的TRAIT给列出来就完事.

--
👇
Bai-Jinlin: 他这明显忽略了一个问题fn chars(&self) -> impl Iterator<Item=char>这种的返回值“只是一个Iterator”,而返回Chars结构的话Chars不光是一个Iterator,而且可以附加其他功能.

RedPanda 2024-05-30 09:56

感觉他其实需要的是一个类型提示,而不是一个带有复杂描述的结构体

--
👇
Bai-Jinlin: 他这明显忽略了一个问题fn chars(&self) -> impl Iterator<Item=char>这种的返回值“只是一个Iterator”,而返回Chars结构的话Chars不光是一个Iterator,而且可以附加其他功能.

Bai-Jinlin 2024-05-29 15:35

他这明显忽略了一个问题fn chars(&self) -> impl Iterator<Item=char>这种的返回值“只是一个Iterator”,而返回Chars结构的话Chars不光是一个Iterator,而且可以附加其他功能.

1 共 3 条评论, 1 页