![pennae](/assets/img/avatar_default.png)
if we defer the duplicate argument check for lambda formals we can use more efficient data structures for the formals set, and we can get rid of the duplication of formals names to boot. instead of a list of formals we've seen and a set of names we'll keep a vector instead and run a sort+dupcheck step before moving the parsed formals into a newly created lambda. this improves performance on search and rebuild by ~1%, pure parsing gains more (about 4%). this does reorder lambda arguments in the xml output, but the output is still stable. this shouldn't be a problem since argument order is not semantically important anyway. before nix search --no-eval-cache --offline ../nixpkgs hello Time (mean ± σ): 8.550 s ± 0.060 s [User: 6.470 s, System: 1.664 s] Range (min … max): 8.435 s … 8.666 s 20 runs nix eval -f ../nixpkgs/pkgs/development/haskell-modules/hackage-packages.nix Time (mean ± σ): 346.7 ms ± 2.1 ms [User: 312.4 ms, System: 34.2 ms] Range (min … max): 343.8 ms … 353.4 ms 20 runs nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' Time (mean ± σ): 2.720 s ± 0.031 s [User: 2.415 s, System: 0.231 s] Range (min … max): 2.662 s … 2.780 s 20 runs after nix search --no-eval-cache --offline ../nixpkgs hello Time (mean ± σ): 8.462 s ± 0.063 s [User: 6.398 s, System: 1.661 s] Range (min … max): 8.339 s … 8.542 s 20 runs nix eval -f ../nixpkgs/pkgs/development/haskell-modules/hackage-packages.nix Time (mean ± σ): 329.1 ms ± 1.4 ms [User: 296.8 ms, System: 32.3 ms] Range (min … max): 326.1 ms … 330.8 ms 20 runs nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' Time (mean ± σ): 2.687 s ± 0.035 s [User: 2.392 s, System: 0.228 s] Range (min … max): 2.626 s … 2.754 s 20 runs
56 lines
1.3 KiB
Nix
56 lines
1.3 KiB
Nix
{checkBuildId ? 0}:
|
|
|
|
with import ./config.nix;
|
|
|
|
{
|
|
nondeterministic = mkDerivation {
|
|
inherit checkBuildId;
|
|
name = "nondeterministic";
|
|
buildCommand =
|
|
''
|
|
mkdir $out
|
|
date +%s.%N > $out/date
|
|
echo "CHECK_TMPDIR=$TMPDIR"
|
|
echo "checkBuildId=$checkBuildId"
|
|
echo "$checkBuildId" > $TMPDIR/checkBuildId
|
|
'';
|
|
};
|
|
|
|
deterministic = mkDerivation {
|
|
inherit checkBuildId;
|
|
name = "deterministic";
|
|
buildCommand =
|
|
''
|
|
mkdir $out
|
|
echo date > $out/date
|
|
echo "CHECK_TMPDIR=$TMPDIR"
|
|
echo "checkBuildId=$checkBuildId"
|
|
echo "$checkBuildId" > $TMPDIR/checkBuildId
|
|
'';
|
|
};
|
|
|
|
failed = mkDerivation {
|
|
inherit checkBuildId;
|
|
name = "failed";
|
|
buildCommand =
|
|
''
|
|
mkdir $out
|
|
echo date > $out/date
|
|
echo "CHECK_TMPDIR=$TMPDIR"
|
|
echo "checkBuildId=$checkBuildId"
|
|
echo "$checkBuildId" > $TMPDIR/checkBuildId
|
|
false
|
|
'';
|
|
};
|
|
|
|
hashmismatch = import <nix/fetchurl.nix> {
|
|
url = "file://" + builtins.getEnv "TMPDIR" + "/dummy";
|
|
sha256 = "0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73";
|
|
};
|
|
|
|
fetchurl = import <nix/fetchurl.nix> {
|
|
url = "file://" + toString ./lang/eval-okay-xml.exp.xml;
|
|
sha256 = "sha256-behBlX+DQK/Pjvkuc8Tx68Jwi4E5v86wDq+ZLaHyhQE=";
|
|
};
|
|
}
|