Linebender:6 月进展
Linebender 是一个非正式的开源组织,致力于各种项目,以推动 Rust 编程语言 GUI 的发展。
Vello 的 GPU 向量渲染器性能优化显著,引入 SIMD 支持并改进稀疏条带渲染器。
Masonry 增加了多窗口支持,并拆分了核心和测试 crate 以提升编译并行性。Xilem 作为旗舰 GUI 项目,支持多窗口并改进架构,还启动了 Mastodon 客户端示例项目。
Parley 发布了 0.5.0 版本,改进了文本布局功能。
Linebender 积极邀请社区参与,举办每周办公时间会议,并强调用户反馈的重要性。
阅读:https://linebender.org/blog/tmil-18/
文章《Variadic Generics ideas that won’t work for Rust》
作者:poignardazur
本文探讨了为何某些关于在 Rust 中添加变参泛型的提议不可行 —— 这个话题延续了 10 年。
作者指出,尽管变参泛型可让函数或类型处理任意数量的参数,且对 Rust 开发者颇具吸引力,但现有提议存在诸多问题。例如,
- 将元组视作迭代器来处理,无法保证元组成员实现了所需 trait,且映射元组时操作繁琐;
- 使用变参递归方式实现,会导致元组解构与引用结合时出现问题,且元组解构和连接的表示困难,还会使关联类型过于不透明,影响开发者体验;
- 而引入一等类型 (first-class) 作为解决方案,则会带来大量后单态化错误,对类型推断产生负面影响,并且需要重写整个语言,改变 Rust 的核心特性。
作者强调,尽管这些提议看似能提供捷径,但深入分析后会发现它们要么无法覆盖常见用例,要么需要大规模改变编译器架构,要么与更通用的变参泛型提案所需工作量相当。
因此,这些提案都是不可行的,而真正的变参泛型需要具备表达“所有元组成员实现某 trait”的语法、迭代元组成员的语法以及结合这两点的规则。即,具有如下形式才是可行的
impl<...Ts: SomeTrait> SomeTrait for (...Ts) {
fn do_stuff(&self) -> u32 {
let mut sum = 0;
for member in ...self {
// The trait bounds ensure each member has a do_stuff() method
sum += member.do_stuff();
}
sum
}
}
fn unwrap_all<...Ts>(options: (for<T in Ts> Option<T>)) -> (...Ts) {
for option in ...options {
option.unwrap()
}
}
阅读:https://poignardazur.github.io/2025/07/09/variadic-generics-dead-ends/
Reddit:https://www.reddit.com/r/rust/comments/1lvlhpk/variadic_generics_ideas_that_wont_work_for_rust/
文章《Rust BufWriter 和 LZ4 压缩》
文章讲述了作者在生物信息学 Rust 项目中使用 LZ4 压缩算法优化输出文件大小的经历。
最初,作者在将数据序列化为 MessagePack 格式后,使用 BufWriter
包装文件,再通过 LZ4 编码器进行压缩,但发现 LZ4 压缩开销很高。
通过分析,作者意识到 LZ4 是块压缩算法,而每次写入的序列化数据块较小,导致频繁的压缩操作。
于是,作者调整了缓冲策略,将 BufWriter
用于包装 LZ4 编码器,而不是文件,使得数据先缓冲再压缩。这一改变显著提高了性能,使相关代码运行速度提升了 1.83 倍。
阅读:https://deterministic.space/bufwriter-lz4.html
Reddit:https://www.reddit.com/r/rust/comments/1lw5r9x/bufwriter_and_lz4_compression/
新手向文章:《如何像 Rustaceans 一样编写 Rust 代码》
Rust 以内存安全、零成本抽象和强大的类型系统著称,适合开发性能关键的系统。
安装 Rust 后,使用 cargo
管理项目,通过 Option
和 Result
类型处理潜在错误,利用迭代器和模式匹配编写简洁高效的代码。
文章还展示了如何使用 clap
创建命令行计算器,并列举了常见错误及改进方法,如避免不必要的克隆、正确使用引用和生命周期、处理错误等。
最后,建议通过阅读编译器错误、使用工具、参与社区、构建项目和贡献开源来提高 Rust 技能。
阅读:https://thenewstack.io/how-to-write-rust-code-like-a-rustacean/
Wgpu:发布 v26.0.0
wgpu 新版本引入了多项新特性和改进,包括对 Vulkan 和 D3D12 后端的增强、Naga 着色器编译器的更新、以及对调试功能的改进。
主要亮点包括新增了 TextureView::texture
方法、改进了 as_hal
调用方式、支持启用 Vulkan 特性和扩展、Naga 增加了对 no_std
的支持、改进了错误处理和诊断渲染等。
此外,还修复了多个 bug,如对采样器数组限制的错误消息修复、对 BufferSlice::get_mapped_range_as_array_buffer
的改进等。
仓库:https://github.com/gfx-rs/wgpu
Reddit:https://www.reddit.com/r/rust/comments/1lw1tmv/wgpu_v26_is_out/
Minmath:轻量灵活的 Rust 数学库
作者在学习 Rust 和探索数学的过程中创建了 minmath,这是一个轻量灵活的 Rust 数学库。
它支持动态大小的向量和矩阵,并包含多种操作,如点积、叉积、标量算术等,还提供了向量和矩阵之间的转换功能以及一些有用的 trait 和工具。
作者已将其应用于软件光栅化器,并认为它对图形、游戏开发、模拟等领域或需要轻量数学库的用户很有用。
仓库:https://github.com/Jodus-Melodus/minmath
Aralez:基于 Cloudflare 的 Pingora 构建的反向代理和服务网格
Aralez 具备动态配置重载、TLS 终止、上游 TLS 检测、认证机制(包括基本认证、API 密钥和 JWT 验证)以及多种负载均衡策略等关键特性。
它支持 HTTP 和 WebSocket 流量的统一端口处理,具备内存安全性,并以其高性能著称。
其配置通过 YAML 文件管理,支持热重载,无需重启即可应用更改。
此外,Aralez 还提供了远程配置 API 和多种认证方式,适用于边缘代理、内部路由或混合云场景。
Arales、Nginx 和 Traefik 的基准测试结果:
仓库:https://github.com/sadoyan/aralez
Reddit:https://www.reddit.com/r/rust/comments/1lvju7s/another_major_milestone_achieved/
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
评论区
写评论还没有评论