< 返回版块

Mike Tang 发表于 2026-10-09 09:07

Bevy 0.20:Solari 支持 macOS

Bevy 是用 Rust 写的数据驱动游戏引擎。0.20.0 已发到 crates.io,创建时间 2026-10-08T22:31:14Z。发布说明写到 227 位贡献者、817 个 pull request。从 0.19 升级可以看 0.19 to 0.20 Migration Guide。

Solari 是 Bevy 的实时路径追踪渲染器。ReSTIR 改进后,渲染大体无偏。移动物体的阴影不再滞后。非金属材质在运动时的反射闪烁减少。ReSTIR 改成可选,默认关闭。Bevy 0.19 里开过 Solari 的项目,如果关掉 ReSTIR 影响画面,需要重新打开 SolariLighting::restir。关掉之后,多光源场景的阴影质量下降,运动中会缺阴影。场景管理改成 retained,CPU 开销下降。可调项包括 world cache size、每像素光源采样数、时间累积和路径追踪反弹次数。

光照现在包括 Atmosphere,以及相机上的 EnvironmentMapLight。原有的 DirectionalLight 和自发光网格仍然可用。PointLight、SpotLight、RectLight 还没接上,对应改动在 bevy#25913。Solari 可以通过 Metal 在 macOS 上跑。bevy_solari 目前没有内置的 macOS 降噪器。dlss_wgpu 更新到最新 DLSS,支持 DLSS-RR 4.5。从 0.19 接着用 DLSS 的项目需要换成新的 DLSS SDK,否则会编译失败。

BSN 语法这一轮有几处改动。场景引用都要加 @ 前缀。组件值可以去掉 template_value。实现了 Default 和 Clone 的枚举不再需要 VariantDefaults 或 FromTemplate,每个字段都要写出来。实体列表用 -- 分隔,这个位置的 () 和逗号已弃用。场景实体在全部子实体生成完后触发 Ready。Add 事件是自上而下触发的,当时子实体还不可用。

Bevy Feathers 增加了 Color Input、Scrollable List View、Dropdown Selection 和 Lazy Menu。Number Input 可以拖动。另外加了 Headless Tab Widgets。着色器正式采用 WESL,这是 WGSL 的标准化扩展。Sprite 可以写自定义 shader material。2D mesh material 可以像 3D 一样扩展。新增 pan orbit camera,可以按 CAD 方式浏览场景。

原文链接:https://bevy.org/news/bevy-0-20/

M4 上 std::simd 对齐手写 NEON

这是一份在 Apple M4 上比较 std::simd 和手写 NEON 的基准测试,仓库是 Erio-Harrison/simd_benchmark。9 个场景各写了三套实现:scalar、std::simd、NEON。测试机是 2024 款 MacBook Pro,CPU 是 Apple M4,rustc 是 1.95.0-nightly(2026-02-01)。命令是 cargo run --release,3 次运行取平均。每个实现先预热 100 毫秒,再在 5 轮轮转里采样 500 毫秒。报告值是单次迭代时间的中位数。

第一版写过,std::simd 相对 scalar 从快 9 倍到慢 7.7 倍,交错数据会暴露可移植 SIMD 的限制。作者后来更正了这个结论。RGB 转灰度的 NEON 第一版记成 4 倍,有人跑 cargo bench 得到大约 1 倍。偏慢的结果来自 SIMD 路径里的 scalar 循环,包括 RGB 去交错和 i16 扩到 i32。修复用了 simd_swizzle! 和 .cast()。点积里 std::simd 用的是 f32x8,NEON 用的是一个 f32x4 累加器。计数字节是 u8x32 对 u8x16。

对齐向量宽度、累加器数量、横向归约次数和算法之后,9 个场景里两个 API 的差距在 5% 以内。Find Byte 除外,NEON 快 9%,作者记到原因是 load 寻址。对齐后的中位数:RGB 转灰度(200 万像素)三套都是 0.090 毫秒;音量调整(530 万采样)是 0.447 / 0.450 / 0.452 毫秒;混音是 0.279 / 0.280 / 0.278 毫秒。统计换行(10MB)scalar 1.228 毫秒,std::simd 0.193 毫秒(6.36 倍),NEON 0.192 毫秒(6.40 倍)。查找字节 scalar 2.494 毫秒,std::simd 0.181 毫秒(13.8 倍),NEON 0.165 毫秒(15.1 倍)。1000 万元素点积是 4.987 / 1.029 / 1.059 毫秒,对应 4.85 倍和 4.71 倍。1024×1024 矩阵乘向量是 0.433 / 0.077 / 0.077 毫秒,5.62 倍。范围检查是 2.486 / 0.773 / 0.775 毫秒。有序检查是 2.473 / 0.548 / 0.569 毫秒。

128 位 ISA 上没有 8 宽 f32 寄存器。f32x8 会被降成两个 f32x4 寄存器,循环里出现两条独立 FMA 链。单个 NEON 累加器受 FMA 延迟限制。两条累加链之后,两边都碰到内存带宽上限。作者记录,80MB 大约 1.1 毫秒,单核大约 75GB/s。std::simd 里分开写的乘法和加法不会自动合成 FMA,需要 std::simd::StdFloat 的 mul_add。Reddit 帖子里还记到,Mask::<u8, 32>::to_bitmask() 在 NEON 上没有单条对应指令,16 路比 32 路更快。靠近每周期一次迭代的循环里,一个 .enumerate() 本身带来 13% 开销。音频场景的 scalar 基线已经被自动向量化成 shadd,三套实现落到同一条指令。

原文链接:https://github.com/Erio-Harrison/simd_benchmark/blob/master/BLOG.md

P99 CONF:五场 Rust 演讲

这是 P99 CONF 的 Rust 演讲清单。会议线上免费,日期是 2026-10-21 和 2026-10-22,站点是 https://p99conf.io/ 。演讲者会在线回答问题。

五场分别是:Carl Lerche,The Age of Slow Apps Is Over: Topcoat Brings Rust to Web Apps;Dylan Martin,Rewriting PostHog’s Feature Flag Evaluation Infrastructure in Rust;Evan Chan,Building a Real-World 14 GB/sec io_uring + tokio + Arrow + Rust Pipeline;Hayden Stainsby,AI-Assisted Profiling for Rust Services in Production;Piotr Gankiewicz,Building Ultra-Performant Message Streaming for Apache Iggy with Rust。

原文链接:https://www.reddit.com/r/rust/comments/1x0esx2/rust_talks_at_p99_conf_free_virtual/

CppCast 412:Rust 与 C++ 互操作

CppCast 第 412 期标题是 Safety and Interoperability with Rust and C++,发布日期 2026-10-05。主持人是 Mathieu 和 Jason,嘉宾是 Jon Bauman。

这一期讨论 safety 的几类含义,哪些能保证、哪些不能,C++ 怎样变成内存安全语言,以及 Rust 和 C++ 放在一起时的问题。Jon 在找继续这项工作的赞助,联系邮箱是 Joncppcast@shumi.org。

节目笔记列出的材料包括 WG21 论文 P3874R1《Should C++ be a memory-safe language?》,Rust Foundation 的 C++ Interoperability Initiative problem statement,以及 BorrowSanitizer。BorrowSanitizer 是一个 LLVM sanitizer,用来找 Rust、C、C++ 之间的别名违规。笔记里还有 Rust Project Goals 2025H2 的 C++/Rust Interop Problem Space Mapping。

原文链接:https://cppcast.com/safety_and_interoperability_with_rust_and_cpp/


From Rust中文社区 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页