< 返回版块

Mike Tang 发表于 2026-09-17 09:04

尝试让循环自动向量化

作者 jsgroth 以两段 f32 数组的点积为例,说明 Rust 编译器在何种条件下会(以及不会)对循环做 auto-vectorization。在 opt-level=3target-cpu=x86-64 下,iter::zip + fold 的浮点累加编译结果会用到 SSE 标量指令(addss / mulss / movss),并未真正按向量宽度并行;开启 AVX2+FMA 后也只是换成 VEX 编码的同类标量指令。改成手写 for 循环结果相同。

核心原因是 IEEE 754 浮点加法不满足结合律,编译器不能把标量累加重排成“按 4/8 路向量累加再水平求和”,否则可能改变部分输入的精确结果。同一逻辑的整数版本可以自动向量化(paddd / pmulld / movdqu)。作者演示了用 as_chunks::<4>() 手动分块后,浮点版本可生成 addps / mulps;进一步使用 Rust 1.98 稳定的浮点 algebraic 运算(如 algebraic_add / algebraic_mul)后,可在允许代数等价重排的前提下直接得到向量化代码,并在启用 AVX 时扩展到 256-bit 向量。文中汇编均基于 Compiler Explorer 与 Rust 1.98.0。

原文链接:https://jsgroth.dev/blog/posts/trying-to-make-a-loop-auto-vectorize/

Veloren 的若干不同设计选择

Veloren 核心开发者 Joshua Barretto 总结该开源体素 MMO 在工程上的一些非常规选择。游戏基于 ECS:在 48 线程服务器上可达到约 50% 核心利用率,同时支撑 500 名以上在线玩家与数以万计实体交互。玩家与 NPC 尽量共用同一套物理、Controller 输入、技能与经验系统;NPC 的控制来自 agent 决策树,而不是另一套移动代码。

地形侧使用内部称为 chonk 的列/块结构,在压缩与随机访问之间折中。世界在启动时先以较低分辨率预生成,再在玩家靠近时用插值与噪声补细节,从而支持始终下坡的长河等全局约束,并生成远景 LoD。运行时还有 rtsim(Real Time SIMulation):NPC 离开玩家视距后并入全图仿真,继续推进任务、势力与部分经济行为。设计上尽量避免“隐形墙”,并把玩法放在同一物理世界空间(含深层洞穴与光照隔离)。

原文链接:https://blog.jsbarretto.com/post/veloren

mezura:快速准确的代码行数统计工具

mezura 是用 Rust 写的代码行数统计工具(CLI / 库 / MCP server),强调在速度之外给出可解释、可配置的计数。它按文件内容识别语言(处理扩展名冲突)、跳过 minified/生成文件与伪匹配扩展名、支持自定义关键字计数(如 class/struct,且不计字符串与注释内出现)、HTML/Vue/Svelte/Astro 内嵌脚本样式分语言统计,以及按 module 分组、日志历史与 git revision diff。

计数模型默认按“行内容”判定(content);也可用 --counting region 对齐多数工具的区域模型。提供 JSON 输出与 MCP,便于编程助手直接调用。linebench(3 次预热 + 30 次计时)对比中,作者给出相对 scc / tokei 更快的结果(文中 Linux 上 tokei 约 2.50×、scc 约 1.26× 量级,具体以仓库表格为准)。安装:cargo install mezura,亦提供各平台预编译二进制。仓库:https://github.com/subamanis/mezura 。

原文链接:https://github.com/subamanis/mezura

CO3:迈向更完整的 Rust/C FFI 模型

作者 mversic 介绍 CO3:一套面向 Rust 与 C ABI 双向接口的 FFI 方案,目标是尽量用纯 Rust 声明导入/导出,并覆盖函数、静态项、方法、不透明类型,以及 sized/DST、niche、trap value、所有权传递与 #[soft] 写回等细节。声明风格接近现有 Rust 习惯,通过 ffi!ReprC 等把类型降到 C 兼容表示。

针对 C ABI 上不存在泛型的问题,CO3 提供静态单态化与运行时 tag 分发(dyn(Tag))两套路径,并可配置符号命名与失败处理。配套工作包括 disjoint_impls(按关联类型划分不重叠 impl)与 rust-spec(用关联类型刻画 Layout/Size/Alignment/Trap/Niche 等轴)。作者称库已有较完整测试,并指向 rs-odbc 作为完整用例;后续计划与 cbindgen/cbindgen 类工具更好集成。

原文链接:https://mversic.github.io/co3/


From Rust中文社区 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页