diff options
author | Vincent Ambo <mail@tazj.in> | 2022-12-29T11·44+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-12-29T12·27+0000 |
commit | 5d73c06b1a67bce68dcc0b2bd5f087ce00ab6317 (patch) | |
tree | 62d40c8ca8e1620bff028c8d89a5a0f05ee00661 /tvix/Cargo.lock | |
parent | 6ab8320f075e36f2328a86f5fcf7674844a0bd12 (diff) |
refactor(tvix/eval): use im::Vector for NixList representation r/5534
This is a persistent, structurally sharing data structure which is more efficient in some of our use-cases. I have verified the efficiency improvement using `hyperfine` repeatedly over expressions on nixpkgs. Lists are not the most performance-critical structure in Nix (that would be attribute sets), but we can already see a small (~5-10%) improvement. Note that there are a handful of cases where we still go via `Vec` that need to be fixed, most notable for `builtins.sort` which can not currently be implemented directly using `im::Vector` because of a restrictive type bound. Change-Id: I237cc50cbd7629a046e5a5e4601fbb40355e551d Reviewed-on: https://cl.tvl.fyi/c/depot/+/7670 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
Diffstat (limited to 'tvix/Cargo.lock')
-rw-r--r-- | tvix/Cargo.lock | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tvix/Cargo.lock b/tvix/Cargo.lock index 04af420aeac3..c1303be31f91 100644 --- a/tvix/Cargo.lock +++ b/tvix/Cargo.lock @@ -184,6 +184,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + +[[package]] name = "blake3" version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -810,6 +819,20 @@ dependencies = [ ] [[package]] +name = "im" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0acd33ff0285af998aaf9b57342af478078f53492322fafc47450e09397e0e9" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "sized-chunks", + "typenum", + "version_check", +] + +[[package]] name = "indexmap" version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1387,6 +1410,15 @@ dependencies = [ ] [[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.4", +] + +[[package]] name = "rayon" version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1594,6 +1626,16 @@ dependencies = [ ] [[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + +[[package]] name = "slab" version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2031,6 +2073,7 @@ dependencies = [ "codemap-diagnostic", "criterion", "dirs", + "im", "itertools", "path-clean", "pretty_assertions", |