clap
clap copied to clipboard
Reduce compilation time
The clap
crate (not counting dependencies) takes about 11 seconds to compile. All dependencies put together take roughly the same amount of time.
I have a few thoughts on how to improve the situation. Generally, compile time wins these days are accomplished through "compile less code", hence:
- [ ] Feature-gate
#[derive(Clone, Copy, Eq...]
. The features should probably be fine-grained, likeimpl-traits-eq
enablesEq + PartialEq
. Plus the "enable everything"impl-traits
feature that implies all the traits.- [ ] Avoid using derives and use some sort of
STRUCT!
macro as shown here. It turns out that even built-in derives have impact on compilation time when you have lots of them, and every struct here has#[derive(Debug)]
.
- [ ] Avoid using derives and use some sort of
- [x] Optimize
proc-macro-error
(dropsyn-mid
dep). I had already done that but decided to play around a bit more and then forgot about it. Oops. - [ ] Make clap modular so developers could choose exactly the set of features they need and avoid compile the others. I'll crate a separate issue a bit later.
The list is probably not exhaustive...
Hey! If you want I can tackle down the trait implementation features :) How fine-grained do you want it to be though?
Sure, you can try, but keep in mind that the real goal is to reduce compilation time. If the measurements will show no real difference (at least half second, everything below the threshold is noise), I will say "well we tried" and move on to other ideas.
Sure thing! Could you tell me how to managed to time the compilation? And create the visuals for it as well :)
The invocation was
cargo clean # make sure the we build from scratch
cargo +nightly build -Z timings -p clap:3.0.0-beta.1 --features "yaml unstable"
This will create cargo-timing-<HASH>.html
file that you can open in your web browser and see the adorable stats you were so excited about :) Then I uploaded the raw html on gist.github.com
and linked it through gistpreview.github.io
so you see the rendered version instead of raw HTML guts.
The
clap
crate (not counting dependencies) takes about 11 seconds to compile
Hi @CreepySkeleton, I suppose this is a "cold" compilation of a small Hello World-style program which depends on Clap? As a developer, I would be interested in the incremental compilation time when I change my application by, e.g., adding a new command line flag.
Could you perhaps measure that as well?