diff --git a/collector/benchmarks/README.md b/collector/benchmarks/README.md index 3747dc0b3..97a7f8bba 100644 --- a/collector/benchmarks/README.md +++ b/collector/benchmarks/README.md @@ -100,6 +100,10 @@ programs. - **match-stress-exhaustive_patterns**: Contains code extracted from the `syn` crate to amplify the perf degradation caused by the `exhaustive_patterns`, as measured [here](https://github.com/rust-lang/rust/pull/79394). +- **projection-caching**: A small program that causes extremely, deeply nested + types which stress the trait system's projection cache. Removing that cache + resulted in hours long compilations for some programs using futures, + actix-web and other libraries with similiarly nested type combinators. - **regression-31157**: A small program that caused a [large performance regression](https://github.com/rust-lang/rust/issues/31157) from the past. - **token-stream-stress**: Constructs a long token stream much like the `quote` diff --git a/collector/benchmarks/projection-caching/Cargo.lock b/collector/benchmarks/projection-caching/Cargo.lock new file mode 100644 index 000000000..adaf5378a --- /dev/null +++ b/collector/benchmarks/projection-caching/Cargo.lock @@ -0,0 +1,158 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "futures" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28560757fe2bb34e79f907794bb6b22ae8b0e5c669b638a1132f2592b19035b4" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3dda0b6588335f360afc675d0564c17a77a2bda81ca178a4b6081bd86c7f0b" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c8ff0461b82559810cdccfde3215c3f373807f5e5232b71479bff7bb2583d7" + +[[package]] +name = "futures-executor" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29d6d2ff5bb10fb95c85b8ce46538a2e5f5e7fdc755623a7d4529ab8a4ed9d2a" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f9d34af5a1aac6fb380f735fe510746c38067c5bf16c7fd250280503c971b2" + +[[package]] +name = "futures-macro" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbd947adfffb0efc70599b3ddcf7b5597bb5fa9e245eb99f62b3a5f7bb8bd3c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3055baccb68d74ff6480350f8d6eb8fcfa3aa11bdc1a1ae3afdd0514617d508" + +[[package]] +name = "futures-task" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ee7c6485c30167ce4dfb83ac568a849fe53274c831081476ee13e0dce1aad72" + +[[package]] +name = "futures-util" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b5cf40b47a271f77a8b1bec03ca09044d99d2372c0de244e66430761127164" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "memchr" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" + +[[package]] +name = "pin-project-lite" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "proc-macro2" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "projection-caching" +version = "0.1.0" +dependencies = [ + "futures", +] + +[[package]] +name = "quote" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "slab" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" + +[[package]] +name = "syn" +version = "1.0.85" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" diff --git a/collector/benchmarks/projection-caching/Cargo.toml b/collector/benchmarks/projection-caching/Cargo.toml new file mode 100644 index 000000000..9347d4ecd --- /dev/null +++ b/collector/benchmarks/projection-caching/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "projection-caching" +version = "0.1.0" +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +futures = "0.3" + +[workspace] diff --git a/collector/benchmarks/projection-caching/src/main.rs b/collector/benchmarks/projection-caching/src/main.rs new file mode 100644 index 000000000..303b63baa --- /dev/null +++ b/collector/benchmarks/projection-caching/src/main.rs @@ -0,0 +1,23 @@ +use futures::{stream, TryStreamExt}; + +fn main() { + stream::empty::>() + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()) + .inspect_ok(|_| ()); +}