From 5d73c06b1a67bce68dcc0b2bd5f087ce00ab6317 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Thu, 29 Dec 2022 14:44:09 +0300 Subject: refactor(tvix/eval): use im::Vector for NixList representation 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 --- tvix/Cargo.nix | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) (limited to 'tvix/Cargo.nix') diff --git a/tvix/Cargo.nix b/tvix/Cargo.nix index aa9fc5d9dcfd..7d3c4c869196 100644 --- a/tvix/Cargo.nix +++ b/tvix/Cargo.nix @@ -644,6 +644,25 @@ rec { }; resolvedDefaultFeatures = [ "default" ]; }; + "bitmaps" = rec { + crateName = "bitmaps"; + version = "2.1.0"; + edition = "2018"; + sha256 = "18k4mcwxl96yvii5kcljkpb8pg5j4jj1zbsdn26nsx4r83846403"; + authors = [ + "Bodil Stokke " + ]; + dependencies = [ + { + name = "typenum"; + packageId = "typenum"; + } + ]; + features = { + "default" = [ "std" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; "blake3" = rec { crateName = "blake3"; version = "1.3.3"; @@ -2353,6 +2372,51 @@ rec { ]; }; + "im" = rec { + crateName = "im"; + version = "15.1.0"; + edition = "2018"; + sha256 = "1sg0jy9y0l3lqjpjyclj6kspi027mx177dgrmacgjni8y0zx7b6h"; + authors = [ + "Bodil Stokke " + ]; + dependencies = [ + { + name = "bitmaps"; + packageId = "bitmaps"; + } + { + name = "rand_core"; + packageId = "rand_core 0.6.4"; + } + { + name = "rand_xoshiro"; + packageId = "rand_xoshiro"; + } + { + name = "sized-chunks"; + packageId = "sized-chunks"; + } + { + name = "typenum"; + packageId = "typenum"; + } + ]; + buildDependencies = [ + { + name = "version_check"; + packageId = "version_check"; + } + ]; + features = { + "arbitrary" = [ "dep:arbitrary" ]; + "proptest" = [ "dep:proptest" ]; + "quickcheck" = [ "dep:quickcheck" ]; + "rayon" = [ "dep:rayon" ]; + "refpool" = [ "dep:refpool" ]; + "serde" = [ "dep:serde" ]; + }; + }; "indexmap" = rec { crateName = "indexmap"; version = "1.9.2"; @@ -3933,6 +3997,25 @@ rec { "serde1" = [ "serde" ]; }; }; + "rand_xoshiro" = rec { + crateName = "rand_xoshiro"; + version = "0.6.0"; + edition = "2018"; + sha256 = "1ajsic84rzwz5qr0mzlay8vi17swqi684bqvwqyiim3flfrcv5vg"; + authors = [ + "The Rand Project Developers" + ]; + dependencies = [ + { + name = "rand_core"; + packageId = "rand_core 0.6.4"; + } + ]; + features = { + "serde" = [ "dep:serde" ]; + "serde1" = [ "serde" ]; + }; + }; "rayon" = rec { crateName = "rayon"; version = "1.6.0"; @@ -4568,6 +4651,33 @@ rec { }; resolvedDefaultFeatures = [ "default" "std" ]; }; + "sized-chunks" = rec { + crateName = "sized-chunks"; + version = "0.6.5"; + edition = "2018"; + sha256 = "07ix5fsdnpf2xsb0k5rbiwlmsicm2237fcx7blirp9p7pljr5mhn"; + authors = [ + "Bodil Stokke " + ]; + dependencies = [ + { + name = "bitmaps"; + packageId = "bitmaps"; + } + { + name = "typenum"; + packageId = "typenum"; + } + ]; + features = { + "arbitrary" = [ "dep:arbitrary" ]; + "array-ops" = [ "dep:array-ops" ]; + "default" = [ "std" ]; + "refpool" = [ "dep:refpool" ]; + "ringbuffer" = [ "array-ops" ]; + }; + resolvedDefaultFeatures = [ "default" "std" ]; + }; "slab" = rec { crateName = "slab"; version = "0.4.7"; @@ -6013,6 +6123,10 @@ rec { name = "dirs"; packageId = "dirs"; } + { + name = "im"; + packageId = "im"; + } { name = "path-clean"; packageId = "path-clean"; -- cgit 1.4.1