@@ -19,35 +19,32 @@ They mostly consist of real-world crates.
19
19
one in the Rust ecosystem.
20
20
- ** clap-3.1.6** : A command line argument parser. A crate used by many Rust
21
21
programs.
22
+ - ** image-0.24.1** : Basic image processing functions and methods for
23
+ converting to and from various image formats. Used often in graphics
24
+ programming.
22
25
- ** clap-rs** : A command line argument parser. A crate used by many Rust
23
26
programs.
24
27
- ** cranelift-codegen** : The largest crate from a code generator. Used by
25
28
Firefox.
29
+ - ** cranelift-codegen-0.82.1** : The largest crate from a code generator. Used by
30
+ wasmtime.
26
31
- ** diesel** : A type safe SQL query builder. Utilizes the type system to
27
32
ensure a lot of invariants. Stresses anything related to resolving
28
33
trait bounds, by having a lot of trait impls for a large number of different
29
34
types.
30
- - ** encoding** : Character encoding support. Contains some large tables.
31
- - ** futures** : A futures implementation. Used by many Rust programs.
32
35
- ** helloworld** : A trivial program. Gives a lower bound on compile time.
33
36
- ** html5ever** : An HTML parser. Stresses macro parsing code significantly.
34
37
- ** hyper-2** : A fairly large crate. Utilizes async/await, and used by
35
38
many Rust programs.
36
- - ** inflate** : An old implementation of the DEFLATE algorithm. Stresses the
37
- compiler in certain ways.
38
39
- ** piston-image** : A modular game engine. An interesting Rust program.
39
40
- ** regex** : A regular expression parser. Used by many Rust programs.
40
41
- ** ripgrep** : A line-oriented search tool. A widely-used utility.
42
+ - ** ripgrep-13.0.0** : A line-oriented search tool. A widely-used utility.
41
43
- ** serde** : A serialization/deserialization crate. Used by many other
42
44
Rust programs.
43
45
- ** stm32f4** : A crate that has many thousands of blanket impl blocks.
44
46
- ** syn** : A library for parsing Rust code. An important part of the Rust
45
47
ecosystem.
46
- - ** tokio-webpush-simple** : A simple web server built with tokio. Uses futures
47
- a lot.
48
- - ** ucd** : A Unicode crate. Contains large statics that
49
- [ stress] ( https://github.com/rust-lang/rust/issues/53643 ) the borrow checker's
50
- implementation of NLL.
51
48
- ** unicode_normalization** : Unicode character composition and decomposition
52
49
utilities. Uses huge ` match ` statements that stress the compiler in unusual
53
50
ways.
@@ -85,8 +82,8 @@ compiler in interesting ways.
85
82
- ** issue-88862** : A MCVE of a program that had a
86
83
[ severe performance regression] ( https://github.com/rust-lang/rust/issues/88862 )
87
84
when trying to normalize large opaque types with late-bound regions.
88
- - ** keccak** : A cryptography algorithm. Contains a very high number of locals
89
- and basic blocks.
85
+ - ** keccak** : A cryptography algorithm. Contains a huge function with a very
86
+ high number of locals and basic blocks.
90
87
- ** many-assoc-items** : Contains a struct with many associated items, which
91
88
caused [ quadratic behavior] ( https://github.com/rust-lang/rust/issues/68957 )
92
89
in the past.
@@ -95,11 +92,6 @@ compiler in interesting ways.
95
92
one involving
96
93
[ ` exhaustive_patterns ` ] ( https://github.com/rust-lang/rust/pull/79394 ) ) of
97
94
` match ` code that caused bad performance in the past.
98
- - ** match-stress-enum** : Contains a match against a huge enum, which used to
99
- have [ quadratic runtime] ( https://github.com/rust-lang/rust/issues/7462 ) .
100
- - ** match-stress-exhaustive_patterns** : Contains code extracted from the ` syn `
101
- crate to amplify the perf degradation caused by the ` exhaustive_patterns ` , as
102
- measured [ here] ( https://github.com/rust-lang/rust/pull/79394 ) .
103
95
- ** projection-caching** : A small program that causes extremely, deeply nested
104
96
types which stress the trait system's projection cache. Removing that cache
105
97
resulted in hours long compilations for some programs using futures,
@@ -114,6 +106,9 @@ compiler in interesting ways.
114
106
with grid coordinates] ( https://github.com/urschrei/ostn15_phf ) that was
115
107
causing rustc to [ run out of
116
108
memory] ( https://github.com/rust-lang/rust/issues/36799 ) .
109
+ - ** ucd** : A Unicode crate. Contains large statics that
110
+ [ stress] ( https://github.com/rust-lang/rust/issues/53643 ) the borrow checker's
111
+ implementation of NLL.
117
112
- ** unify-linearly** : Contains many variables that all have equality relations
118
113
between them, which caused [ exponential
119
114
behavior] ( https://github.com/rust-lang/rust/pull/32062 ) in the past.
@@ -134,13 +129,21 @@ longest continuous data set for compiler performance. As a result, they are
134
129
quite old (e.g. 2017 or earlier), and not necessarily reflective of typical
135
130
Rust code being written today.
136
131
137
- - ** encoding** : See above.
138
- - ** futures** : See above.
132
+ - ** encoding** : An old crate providing character encoding support. Contains
133
+ some large tables.
134
+ - ** futures** : v0.1.0 of the popular ` futures ` crate, which was used by many
135
+ Rust programs. Newer versions of this crate (e.g. v0.3.21 from February 2021)
136
+ contain very little code, instead relying on sub-crates. This makes them less
137
+ interesting as benchmarks, because we only measure final crate compilation.
138
+ This is why there is no futures crate among the primary benchmarks.
139
139
- ** html5ever** : See above.
140
- - ** inflate** : See above.
140
+ - ** inflate** : An old implementation of the DEFLATE algorithm. Contains
141
+ a very large function containing many locals and basic blocks, similar to
142
+ ` keccak ` but less extreme.
141
143
- ** regex** : See above.
142
144
- ** piston-image** : See above.
143
145
- ** style-servo** : An old version of Servo's ` style ` crate. A large crate, and
144
146
one used by old versions of Firefox.
145
147
- ** syn** : See above.
146
- - ** tokio-webpush-simple** : See above.
148
+ - ** tokio-webpush-simple** : A simple web server built with a very old version
149
+ of tokio. Uses futures a lot, but doesn't use ` async ` /` await ` .
0 commit comments