-
-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Reduce compilation time #2037
Comments
Hey! |
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 |
With being able to accept owned types now, `clap_derive` no longer needs `once_cell` to make dynamic data static. This helps towards clap-rs#1365, clap-rs#2037
With being able to accept owned types now, `clap_derive` no longer needs `once_cell` to make dynamic data static. This helps towards clap-rs#1365, clap-rs#2037
With being able to accept owned types now, `clap_derive` no longer needs `once_cell` to make dynamic data static. This helps towards clap-rs#1365, clap-rs#2037
The immediate benefit is binary size but this also makes us more flexible on the implementation, like allowing wrapping of `StyledStr`. This removed 12 KiB from `.text` This helps towards clap-rs#1365 and probably clap-rs#2037
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? |
All features
No features
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:
#[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.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)]
.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.The list is probably not exhaustive...
The text was updated successfully, but these errors were encountered: