mirror of
https://github.com/astral-sh/ruff.git
synced 2025-07-23 13:05:06 +00:00
![]() ## Summary Now that we've made the large-unions benchmark fast, let's make it slow again! This adds a following operation (checking `len`) on the large union, which is slow, even though building the large union is now fast. (This is also observed in a real-world code sample.) It's slow because for every element of the union, we fetch its `__len__` method and check it for compatibility with `Sized`. We can make this fast by extending the grouped-types approach, as discussed in https://github.com/astral-sh/ruff/pull/17403, so that we can do this `__len__` operation (which is identical for every literal string) just once for all literal strings, instead of once per literal string type in the union. Until we do that, we can make this acceptably fast again for now by setting a lowish limit on union size, which we can increase in the future when we make it fast. This is what I'll do in the next PR. ## Test Plan `cargo bench --bench red_knot` |
||
---|---|---|
.. | ||
benches | ||
resources | ||
src | ||
Cargo.toml | ||
README.md |
Ruff Benchmarks
The ruff_benchmark
crate benchmarks the linter and the formatter on individual files:
# Run once on the "baseline".
cargo bench -p ruff_benchmark -- --save-baseline=main
# Compare against the "baseline".
cargo bench -p ruff_benchmark -- --baseline=main
# Run the lexer benchmarks.
cargo bench -p ruff_benchmark lexer -- --baseline=main
See CONTRIBUTING.md on how to use these benchmarks.