RustWeek 直播回放和 All Hands 会议记录
RustWeek ( https://rustweek.org ) 是 5 月 13 - 17 日在荷兰举办的 RustNL 和 Rust 1.0 十周年庆祝活动。
有两日公开演讲和两日 Rust 项目内部会议(All Hands)。
公开演讲分为三个同时进行的会场 (tracks):
- 5 月 13 日(周二):
- 演讲列表:https://rustweek.org/schedule/tuesday/
- Main Track 回放:https://www.youtube.com/watch?v=UOP9q3BRiIA
- Ecosystem Track 回放:https://www.youtube.com/watch?v=84bX1nPDBr4
- Industry Track 单独售票,且没有在线直播
- 5 月 13 日(周三):
- 演讲列表:https://rustweek.org/schedule/wednesday/
- Project Track 回放:https://www.youtube.com/watch?v=UKCUZtr378s
- Main Track 回放:https://www.youtube.com/watch?v=g6vDO62TNmE
- Dive Deep 回放:https://www.youtube.com/watch?v=3clGDj1QR6A
All Hands 会议主要是 Rust 项目团队成员面对面讨论交流:
- 会议纪要:https://rust-lang.zulipchat.com/#narrow/channel/486433-all-hands-2025/topic/Meeting.20notes!/with/518928628
- Session interest(会议前的讨论大纲):https://rust-lang.zulipchat.com/#narrow/channel/486433-all-hands-2025/topic/Session.20interest/with/518486858
cargo-dist 已死
当前版本的 cargo-dist 使用“ubuntu-20.04”作为 Github runner,但此 runner 在 4 月已从 Github Action 中删除而不再被支持。
cargo-dist 的网站 https://axodotdev.github.io/cargo-dist/ 也关闭了,其开发人员已不在 axodotdev。
当前的解决方式:在 dist-workspace.toml 中指定
[dist.github-custom-runners]
global = "ubuntu-22.04"
或者使用来自 Astral 的非官方分支 cargo-dist,由 Gankra(cargo-dist 的原作者)维护,但主要为了给 Astral 开发:
新仓库:https://github.com/astral-sh/cargo-dist
Reddit:https://www.reddit.com/r/rust/comments/1kufjn6/psa_cargodist_is_dead/
文章《The impl trait drop glue effect》
作者:CrumblingStatue
这篇文章探讨了 Rust 中 impl Trait
的一个潜在问题:当将具体返回类型改为 impl Trait
时,可能会导致意外的借用检查器错误。
作者通过一个音乐播放器的例子来说明这个问题。在例子中,Playlist
结构体的 iter
方法最初返回一个具体的迭代器类型,代码可以正常编译运行。然而,当作者将返回类型改为 impl Iterator
时,代码出现了借用检查器错误。
这是因为 impl Trait
隐藏了返回类型的细节,导致编译器无法确定返回类型是否有 Drop
实现,从而影响了借用检查器的逻辑。
作者提出了一个问题:是否有办法在 impl Trait
中编码是否存在 Drop
实现,以及是否应该这样做。最后,作者提供了一个简单的解决方案,即通过在表达式周围添加一个块来解决编译错误。
阅读:https://crumblingstatue.github.io/blog-thingy/impl-trait-drop-glue.html
Reddit:https://www.reddit.com/r/rust/comments/1kuavtv/the_impl_trait_drop_glue_effect/
文章《A Tale of Testability and Sending Non-Send Types in Rust》
作者:geo-ant
这篇文章探讨了在 Rust 中如何测试涉及多线程和非 Send
类型的代码。
作者以一个简单的多线程播放音乐的函数为例,展示了直接传递非 Send
类型到线程中会导致编译错误。为了解决这个问题,作者尝试了多种方法,包括手动实现 Send
、使用 Mutex
和 Arc
,但这些方法都因安全性和适用性问题而不可行。
最终,作者提出了一个“高级依赖倒置”的解决方案:传递一个构造函数(闭包)到线程中,而不是直接传递实例。这种方法不仅使代码可测试,还增强了代码的灵活性和可维护性。作者强调,这种设计虽然增加了复杂性,但其带来的好处是值得的。
阅读:https://geo-ant.github.io/blog/2025/rust-testability-and-non-send-types/
Reddit:https://www.reddit.com/r/rust/comments/1kucqzo/a_tale_of_testability_and_sending_nonsend_types/
基准测试:使用 Zig 和 Rust 实现异步 Epoll 服务器
作者:Gunth15
这篇文章是关于作者用 Zig 和 Rust 两种语言实现一个异步 Epoll 服务器的比较。
作者通过这个项目来深入了解异步控制流,并比较这两种语言在实现异步 Epoll 服务器时的性能和内存效率。
项目分为三个主要部分:Watcher、线程池和 Poller。
作者详细描述了在使用 Zig 和 Rust 过程中的体验,包括遇到的错误、语言特性以及测试情况。
最终结果显示,Rust 版本在多线程下处理请求更快,但内存使用更高且稳定性稍差;Zig 版本内存使用更少且更稳定。
仓库:https://github.com/Gunth15/Epoll-implementation-comparison
Reddit:https://www.reddit.com/r/rust/comments/1kuq7l2/small_epoll_test/
Pipex - 函数式管道语法宏
pipex
是一个强大的 Rust 宏,用于构建功能丰富的管道,支持同步、异步、并行和流式操作。它具有以下特点:
- 同步操作:可链式进行常规同步转换
- 异步操作:自动处理异步工作
- 并行处理:利用多核 CPU,可配置线程池
- 流式处理:处理大数据集,可配置缓冲区大小
- 错误处理:内置
Result
处理,支持async?
语法 - 混合工作负载:无缝结合不同操作类型
- 性能优化:兼顾吞吐量和资源效率
它提供了丰富的示例,涵盖 CPU 密集型、I/O 密集型、错误处理和混合工作负载等场景。
还提供了性能优化指南,如 CPU 密集型工作使用并行处理,I/O 密集型工作使用流式处理等。
let result = pipex!(
vec![1, 2, 3, 4, 5]
=> |x| x * 2
=> |x| x + 1
);
let result = pipex!(
vec!["https://api1.com", "https://api2.com", "https://api3.com"]
=> async |url| {
// Simulate HTTP request
tokio::time::sleep(std::time::Duration::from_millis(100)).await;
format!("Data from {}", url)
}
=> |response| response.len()
);
仓库:https://github.com/edransy/pipex
Reddit:https://www.reddit.com/r/rust/comments/1ktv6fz/introducing_pipex_a_functional_pipeline_macro_for/
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
评论区
写评论还没有评论