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
社区学习交流平台订阅:
评论区
写评论RA把已实现的TRAIT给列出来就完事.
--
👇
Bai-Jinlin: 他这明显忽略了一个问题fn chars(&self) -> impl Iterator<Item=char>这种的返回值“只是一个Iterator”,而返回Chars结构的话Chars不光是一个Iterator,而且可以附加其他功能.
感觉他其实需要的是一个类型提示,而不是一个带有复杂描述的结构体
--
👇
Bai-Jinlin: 他这明显忽略了一个问题fn chars(&self) -> impl Iterator<Item=char>这种的返回值“只是一个Iterator”,而返回Chars结构的话Chars不光是一个Iterator,而且可以附加其他功能.
他这明显忽略了一个问题fn chars(&self) -> impl Iterator<Item=char>这种的返回值“只是一个Iterator”,而返回Chars结构的话Chars不光是一个Iterator,而且可以附加其他功能.