-
-
Notifications
You must be signed in to change notification settings - Fork 84
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
Large number of #[async_trait]
implementations greatly increases compile time
#174
Comments
https://users.rust-lang.org/t/extremely-slow-compile-times-in-test-suite/61842/2 is the right diagnosis. Something is accidentally quadratic in rustc when this kind of thing happens. If evaluate_obligation is taking nontrivial time that's a rustc bug so rust-lang/rust#87012 is the appropriate place to track it. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
In the test suite for the
mongodb
crate, we included a large number of#[async_trait]
implementations, and this lead to roughly 1 minute of compile type for any incremental change to the tests (viacargo check --tests
). Using-Zself-profile
, it was determined that nearly all of this time was spent inevaluate_obligation
. After converting all of the#[async_trait]
s and their implementations to vanilla traits that returnedBoxFuture
manually, theevaluate_obligation
portion of the compilation time was almost completely eliminated.For more context, see rust-lang/rust#87012 (comment).
I'm not sure if this is a bug in the implementation of
async_trait
or simply a limitation of doing macro-based traits, but I figured it was worth reporting here. Let me know if there's any more useful information I can provide.The text was updated successfully, but these errors were encountered: