aboutsummaryrefslogtreecommitdiff
path: root/src/nix
diff options
context:
space:
mode:
authorpennae <github@quasiparticle.net>2021-12-21 13:56:57 +0100
committerpennae <github@quasiparticle.net>2022-01-13 18:06:15 +0100
commit34e3bd10e3891afc965a7fb8fdcaacbdc900b2d5 (patch)
tree01614eba0aa04c3a8b4aa719f03628a3826cfa56 /src/nix
parenteee0bcee227f6a1b46116efc8915545feb5a2e86 (diff)
avoid copies of parser input data
when given a string yacc will copy the entire input to a newly allocated location so that it can add a second terminating NUL byte. since the parser is a very internal thing to EvalState we can ensure that having two terminating NUL bytes is always possible without copying, and have the parser itself merely check that the expected NULs are present. # before Benchmark 1: nix search --offline nixpkgs hello Time (mean ± σ): 572.4 ms ± 2.3 ms [User: 563.4 ms, System: 8.6 ms] Range (min … max): 566.9 ms … 579.1 ms 50 runs Benchmark 2: nix eval -f ../nixpkgs/pkgs/development/haskell-modules/hackage-packages.nix Time (mean ± σ): 381.7 ms ± 1.0 ms [User: 348.3 ms, System: 33.1 ms] Range (min … max): 380.2 ms … 387.7 ms 50 runs Benchmark 3: nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' Time (mean ± σ): 2.936 s ± 0.005 s [User: 2.715 s, System: 0.221 s] Range (min … max): 2.923 s … 2.946 s 50 runs # after Benchmark 1: nix search --offline nixpkgs hello Time (mean ± σ): 571.7 ms ± 2.4 ms [User: 563.3 ms, System: 8.0 ms] Range (min … max): 566.7 ms … 579.7 ms 50 runs Benchmark 2: nix eval -f ../nixpkgs/pkgs/development/haskell-modules/hackage-packages.nix Time (mean ± σ): 376.6 ms ± 1.0 ms [User: 345.8 ms, System: 30.5 ms] Range (min … max): 374.5 ms … 379.1 ms 50 runs Benchmark 3: nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' Time (mean ± σ): 2.922 s ± 0.006 s [User: 2.707 s, System: 0.215 s] Range (min … max): 2.906 s … 2.934 s 50 runs
Diffstat (limited to 'src/nix')
-rw-r--r--src/nix/repl.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/nix/repl.cc b/src/nix/repl.cc
index f453343f3..c8bb5a90f 100644
--- a/src/nix/repl.cc
+++ b/src/nix/repl.cc
@@ -683,7 +683,7 @@ void NixRepl::addVarToScope(const Symbol & name, Value & v)
Expr * NixRepl::parseString(string s)
{
- Expr * e = state->parseExprFromString(s, curDir, staticEnv);
+ Expr * e = state->parseExprFromString(std::move(s), curDir, staticEnv);
return e;
}