网易首页 > 网易号 > 正文 申请入驻

常量泛型:我们用Rust砍掉83%代码的那一夜

0
分享至

「三年前我们写数组的方式,全是错的。」一位密码学库维护者在内部复盘时这样写道。这不是事后诸葛亮——直到2021年3月Rust 1.51发布,他们才知道自己被迫维护的16份复制粘贴代码,本可以只用一份。

这个团队的故事,是常量泛型(const generics)最直观的商业案例:编译期精度如何转化为运行时性能,以及为什么"零成本抽象"不是口号而是可量化的工程决策。


问题:16份代码,16倍bug

他们的密码学库有个秘密——不是安全漏洞,是"不好意思在例会上提"的实现细节。

矩阵乘法有16个几乎一模一样的实现。不同尺寸,相同逻辑,用宏批量生成。代码量8347行,二进制膨胀340KB,编译慢到让人泡茶。最痛苦的是修bug:改一处,得手动同步16处。

根源很直接:Rust的类型系统允许泛型参数化类型,但不允许参数化数组长度。

他们的网络协议解析器更夸张。解析16字节头部?一个函数。32字节?复制粘贴改数字。64字节?再来一遍。团队真的写了16个这样的函数,逻辑完全相同,只是硬编码的尺寸不同。

「我不是在开玩笑,我们真的干了这事。」

转折点:2021年3月的那个稳定版本

Rust 1.51的发布说明里,常量泛型 stabilization 只占几行。但对这支团队,这是架构重写许可证。

常量泛型的核心能力:让类型参数化依赖于常量值,通常是整数。此前合法的代码:

// 对类型T泛型——一直都可以
struct Container {
data: Vec // T可以是任何类型
}

此前被拒绝的代码:

// 对尺寸SIZE泛型——Rust 1.51之前不行
struct FixedArray {
data: [T; N] // 编译器会喊:"N不是类型!"
}

区别看起来微小。但前者只是"装东西的容器",后者是"编译期已知尺寸的数组"——这直接决定了能否消除动态分配、能否让编译器生成SIMD指令。

重写之后:数字说话

团队用常量泛型重写后的结果:

• 代码量:从8347行降至约1400行(降幅83%)
• 二进制体积:减少340KB的宏膨胀代码
• 运行时性能:提升83%

性能 gains 的来源很具体。不是魔法,是两个此前被阻塞的优化:

第一,消除动态分配。数组尺寸编译期确定,栈分配代替堆分配。第二,编译器终于能正确向量化。之前宏生成的代码太复杂,SIMD优化器无法穿透;常量泛型让类型系统足够透明,自动向量化生效。

重写后的解析函数变成这样:

// 之后:一个函数,任意尺寸(终于!)
fn parse_header(
data: [u8; N] // N在编译期检查
) -> Header { ... }

16个函数合并为1个。修bug只需改一处。新协议支持新尺寸?加一行调用,不用复制粘贴。

为什么这件事值得现在关注

常量泛型稳定已四年,但理解其工程价值的案例仍不多。这个密码学库的迁移提供了可量化的参照:

83%代码删除率、83%性能提升、340KB二进制瘦身——这些数字来自"被迫用宏 workaround 三年"的真实债务。如果你维护的Rust代码库还在用宏生成不同尺寸的数组处理逻辑,这笔技术债的利息正在累积。

更深层的影响是设计模式的转变。常量泛型让"尺寸作为类型的一部分"成为一等公民,这意味着API可以在编译期拒绝非法尺寸组合,而不是运行时panic。对密码学、网络协议、嵌入式系统这类尺寸敏感领域,这是从"约定"到"强制"的质变。

团队最后留下一句话:「不是宏不好,是我们用错了地方。常量泛型把该在编译期做的事,还给了编译期。」

8347行到1400行。340KB到零。16个bug修复点到1个。这些数字定义了什么是"零成本抽象"——不是没成本,是成本发生在正确的阶段。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
演员陆毅被网友提醒嘴唇发紫,听劝去体检:检查下来“我是方的”,接下来要科学饮食、锻炼身体了

演员陆毅被网友提醒嘴唇发紫,听劝去体检:检查下来“我是方的”,接下来要科学饮食、锻炼身体了

天津生活通
2026-04-27 11:05:55
英国专家说得对:中国根本不是个国家,是个“穿了马甲的文明”

英国专家说得对:中国根本不是个国家,是个“穿了马甲的文明”

小虎新车推荐员
2026-04-11 05:07:34
1988年,胡因梦在父亲胡赓年葬礼上,一张罕见留影,她是李敖前妻

1988年,胡因梦在父亲胡赓年葬礼上,一张罕见留影,她是李敖前妻

普陀动物世界
2026-04-30 07:26:50
蔡一杰脑癌扩散!59岁频繁回内地农村老家,重温童年时光

蔡一杰脑癌扩散!59岁频繁回内地农村老家,重温童年时光

原梦叁生
2026-04-30 08:10:48
连胜3名中国选手!43岁墨菲回应赵心童出局:斯诺克之神庇佑魔咒

连胜3名中国选手!43岁墨菲回应赵心童出局:斯诺克之神庇佑魔咒

风过乡
2026-04-30 07:15:39
35岁女子去做私处紧缩,缝针断在肉里,医生徒手掏了半小时没找着

35岁女子去做私处紧缩,缝针断在肉里,医生徒手掏了半小时没找着

离离言几许
2026-04-21 19:53:18
20年代,林徽因与冰心郊游的唯一合影,这是他们的真实容颜

20年代,林徽因与冰心郊游的唯一合影,这是他们的真实容颜

以茶带书
2026-04-25 19:22:44
3-0梦幻开局到10-13崩盘!赵心童卫冕翻车,这3大短板太致命

3-0梦幻开局到10-13崩盘!赵心童卫冕翻车,这3大短板太致命

桃叶渡春
2026-04-30 08:37:37
悬念不大了!NBA季后赛8强,大概率就是这8支!两大冠军热门淘汰

悬念不大了!NBA季后赛8强,大概率就是这8支!两大冠军热门淘汰

篮球扫地僧
2026-04-30 07:08:57
暗流涌动!穆里尼奥回归皇马倒计时,三大核心球员集体心生抵触

暗流涌动!穆里尼奥回归皇马倒计时,三大核心球员集体心生抵触

奶盖熊本熊
2026-04-30 04:39:28
北京车展:售价718万元,红旗金葵花国礼亮相,竞争劳斯莱斯幻影

北京车展:售价718万元,红旗金葵花国礼亮相,竞争劳斯莱斯幻影

沙雕小琳琳
2026-04-30 01:59:45
中国遭警告:拒收将面临供应中断!

中国遭警告:拒收将面临供应中断!

共工之锚
2026-04-28 23:20:50
缅北电诈分子找到新据点:带水上乐园、人造沙滩的高端楼盘

缅北电诈分子找到新据点:带水上乐园、人造沙滩的高端楼盘

红星新闻
2026-04-29 18:19:15
广东3消息!陈老板发表讲话,徐杰深夜发声,徐昕与少东家握手

广东3消息!陈老板发表讲话,徐杰深夜发声,徐昕与少东家握手

多特体育说
2026-04-29 23:35:23
“更打实力的混合战争”来了

“更打实力的混合战争”来了

中国新闻周刊
2026-04-30 07:32:09
海牙国际刑事法院就杜特尔特案作出终审裁定,莎拉出访多国

海牙国际刑事法院就杜特尔特案作出终审裁定,莎拉出访多国

百科密码
2026-04-29 16:43:50
CBA季后赛太疯狂了!三大强队惨遭逆袭:广东被爆冷辽宁晋级稳了

CBA季后赛太疯狂了!三大强队惨遭逆袭:广东被爆冷辽宁晋级稳了

篮球快餐车
2026-04-30 05:25:06
遇刺两天后,特朗普还是发飙了,22人全被开除,美议员要弹劾总统

遇刺两天后,特朗普还是发飙了,22人全被开除,美议员要弹劾总统

混沌录
2026-04-29 23:40:13
和少妇这顿饭,吃得圆滚滚,眼睛也看得心满意足

和少妇这顿饭,吃得圆滚滚,眼睛也看得心满意足

飛娱日记
2026-04-28 07:50:45
移民局最新政策:所有在审庇护、绿卡和公民全部重新背景调查

移民局最新政策:所有在审庇护、绿卡和公民全部重新背景调查

大洛杉矶LA
2026-04-30 06:33:27
2026-04-30 09:52:49
赛博兰博
赛博兰博
专注捣鼓AI效率工具,试图在这个时代留下数字分身的探索者。
1950文章数 25关注度
往期回顾 全部

科技要闻

四巨头财报齐发:AI已经不只是风口

头条要闻

牛弹琴:特朗普自以为找到妙计对伊放话 伊朗估计气懵了

头条要闻

牛弹琴:特朗普自以为找到妙计对伊放话 伊朗估计气懵了

体育要闻

一场九球狂欢,各路神仙批量下凡

娱乐要闻

马頔一句话,孙杨妈妈怒骂节目组2小时

财经要闻

一场20年级别的供应危机,在眼前了!

汽车要闻

技术天花板再摸高 全能型的奕境X9首秀

态度原创

教育
时尚
本地
健康
游戏

教育要闻

五年级数学:已知三角形面积是20、30和35,求阴影面积

春季穿衣千万别太暗沉!试试蓝白配色、选基础款裤子,大方得体

本地新闻

用青花瓷的方式,打开西溪湿地

干细胞治烧烫伤能用了么?

业内人士谈《马拉松》惨淡:可惜索尼没砸大钱宣传!

无障碍浏览 进入关怀版