lix/src/libexpr
pennae 5838354d34 optimize ExprConcatStrings::eval
constructing an ostringstream for non-string concats (like integer addition) is
a small constant cost that we can avoid. for string concats we can keep all the
string temporaries we get from coerceToString and concatenate them in one go,
which saves a lot of intermediate temporaries and copies in ostringstream. we
can also avoid copying the concatenated string again by directly allocating it
in GC memory and moving ownership of the concatenated string into the target
value.

saves about 2% on system eval.

before:

  Benchmark 1: nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system'
    Time (mean ± σ):      2.837 s ±  0.031 s    [User: 2.562 s, System: 0.191 s]
    Range (min … max):    2.796 s …  2.892 s    20 runs

after:

  Benchmark 1: nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system'
    Time (mean ± σ):      2.790 s ±  0.035 s    [User: 2.532 s, System: 0.187 s]
    Range (min … max):    2.722 s …  2.836 s    20 runs
2022-01-12 10:07:21 +01:00
..
flake Merge pull request #5546 from NixOS/allow-paths-in-flake-local-options 2022-01-06 21:55:20 +01:00
primops Remove non-method mk<X> functions 2022-01-04 18:40:39 +01:00
attr-path.cc Rename findDerivationFilename -> findPackageFilename 2021-07-19 18:10:10 +02:00
attr-path.hh Rename findDerivationFilename -> findPackageFilename 2021-07-19 18:10:10 +02:00
attr-set.cc Remove EvalState::mkAttrs() 2022-01-04 20:29:17 +01:00
attr-set.hh Remove EvalState::mkAttrs() 2022-01-04 20:29:17 +01:00
common-eval-args.cc Remove non-method mkString() 2022-01-04 18:24:42 +01:00
common-eval-args.hh Support --eval-store in nix-instantiate and nix-build 2021-07-22 09:59:51 +02:00
eval-cache.cc libcmd/installables: force re-evaluation of cached failures 2021-04-19 19:51:04 +02:00
eval-cache.hh libcmd/installables: force re-evaluation of cached failures 2021-04-19 19:51:04 +02:00
eval-inline.hh Improve error formatting 2021-01-21 11:02:09 +01:00
eval.cc optimize ExprConcatStrings::eval 2022-01-12 10:07:21 +01:00
eval.hh Remove EvalState::mkAttrs() 2022-01-04 20:29:17 +01:00
fetchurl.nix Move <nix/fetchurl.nix> into the nix binary 2020-12-22 14:43:20 +01:00
function-trace.cc Revert the enum struct change 2020-06-18 22:11:26 +00:00
function-trace.hh Hide FunctionCallTrace constructor/destructor 2020-01-05 16:21:34 +01:00
get-drvs.cc Ensure that attrsets are sorted 2022-01-04 18:00:33 +01:00
get-drvs.hh Squashed get CA derivations building 2020-08-07 19:51:55 +00:00
imported-drv-to-derivation.nix Move some corepkgs into the nix binary 2020-03-11 16:57:48 +01:00
json-to-value.cc Remove EvalState::mkAttrs() 2022-01-04 20:29:17 +01:00
json-to-value.hh Fix extra ; warnings involving MakeError 2019-11-10 11:24:47 -05:00
lexer.l Optimize primop calls 2021-11-04 15:03:40 +01:00
local.mk Merge pull request #5175 from Pamplemousse/make 2021-08-30 12:44:29 +02:00
nix-expr.pc.in pkg-config files: Use c++17 2019-03-14 14:11:12 +01:00
nixexpr.cc Merge branch 'better-interpolation-error-location' of https://github.com/greedy/nix 2021-12-13 19:20:48 +01:00
nixexpr.hh Turn mkString(Symbol) into a method 2022-01-04 19:09:40 +01:00
parser.y Merge branch 'better-interpolation-error-location' of https://github.com/greedy/nix 2021-12-13 19:20:48 +01:00
primops.cc Remove EvalState::mkAttrs() 2022-01-04 20:29:17 +01:00
primops.hh libexpr: throw a more helpful eval-error if a builtin is not available due to a missing feature-flag 2021-09-29 11:57:15 +02:00
symbol-table.hh nix flake show: Use evaluation cache 2020-04-17 01:02:29 +02:00
value-to-json.cc Support range-based for loop over list values 2021-11-25 16:31:39 +01:00
value-to-json.hh toJSON: report error position for fancier output 2021-10-25 21:17:52 +00:00
value-to-xml.cc Support range-based for loop over list values 2021-11-25 16:31:39 +01:00
value-to-xml.hh toXML: display errors position 2021-11-13 20:33:34 -05:00
value.hh optimize ExprConcatStrings::eval 2022-01-12 10:07:21 +01:00