< 返回版块

苦瓜小仔 发表于 2025-07-11 08:25

Tags:日报

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 管理项目,通过 OptionResult 类型处理潜在错误,利用迭代器和模式匹配编写简洁高效的代码。

文章还展示了如何使用 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 日报小组 苦瓜小仔

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页