forked from lix-project/lix
5838354d34
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 |
||
---|---|---|
.. | ||
flake | ||
primops | ||
attr-path.cc | ||
attr-path.hh | ||
attr-set.cc | ||
attr-set.hh | ||
common-eval-args.cc | ||
common-eval-args.hh | ||
eval-cache.cc | ||
eval-cache.hh | ||
eval-inline.hh | ||
eval.cc | ||
eval.hh | ||
fetchurl.nix | ||
function-trace.cc | ||
function-trace.hh | ||
get-drvs.cc | ||
get-drvs.hh | ||
imported-drv-to-derivation.nix | ||
json-to-value.cc | ||
json-to-value.hh | ||
lexer.l | ||
local.mk | ||
nix-expr.pc.in | ||
nixexpr.cc | ||
nixexpr.hh | ||
parser.y | ||
primops.cc | ||
primops.hh | ||
symbol-table.hh | ||
value-to-json.cc | ||
value-to-json.hh | ||
value-to-xml.cc | ||
value-to-xml.hh | ||
value.hh |