From 150c5bfdc18c43c38243f8673336642b03c91d68 Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 10 Nov 2020 20:23:38 -0600 Subject: [PATCH] perf: Hash faster for custom dicts If we have to hash for the custom dict, we might as well be fast about it. We do not need a cryptographically secure algorithm since the content is fixed for the user. Master: ``` real 0m26.675s user 0m33.683s sys 0m4.535s ``` With ahash: ``` real 0m23.993s user 0m30.800s sys 0m4.440s ``` --- Cargo.lock | 26 ++++++++++++++++++++++++-- Cargo.toml | 1 + src/dict.rs | 4 ++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 755731e..27f7a71 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,5 +1,15 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. +[[package]] +name = "ahash" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eb6ec8807cd25b59e6b8100815afc73f54e294f1a425a2e555971969889a8f8" +dependencies = [ + "getrandom 0.2.0", + "lazy_static", +] + [[package]] name = "aho-corasick" version = "0.7.15" @@ -377,6 +387,17 @@ dependencies = [ "wasi", ] +[[package]] +name = "getrandom" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee8025cf36f917e6a52cce185b7c7177689b838b7ec138364e50cc2277a56cf4" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + [[package]] name = "globset" version = "0.4.6" @@ -719,7 +740,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" dependencies = [ - "getrandom", + "getrandom 0.1.15", "libc", "rand_chacha", "rand_core", @@ -743,7 +764,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" dependencies = [ - "getrandom", + "getrandom 0.1.15", ] [[package]] @@ -1051,6 +1072,7 @@ dependencies = [ name = "typos-cli" version = "0.1.4" dependencies = [ + "ahash", "anyhow", "assert_fs", "bstr", diff --git a/Cargo.toml b/Cargo.toml index 168dffb..0ffd1af 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,6 +46,7 @@ toml = "0.5" log = "0.4" env_logger = "0.8" bstr = "0.2" +ahash = "0.5.8" [dev-dependencies] assert_fs = "1.0" diff --git a/src/dict.rs b/src/dict.rs index f2ced5f..f3178e5 100644 --- a/src/dict.rs +++ b/src/dict.rs @@ -144,8 +144,8 @@ fn case_correct(correction: &mut Cow<'_, str>, case: Case) { } pub struct Override<'i, 'w, D> { - identifiers: HashMap<&'i str, Status<'i>>, - words: HashMap, Status<'w>>, + identifiers: HashMap<&'i str, Status<'i>, ahash::RandomState>, + words: HashMap, Status<'w>, ahash::RandomState>, inner: D, }