2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

  • 2021-04-19
  • 本文字数:781 字

    阅读完需:约 3 分钟

从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-04-19 14:094361

评论

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

填问卷抽大奖,中奖绝缘体的跨年福利快来领取!

InfoQ写作社区官方

热门活动

技术“开源”对于金融业软件发展的影响

Speedoooo

安全 ios开发 APP开发 Andriod开发 小程序容器

使用亚马逊云科技DevOps 工具构建 InnerSource 生态系统

亚马逊云科技 (Amazon Web Services)

开源 InnerSource

28天写作感想

Tiger

28天写作

网络安全好学吗?手把手教你学主动信息收集,网络安全基础教程

学神来啦

网络安全 信息安全 渗透测试· kali kali Linux

HDFS源码解析:教你用HDFS客户端写数据

华为云开发者联盟

hdfs block appendChunk

固定资产管理平台系统解决方案

低代码小观

企业管理 资产管理 CRM 企业管理系统 CRM系统

基于磁盘量身定制,十亿规模高效向量检索方案

Zilliz

向量检索 anns 向量计算

兄弟要盘吗?

为自己带盐

爬虫 dotnet 28天写作 12月日更

Linux之atime,ctime,mtime的区别

入门小站

Linux

60 K8S之EFK日志管理系统

穿过生命散发芬芳

k8s 28天写作 12月日更

尚硅谷大数据之Canal视频教程发布!

@零度

大数据

面试官:方法重写时需要注意哪些问题?

王磊

Kafka 消息存储与索引设计

编程江湖

kafka

平凯星辰获评 《金融电子化》2021 金融业新技术应用创新突出贡献奖

PingCAP

☕【权限设计系列】「认证授权专题」微服务架构的登陆认证问题

码界西柚

微服务架构 12月日更 权限认证机制 授权设计

Spring框架基础知识(03)

海拥(haiyong.site)

28天写作 12月日更

梦想起航

向往

盘点2021

2021 优秀开源项目公布,Apache APISIX 位列其中!

API7.ai 技术团队

api 网关 Apache APISIX 优秀开源项目

QCon-oCPX多目标多场景联合建模在OPPO的实践

安第斯智能云

算法

在线JSON转PHP Array工具

入门小站

工具

助车企升级,旺链科技与南方电网、联想等名企同斩获「创新案例奖」

旺链科技

区块链 产业区块链 供应链金融

域名基本信息查询小技巧

喀拉峻

网络安全 安全 信息安全

【转】java开发之MyBatis 原理与核心组件

@零度

mybatis JAVA开发

大型集团企业云管平台建设参考架构

华为云开发者联盟

架构 运维 IT治理 分布式部署 ManageOne

通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩

汪子熙

Kubernetes k8s 28天写作 docker build 12月日更

架构训练营模块三作业

zhongwy

架构实战营 「架构实战营」

【2021废钢铁大会】拾起卖旗下天津城矿再生资源回收有限公司三获“全国优质废钢加工配送企业”称号

InfoQ 天津

前端React 开发中必须知道的5个技巧

@零度

前端开发 React

带你认识三种kafka消息发送模式

华为云开发者联盟

kafka 时间 异步 消息发送 producer

【转】大数据开发之Spark面试八股文

@零度

大数据 spark

从14s到4s,我如何将 macOS上的 Rust 增量编译时间减少70%?_大前端_jakedeichert_InfoQ精选文章