GMTC 全球大前端技术大会 8 折涨价倒计时 2 天,现在购票立减 ¥960 ! 了解详情
写点什么

从 14s 到 4s,我如何将 macOS 上的 Rust 增量编译时间减少 70%?

2021 年 4 月 19 日

从14s到4s,我如何将 macOS上的 Rust 增量编译时间减少70%?

Rust 1.51 发布之后,我注意到里面有一个新的特性 Cargo 可以帮助缩短 macOS 的编译时间。升级启用了这个选项周,我的增量开发重建时间从 14s 缩短到了 4s。

加快构建速度


Rust 1.51 发行说明中,有一章节是专门介绍如何配置调试信息。默认情况下,在 macOS 上,rustc 会运行一个名为 dsymutil 的工具,该工具会分析二进制文件,然后构建调试信息目录。


如果使用 cargo run 来开发构建,那么可能每次都会构建此调试信息,因为它是开发配置文件的默认设置。而在 Rust 1.51 中,我们可以配置 split-debuginfo,使其跳过 dsymutil。


Rust 1.51 发行说明:


现在,Rust backtraces 切换到使用其它后端,该后端支持加载 debuginfo 无需运行 dsymutil,并且该功能目前已经稳定。


有人认为,这个功能很快就会成为 macOS 的默认配置。


如何配置呢?首先打开 Cargo.toml 并添加以下选项:


[profile.dev]split-debuginfo = "unpacked"
复制代码


如果你之前禁用了 debug,那么就无法生成调试信息,自然也就无法看到速度提升。如果你之前因为编译时间太久而禁用了 debug,那么现在可以重新打开,试试这个新方法吧。

到底能快多少?


Cargo 新特性到底能帮助 debug 提升多少呢?我自己构建了一个 Puzzle Panda 的拼图游戏网站,该网站是使用 Rust 编写的后端 API。经过我自己的测试,cargo run dev rebuilds 从之前的 14s 成功减少到了 4s,大约节省了 70% 的构建时间。


就项目规模而言,Puzzle Panda 的 Rust API 很小,但是它其中引入了很多传递性依赖关系,因此构建时间很长。14s 的 Dev rebuilds 时间是一直困扰我的问题,但是现在 split-debuginfo 的出现解决了我的难题。


至于 split-debuginfo 在中型 Rust 项目中,是否会有一样的项目,目前我还不确定。希望有感兴趣的人,能够实践并分享给我们。


参考链接:


https://jakedeichert.com/blog/reducing-rust-incremental-compilation-times-on-macos-by-70-percent/

2021 年 4 月 19 日 14:092462

评论

发布
暂无评论
发现更多内容

第二周作业

赵龙

OOD设计原则之DIP

无心水

极客大学架构师训练营 面向对象设计原则 OOD SOLID

第 2 周 - 课后作业

大海

分布式唯一ID解析

Chank

Spring中依赖倒置原则的理解

李广富

架构师训练营 Week 02 作业

Wancho

【架构师训练营】第2周作业

花生无翼

极客大学架构师训练营

北京疫情反弹 区块链怎样破解食品溯源难题?

CECBC区块链专委会

区块链技术 商品溯源 上链

架构师训练营第二周作业

子豪sirius

区块链在农业领域能有什么用武之地?

CECBC区块链专委会

区块链技术 上链 农业链 三农

第 02 周 开发编程框架 命题作业

Jaye

软件设计原则

jason

软件设计原理

李海明

专栏

使用接口隔离原则优化 Cache 类的设计

李广富

架构师训练营第0期第二周作业

无名氏

依赖倒置原则 DIP 依赖反转原则

第 2 周 - 学习总结

大海

极客大学架构师训练营

架构师训练营-week2-作业

晓-Michelle

极客大学架构师训练营

架构师实现自己架构的主要手段

_MISSYOURLOVE

极客大学架构师训练营

极客大学架构师训练营 编程的本质与未来 第三课 听课总结

John(易筋)

极客时间 极客大学 架构师 极客大学架构师训练营 编程的未来

第二周学习总结

赵龙

架构师训练营第二周作业 (3)

hiqian

架构师训练营第二周 - 总结

无心水

极客时间 架构师 极客大学架构师训练营 23种设计模式 面向对象设计原则

设计原则之依赖倒置和接口隔离

林昱榕

极客大学架构师训练营 依赖倒置 设计原则 接口隔离

week02 小结

Geek_196d0f

架构师训练营第二周学习总结

子豪sirius

Flink on Zeppelin (3) - Streaming篇

章剑锋_Jeff

大数据 flink 流计算 Zeppelin

架构师训练营 -week2-总结

sljoai

第二周作业

李海明

依赖倒置 接口隔离原则

架构师训练营 - 第二周作业

zcj

极客大学架构师训练营

架构师训练营-week2-作业

sljoai

作业 week

架构师训练营第2周总结

Glowry

极客大学架构师训练营

从14s到4s,我如何将 macOS上的 Rust 增量编译时间减少70%?-InfoQ