Making a Rust crate compile faster
In this stream, we try to figured out why the `cargo` crate takes so long to build. We don't ultimately make a meaningful improvement, but we do explore the many tools that exist to help with both analysis and remediation, and the value (and shortcomings) of each one.
Why is my Rust build so slow? https://fasterthanli.me/articles/why-is-my-rust-build-so-slow
-Zsparse-registry https://blog.rust-lang.org/2022/06/22/sparse-registry-testing.html
cargo --timings https://blog.rust-lang.org/2022/04/07/Rust-1.60.0.html#cargo---timings
mold https://github.com/rui314/mold
-Zshare-generics https://github.com/rust-lang/rust/blob/1f34da9ec8a85b6f86c5fa1c121ab6f88f2f4966/compiler/rustc_middle/src/ty/instance.rs#L112
cargo-bloat https://github.com/RazrFalcon/cargo-bloat
Non-generic inner functions. https://www.possiblerust.com/pattern/non-generic-inner-functions
cargo-llvm-lines https://github.com/dtolnay/cargo-llvm-lines
-Zsymbol-mangling=v0 https://rust-lang.github.io/rfcs/2603-rust-symbol-name-mangling-v0.html
-Zself-profile https://rust-lang.github.io/compiler-team/working-groups/self-profile/
crox https://github.com/rust-lang/measureme/blob/master/crox/README.md
miniserde https://github.com/dtolnay/miniserde
watt https://github.com/dtolnay/watt
Where rustc spends its time. https://wiki.alopex.li/WhereRustcSpendsItsTime
0:00:00 Introduction
0:02:27 Setting up a test project
0:08:25 cargo build --timings
0:16:45 Linking
0:29:30 cargo bloat
0:40:50 -Zshare-generics
0:47:00 cargo-llvm-lines
1:24:56 rustc -Zself-profile
2:04:36 perf record rustc
2:13:10 miniserde
2:16:35 watt
2:25:00 Conclusion
2:25:40 Q&A
2:26:58 Overhead of monomorphization
2:27:51 Rust build time in 2-3 years
2:30:04 Do this again with new tools?
2:30:59 Breaking Cargo into subcrates
2:32:20 Is --release time important?
2:32:56 Automatic inner functions
2:34:46 Rust build time and adoption
2:37:00 Proc macro build time
2:41:25 Feature creep in Rust
2:43:05 Outroduction
Live version with chat: https://youtu.be/vxB4R2Guwp8