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 <sternenseemann@systemli.org>
This commit is contained in:
parent
6ab8320f07
commit
5d73c06b1a
8 changed files with 261 additions and 46 deletions
114
tvix/Cargo.nix
114
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 <bodil@bodil.org>"
|
||||
];
|
||||
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 <bodil@bodil.org>"
|
||||
];
|
||||
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 <bodil@bodil.org>"
|
||||
];
|
||||
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";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue