公告:Rust 项目目标 4 月完成情况
阅读:https://blog.rust-lang.org/2025/05/26/april-project-goals-update/
公告:i686-pc-windows-gnu 从 Tier 1 降级为 Tier 2
Rust 1.88.0 将把 i686-pc-windows-gnu
目标从 Tier 1 降级为 Tier 2。
尽管如此,标准库和编译器的构建仍会通过 rustup
等方式分发。
这一变化主要是因为该目标的 32 位版本使用率低且维护困难。
GNU 工具链缺乏专门的维护者,导致相关问题难以解决且经常在 CI 中引发问题。降级后,该目标的测试将减少,未来可能更快地积累错误。如果找不到维护者且问题持续,*-windows-gnu
目标可能进一步降级,但目前尚无具体计划。
Rust 团队欢迎有相关经验的开发者成为目标维护者,详情可参考目标层级政策。RFC 3771 提出了这一变更的动机。
阅读:https://blog.rust-lang.org/2025/05/26/demoting-i686-pc-windows-gnu/
RFC 3771:https://github.com/rust-lang/rfcs/blob/master/text/3771-demote-i686-pc-windows-gnu.md
Rust Meetup 北京站视频
合集:https://space.bilibili.com/539743527/lists/5516556
R4L:Linux 6.16 中 ConfigFS 将提供 Rust API
Linux 6.16版本中,ConfigFS文件系统迎来新维护者Andreas Hindborg,并添加了对Rust语言的支持。
ConfigFS是一种基于RAM的文件系统,用于用户空间驱动的内核对象配置。
此次更新为ConfigFS提供了Rust API,使交互更安全,并添加了示例程序展示接口。此外,还允许创建具有自定义权限的读写文件,更好地保护通过ConfigFS写入的密钥。
详细见 此 PR。
tokio:准备将 io-uring 用于文件 IO
tokio 上周合并了一个添加 io-uring 基础设施的 PR(尚未实现 IO 功能)
-
只将 io-uring 应用于文件 IO,从而 tokio 拥有真正的异步文件 IO 操作
- 背景:目前文件 IO 的异步任务放到阻塞线程上执行(spawn_blocking)
- 网络 IO 依然保持现有基于 epoll 的方式:因为 io-uring 不适用于所有平台;即使在最近的 Linux 上,出于安全原因,它也经常在内核中被禁用
-
应对 io_uring 与传统 io 接口中处理缓冲区的问题:将数据复制到由 tokio 控制的缓冲区中
- spawn_blocking 已经存在完全相同的缓冲区问题,也这么做了
文章《Async Traits Can Be Directly Backed By Manual Future Impls》
作者:yoshuawuyts
这篇文章探讨了在 Rust 中如何通过手动实现 Future
来支持异步特征(AFITs)。
作者首先介绍了异步特征的基本概念,并通过一个简单的 AsyncIterator
示例展示了如何定义和使用异步特征。接着,文章深入探讨了如何手动实现 Future
来支持异步特征,避免了直接使用 async fn
可能带来的性能问题。
作者指出,通过直接返回 Future
实现,可以绕过中间的 .await
调用,从而获得更好的性能控制。
此外,文章还介绍了如何使用 future::poll_fn
来简化手动实现的复杂性,使得在异步上下文中快速编写优化的轮询状态机代码成为可能。
最后,作者强调了这种实现方式的重要性,因为它统一了异步特征的设计空间,使得异步特征既方便实现,又能保证性能。
阅读:https://blog.yoshuawuyts.com/async-traits-can-be-directly-backed-by-manual-future-impls/
PMDaemon - 高性能进程管理器/库
PMDaemon 是一个用 Rust 编写的高性能进程管理器,受 PM2 启发并超越其功能。
它专为现代应用部署设计,具备高级端口管理、实时监控和生产级 Web API。PMDaemon 提供了丰富的功能,包括进程生命周期管理、自动重启、信号处理、配置持久化等。它还支持内存限制、HTTP 健康检查、脚本健康检查和阻塞启动命令。
端口管理方面,支持端口范围分配、自动分配、冲突检测和运行时端口覆盖。Web API 提供 REST 接口和 WebSocket 支持,用于远程监控和实时更新。
PMDaemon 提供了详细的命令参考、配置选项和测试覆盖,并且可以通过 Rust 库使用。
仓库:https://github.com/entrepeneur4lyf/pmdaemon/
Reddit:https://www.reddit.com/r/rust/comments/1kv63qz/pmdaemon_process_management_similar_to_pm2_in_rust/
视频教程:在 bevy 中制作你的第一个游戏
视频:https://www.youtube.com/watch?v=nE76GGICofU
bevy_simple_subsecond_system - bevy 热重载插件
bevy_simple_subsecond_system
是一个 Bevy 插件,允许在运行时热更新系统和观察者的代码,借助 Dioxus 的 subsecond 实现。
它支持修改系统内部代码并即时看到效果,还提供了一些高级用法,如运行时更改系统签名、自动重新运行热更新的系统等。不过,它存在一些限制,如不能在运行时更改资源或组件的定义等。
演示:https://www.youtube.com/watch?v=fo6FXxeP0Wg
仓库:https://github.com/janhohenheim/bevy_simple_subsecond_system
Reddit:https://www.reddit.com/r/rust/comments/1kvhxvk/hotreloading_rust_code_in_bevy_500ms_recompile/
Stalwart:开源邮件服务器 | Calcard:解析和生成 vCard 和 iCalendar 数据
Stalwart 是一个用 Rust 编写的开源邮件与协作服务器,支持 JMAP、IMAP4、POP3、SMTP、CalDAV、CardDAV 和 WebDAV 协议。它具备全面的现代功能,包括垃圾邮件和网络钓鱼过滤、灵活的存储后端、多租户支持、安全性和可扩展性等。此外,它还提供 Web 基管理界面、实时统计和监控功能。
calcard
是一个 Rust 库,用于解析和生成 vCard 和 iCalendar 数据,支持 .vcf
和 .ics
文件格式,便于与日历和联系人管理应用集成。它遵循鲁棒性原则,尽量解析非标准的 iCal/vCard 对象。支持流式解析、单个实例解析和生成 vCard/iCalendar 字符串。
stalwart 仓库:http://github.com/stalwartlabs/stalwart
calcard 仓库:https://github.com/stalwartlabs/calcard
Reddit:https://www.reddit.com/r/rust/comments/1kvtod7/announcing_stalwart_collaboration_server_and_the/
Fx - 轻量自托管(微)博客服务器
fx
是一个轻量级的自托管(微)博客服务器,专为低成本运行和便捷内容创作设计。
它支持 Markdown 写作、内置语法高亮和数学公式显示(LaTeX),并允许用户从桌面或移动设备发布和编辑内容。
此外,用户可以上传文件和图片嵌入到文章中,所有内容会自动备份为纯文本文件。
fx
提供了简单的安装方式,可通过 Docker Compose 部署,并支持通过 API 进行备份和更新操作。
它旨在为用户提供一个类似公共笔记本的平台,方便记录和查找信息,同时避免了社交媒体平台可能存在的内容受限问题。
仓库:https://github.com/rikhuijzer/fx
Reddit:https://www.reddit.com/r/rust/comments/1kuxwif/media_fx_a_microblogging_server_that_you_can/
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
评论区
写评论研究了下tokio的那个io-uring fs部分。
整体逻辑就是创建iouring的时候把其fs注册到epoll中,这样当uring的event到来的时候对应的cq一定有数据。
进行注册的时候非堵塞的调用io_uring_enter进行io操作的注册。
当文件io操作发送例如调用File::read的时候会创建一个叫Op的结构,Op结构实现了Future,当对Op poll的时候将会把内部的Sqe注册到Sq中并调用io_uring_enter,并且将Context注册到tokio中的iouring上下文中,然后返回Pending。
当epoll中有iouring事件则根据cqe中的userdata从iouring上下文中获取到上面注册的Context并唤醒对应的Future。
sqe中的缓冲区应该还是由File结构维护一个临时缓冲区,然后Op ready后复制到参数中。