-
Raphaël Gomès authored
While writing a very dumb manifest diffing algorithm for a proof-of-concept I saw that `Manifest::find_by_path` was much slower than I was expecting. It turns out that the Rust stdlib uses slow (all is relative) code when searching for byte positions for reasons ranging from portability, SIMD API stability, nobody doing the work, etc. `memch` is much faster for these purposes, so let's use it. I was measuring ~670ms of profile time in `find_by_path`, after this patch it went down to ~230ms.
Raphaël Gomès authoredWhile writing a very dumb manifest diffing algorithm for a proof-of-concept I saw that `Manifest::find_by_path` was much slower than I was expecting. It turns out that the Rust stdlib uses slow (all is relative) code when searching for byte positions for reasons ranging from portability, SIMD API stability, nobody doing the work, etc. `memch` is much faster for these purposes, so let's use it. I was measuring ~670ms of profile time in `find_by_path`, after this patch it went down to ~230ms.
This project manages its dependencies using Cargo.
Learn more
Cargo.toml 1.42 KiB
[package]
name = "hg-core"
version = "0.1.0"
authors = ["Georges Racinet <gracinet@anybox.fr>"]
description = "Mercurial pure Rust core library, with no assumption on Python bindings (FFI)"
edition = "2021"
[lib]
name = "hg"
[dependencies]
bitflags = "1.3.2"
bytes-cast = "0.3.0"
byteorder = "1.4.3"
ctrlc = "3.4"
derive_more = "0.99.17"
hashbrown = { version = "0.13.1", features = ["rayon"] }
home = "0.5.4"
im-rc = "15.1.0"
indicatif = "0.17.8"
itertools = "0.10.5"
lazy_static = "1.4.0"
libc = "0.2.137"
logging_timer = "1.1.0"
memchr = "2"
rand = "0.8.5"
rand_pcg = "0.3.1"
rand_distr = "0.4.3"
rayon = "1.7.0"
regex = "1.7.0"
self_cell = "1.0"
serde = { version = "1.0", features = ["derive"] }
sha-1 = "0.10.0"
twox-hash = "1.6.3"
same-file = "1.0.6"
tempfile = "3.3.0"
toml = "0.6"
thread_local = "1.1.4"
crossbeam-channel = "0.5.6"
log = "0.4.17"
memmap2 = { version = "0.5.8", features = ["stable_deref_trait"] }
zstd = "0.12"
format-bytes = "0.3.0"
once_cell = "1.16.0"
bitvec = "1.0.1"
chrono = "0.4.34"
schnellru = "0.2.1"
dyn-clone = "1.0.16"
filetime = "0.2.23"
uuid = { version = "1.10", features = ["v4"] }
# We don't use the `miniz-oxide` backend to not change rhg benchmarks and until
# we have a clearer view of which backend is the fastest.
[dependencies.flate2]
version = "1.0.24"
features = ["zlib"]
default-features = false
[dev-dependencies]
clap = { version = "~4.0", features = ["derive"] }
pretty_assertions = "1.1.0"