【Rust日报】2024-05-28 Wasmi 的新的超快的执行引擎

2024-06-01 07:52

本文主要是介绍【Rust日报】2024-05-28 Wasmi 的新的超快的执行引擎,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

社区学习交流平台订阅:

  • Rustcc论坛: 支持rss

  • 微信公众号:Rust语言中文社区

这篇关于【Rust日报】2024-05-28 Wasmi 的新的超快的执行引擎的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020419

相关文章

解密SQL查询语句执行的过程

《解密SQL查询语句执行的过程》文章讲解了SQL语句的执行流程,涵盖解析、优化、执行三个核心阶段,并介绍执行计划查看方法EXPLAIN,同时提出性能优化技巧如合理使用索引、避免SELECT*、JOIN... 目录1. SQL语句的基本结构2. SQL语句的执行过程3. SQL语句的执行计划4. 常见的性能优

Spring Bean初始化及@PostConstruc执行顺序示例详解

《SpringBean初始化及@PostConstruc执行顺序示例详解》本文给大家介绍SpringBean初始化及@PostConstruc执行顺序,本文通过实例代码给大家介绍的非常详细,对大家的... 目录1. Bean初始化执行顺序2. 成员变量初始化顺序2.1 普通Java类(非Spring环境)(

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF