## Summary
I had always assumed that `NoHashHasher` would be faster when using
integer keys, but benchmarking shows otherwise:
```
linter/default-rules/numpy/globals.py
time: [66.544 µs 66.606 µs 66.678 µs]
thrpt: [44.253 MiB/s 44.300 MiB/s 44.342 MiB/s]
change:
time: [-0.1843% +0.1087% +0.3718%] (p = 0.46 > 0.05)
thrpt: [-0.3704% -0.1086% +0.1847%]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
linter/default-rules/pydantic/types.py
time: [1.3787 ms 1.3811 ms 1.3837 ms]
thrpt: [18.431 MiB/s 18.466 MiB/s 18.498 MiB/s]
change:
time: [-0.4827% -0.1074% +0.1927%] (p = 0.56 > 0.05)
thrpt: [-0.1924% +0.1075% +0.4850%]
No change in performance detected.
linter/default-rules/numpy/ctypeslib.py
time: [624.82 µs 625.96 µs 627.17 µs]
thrpt: [26.550 MiB/s 26.601 MiB/s 26.650 MiB/s]
change:
time: [-0.7071% -0.4908% -0.2736%] (p = 0.00 < 0.05)
thrpt: [+0.2744% +0.4932% +0.7122%]
Change within noise threshold.
linter/default-rules/large/dataset.py
time: [3.1585 ms 3.1634 ms 3.1685 ms]
thrpt: [12.840 MiB/s 12.861 MiB/s 12.880 MiB/s]
change:
time: [-1.5338% -1.3463% -1.1476%] (p = 0.00 < 0.05)
thrpt: [+1.1610% +1.3647% +1.5577%]
Performance has improved.
linter/all-rules/numpy/globals.py
time: [140.17 µs 140.37 µs 140.58 µs]
thrpt: [20.989 MiB/s 21.020 MiB/s 21.051 MiB/s]
change:
time: [-0.1066% +0.3140% +0.7479%] (p = 0.14 > 0.05)
thrpt: [-0.7423% -0.3130% +0.1067%]
No change in performance detected.
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) high mild
1 (1.00%) high severe
linter/all-rules/pydantic/types.py
time: [2.7030 ms 2.7069 ms 2.7112 ms]
thrpt: [9.4064 MiB/s 9.4216 MiB/s 9.4351 MiB/s]
change:
time: [-0.6721% -0.4874% -0.2974%] (p = 0.00 < 0.05)
thrpt: [+0.2982% +0.4898% +0.6766%]
Change within noise threshold.
Found 14 outliers among 100 measurements (14.00%)
12 (12.00%) high mild
2 (2.00%) high severe
linter/all-rules/numpy/ctypeslib.py
time: [1.4709 ms 1.4727 ms 1.4749 ms]
thrpt: [11.290 MiB/s 11.306 MiB/s 11.320 MiB/s]
change:
time: [-1.1617% -0.9766% -0.8094%] (p = 0.00 < 0.05)
thrpt: [+0.8160% +0.9862% +1.1754%]
Change within noise threshold.
Found 12 outliers among 100 measurements (12.00%)
9 (9.00%) high mild
3 (3.00%) high severe
linter/all-rules/large/dataset.py
time: [5.8086 ms 5.8163 ms 5.8240 ms]
thrpt: [6.9854 MiB/s 6.9946 MiB/s 7.0038 MiB/s]
change:
time: [-1.5651% -1.3536% -1.1584%] (p = 0.00 < 0.05)
thrpt: [+1.1720% +1.3721% +1.5900%]
Performance has improved.
```
My guess is that `NoHashHasher` underperforms because the keys are not
randomly distributed...
Anyway, it's a ~1% (significant) performance gain on some of the above,
plus we get to remove a dependency.
80 lines
3.2 KiB
TOML
80 lines
3.2 KiB
TOML
[workspace]
|
|
members = ["crates/*"]
|
|
resolver = "2"
|
|
|
|
[workspace.package]
|
|
edition = "2021"
|
|
rust-version = "1.70"
|
|
homepage = "https://beta.ruff.rs/docs"
|
|
documentation = "https://beta.ruff.rs/docs"
|
|
repository = "https://github.com/astral-sh/ruff"
|
|
authors = ["Charlie Marsh <charlie.r.marsh@gmail.com>"]
|
|
license = "MIT"
|
|
|
|
[workspace.dependencies]
|
|
anyhow = { version = "1.0.69" }
|
|
bitflags = { version = "2.3.1" }
|
|
chrono = { version = "0.4.23", default-features = false, features = ["clock"] }
|
|
clap = { version = "4.1.8", features = ["derive"] }
|
|
colored = { version = "2.0.0" }
|
|
filetime = { version = "0.2.20" }
|
|
glob = { version = "0.3.1" }
|
|
globset = { version = "0.4.10" }
|
|
ignore = { version = "0.4.20" }
|
|
insta = { version = "1.31.0", feature = ["filters", "glob"] }
|
|
is-macro = { version = "0.2.2" }
|
|
itertools = { version = "0.10.5" }
|
|
log = { version = "0.4.17" }
|
|
memchr = "2.5.0"
|
|
num-bigint = { version = "0.4.3" }
|
|
num-traits = { version = "0.2.15" }
|
|
once_cell = { version = "1.17.1" }
|
|
path-absolutize = { version = "3.0.14" }
|
|
proc-macro2 = { version = "1.0.51" }
|
|
quote = { version = "1.0.23" }
|
|
regex = { version = "1.7.1" }
|
|
rustc-hash = { version = "1.1.0" }
|
|
schemars = { version = "0.8.12" }
|
|
serde = { version = "1.0.152", features = ["derive"] }
|
|
serde_json = { version = "1.0.93" }
|
|
shellexpand = { version = "3.0.0" }
|
|
similar = { version = "2.2.1", features = ["inline"] }
|
|
smallvec = { version = "1.10.0" }
|
|
strum = { version = "0.24.1", features = ["strum_macros"] }
|
|
strum_macros = { version = "0.24.3" }
|
|
syn = { version = "2.0.15" }
|
|
test-case = { version = "3.0.0" }
|
|
thiserror = { version = "1.0.43" }
|
|
toml = { version = "0.7.2" }
|
|
wsl = { version = "0.1.0" }
|
|
|
|
# v1.0.1
|
|
libcst = { git = "https://github.com/Instagram/LibCST.git", rev = "3cacca1a1029f05707e50703b49fe3dd860aa839", default-features = false }
|
|
|
|
ruff_text_size = { git = "https://github.com/astral-sh/RustPython-Parser.git", rev = "4d03b9b5b212fc869e4cfda151414438186a7779" }
|
|
rustpython-ast = { git = "https://github.com/astral-sh/RustPython-Parser.git", rev = "4d03b9b5b212fc869e4cfda151414438186a7779" , default-features = false, features = ["num-bigint"]}
|
|
rustpython-format = { git = "https://github.com/astral-sh/RustPython-Parser.git", rev = "4d03b9b5b212fc869e4cfda151414438186a7779", default-features = false, features = ["num-bigint"] }
|
|
rustpython-literal = { git = "https://github.com/astral-sh/RustPython-Parser.git", rev = "4d03b9b5b212fc869e4cfda151414438186a7779", default-features = false }
|
|
rustpython-parser = { git = "https://github.com/astral-sh/RustPython-Parser.git", rev = "4d03b9b5b212fc869e4cfda151414438186a7779" , default-features = false, features = ["full-lexer", "num-bigint"] }
|
|
|
|
[profile.release]
|
|
lto = "fat"
|
|
codegen-units = 1
|
|
|
|
[profile.dev.package.insta]
|
|
opt-level = 3
|
|
|
|
[profile.dev.package.similar]
|
|
opt-level = 3
|
|
|
|
# Reduce complexity of a parser function that would trigger a locals limit in a wasm tool.
|
|
# https://github.com/bytecodealliance/wasm-tools/blob/b5c3d98e40590512a3b12470ef358d5c7b983b15/crates/wasmparser/src/limits.rs#L29
|
|
[profile.dev.package.rustpython-parser]
|
|
opt-level = 1
|
|
|
|
# Use the `--profile release-debug` flag to show symbols in release mode.
|
|
# e.g. `cargo build --profile release-debug`
|
|
[profile.release-debug]
|
|
inherits = "release"
|
|
debug = 1
|