< 返回版块

苦瓜小仔 发表于 2026-01-12 13:05

Tags:日报

《Rust 生态系统有多安全?使用 cargo-deny 分析 crates.io》

本文旨在利用强大的工具 cargo-denycrates.io 包进行全面审核,从而分析 Rust 生态系统的整体质量 。

该分析基于一个生成自 crates.io-indexe12a7dd 提交上的快照 数据集 ,日期为 2025 年 12 月 8 日 。文章集中于最关键的指标: a:vulnerabilitya:unsounda:noticea:unmaintaineda:yanked

这里列举 vulnerability 的统计结果:

  • 含义: 在依赖项或 crate 本身中已发现特定的安全漏洞 (CVE)。
  • 背景: 这是最关键的检查。它表明该 crate 版本包含可能被利用的代码(例如,通过内存损坏或拒绝服务攻击)。用户通常需要立即升级到已修复的版本。
类别 百分比 Count
Total 186 287
🟢 Passed 76.271% 142 083
🔴 Failed 23.729% 44 204

注:Failed count 表示 vulnerability 至少出现过一次的 crate。

按既定受欢迎程度群体划分的失败率分布。

注:Failure rate 表示特定组内未通过检查的箱子所占的百分比。

各个受欢迎程度群体的平均失败次数:

注:Average failure number 表示特定组 vulnerability 故障的平均值。

除了原始数字之外,文章进行了统计上的因果推断检验,计算了 Pearson 、Spearman 、Kendall 系数,所有检验的 P 值均为 0.0 ,这证实了这种关系具有显著的统计学意义,表明这种模式并非随机巧合,从而揭示了项目安全方面清晰的因果链:依赖关系越多 → 复杂性越高 → 脆弱性风险越大。

阅读:https://mr-leshiy-blog.web.app/blog/crates_io_analysis/

Rust 新特性:编译时反射 std::mem::type_info

最近 Rust 标准库添加了 type_info 模块,用于编译时反射。示例:

#![feature(type_info)]

use std::mem::type_info::{Type, TypeKind};

fn assert_tuple_arity<T: 'static, const N: usize>() {
    const {
        match &Type::of::<T>().kind {
            TypeKind::Tuple(tup) => {
                assert!(tup.fields.len() == N);
            }
            _ => unreachable!(),
        }
    }
}

fn main() {
    assert_tuple_arity::<(), 0>();
    assert_tuple_arity::<(u8,), 1>();
    assert_tuple_arity::<(u8, u8), 2>();
    const {
        match &Type::of::<(u8, u8)>().kind {
            TypeKind::Tuple(tup) => {
                let [a, b] = tup.fields else { unreachable!() };
                assert!(a.offset == 0);
                assert!(b.offset == 1);
                match (&a.ty.info().kind, &b.ty.info().kind) {
                    (TypeKind::Leaf, TypeKind::Leaf) => {}
                    _ => unreachable!(),
                }
            }
            _ => unreachable!(),
        }
    }
}

讨论:https://www.reddit.com/r/rust/comments/1q9o6jm/brandnew_nightly_experimental_feature_compiletime/

Rapier 物理引擎年度回顾

2025 年的工作重点是性能优化,特别是在 Web 端(WASM/JS):

  • 性能提升:最新的 NPM 包比 2024 年的版本快 2x 到 5x,原生版本也有显著提升。
  • 技术改进
    • 引入了**新的 BVH(层次包围盒)**实现,支持高效的自动重平衡和 SIMD 加速。
    • 新增了稀疏体素碰撞体(Sparse Voxel Collider),Rapier 是首个显式支持体素的通用刚体引擎。
    • 实现了持久岛屿(Persistent Islands)流形简化(Manifold Reduction),减少了每帧的计算开销。
    • 优化了 3D 摩擦力模型,使高接触场景(如方块堆叠)提速 25%。

重大架构变动:迁移至 glam

  • 线性代数库切换:Rapier 和 Parry 的 API 及内部实现从 nalgebra 迁移到了 glam
  • 动机glam 的 API 更简单,学习曲线更低,且与 rust-gpu 编译器后端有更好的兼容性。
  • 影响:Release 模式性能基本持平,但 Debug 模式提速约 20%。
  • 新库 glamx:Dimforge 推出了 glamx 库,补齐了 glam 缺失的位姿(Pose)、2D 旋转等几何运算功能,并提供与 nalgebra 的转换接口。

深入探索了多种跨平台 GPU 计算方案(WGSL, Slang, CubeCL, rust-gpu):

  • wgrapier:基于 WGSL 实现了可在浏览器运行的 GPU 物理引擎。
  • wgsparkl:基于 WGSL 的 MPM(物质点法)模拟库。
  • 最终选择:团队决定未来定位于 rust-gpu,因为它允许直接编写 no-std 的 Rust 代码并在 GPU 上运行,能最大程度实现 CPU 和 GPU 版本的代码复用。

2026 年目标:

  • 机器人学(Robotics)支持:提升多体关节(Multibody joints)的稳定性,引入更精确的约束求解器(参考 Mujoco),并改进 URDF 导入。
  • 基于 rust-gpu 的 GPU 物理:利用 rust-gpu 开发高性能、跨平台的刚体物理模拟。
  • 复兴 kiss3d:重启对 kiss3d 图形引擎的维护,使其成为一个简单易用的 2D/3D 渲染工具。

2025 年是 Dimforge 夯实基础、全面转向 glam 并向 GPU 物理迈进的关键一年。2026 年,他们将重点攻克机器人仿真和高性能 GPU 计算。

阅读:https://dimforge.com/blog/2025/01/09/the-year-2025-in-dimforge/

--

From 日报小组 苦瓜小仔

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页