lix/tests/lang/eval-okay-xml.exp.xml
pennae 7d4cc5515c defer formals duplicate check for incresed efficiency all round
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
2022-01-19 17:07:29 +01:00

53 lines
1.1 KiB
XML

<?xml version='1.0' encoding='utf-8'?>
<expr>
<attrs>
<attr name="a">
<string value="foo" />
</attr>
<attr name="at">
<function>
<attrspat name="args">
<attr name="x" />
<attr name="y" />
<attr name="z" />
</attrspat>
</function>
</attr>
<attr name="b">
<string value="bar" />
</attr>
<attr name="c">
<string value="foobar" />
</attr>
<attr name="ellipsis">
<function>
<attrspat ellipsis="1">
<attr name="x" />
<attr name="y" />
<attr name="z" />
</attrspat>
</function>
</attr>
<attr name="f">
<function>
<attrspat>
<attr name="x" />
<attr name="y" />
<attr name="z" />
</attrspat>
</function>
</attr>
<attr name="id">
<function>
<varpat name="x" />
</function>
</attr>
<attr name="x">
<int value="123" />
</attr>
<attr name="y">
<float value="567.89" />
</attr>
</attrs>
</expr>