aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr
AgeCommit message (Collapse)Author
2022-01-13avoid allocations in SymbolTable::createpennae
speeds up parsing by ~3%, system builds by a bit more than 1% # before Benchmark 1: nix search --offline nixpkgs hello Time (mean ± σ): 574.7 ms ± 2.8 ms [User: 566.3 ms, System: 8.0 ms] Range (min … max): 569.2 ms … 580.7 ms 50 runs Benchmark 2: nix eval -f ../nixpkgs/pkgs/development/haskell-modules/hackage-packages.nix Time (mean ± σ): 394.4 ms ± 0.8 ms [User: 361.8 ms, System: 32.3 ms] Range (min … max): 392.7 ms … 395.7 ms 50 runs Benchmark 3: nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' Time (mean ± σ): 2.976 s ± 0.005 s [User: 2.757 s, System: 0.218 s] Range (min … max): 2.966 s … 2.990 s 50 runs # after 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
2022-01-13don't strdup tokens in the lexerpennae
every stringy token the lexer returns is turned into a Symbol and not used further, so we don't have to strdup. using a string_view is sufficient, but due to limitations of the current parser we have to use a POD type that holds the same information. gives ~2% on system build, 6% on search, 8% on parsing alone # before Benchmark 1: nix search --offline nixpkgs hello Time (mean ± σ): 610.6 ms ± 2.4 ms [User: 602.5 ms, System: 7.8 ms] Range (min … max): 606.6 ms … 617.3 ms 50 runs Benchmark 2: nix eval -f hackage-packages.nix Time (mean ± σ): 430.1 ms ± 1.4 ms [User: 393.1 ms, System: 36.7 ms] Range (min … max): 428.2 ms … 434.2 ms 50 runs Benchmark 3: nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' Time (mean ± σ): 3.032 s ± 0.005 s [User: 2.808 s, System: 0.223 s] Range (min … max): 3.023 s … 3.041 s 50 runs # after Benchmark 1: nix search --offline nixpkgs hello Time (mean ± σ): 574.7 ms ± 2.8 ms [User: 566.3 ms, System: 8.0 ms] Range (min … max): 569.2 ms … 580.7 ms 50 runs Benchmark 2: nix eval -f hackage-packages.nix Time (mean ± σ): 394.4 ms ± 0.8 ms [User: 361.8 ms, System: 32.3 ms] Range (min … max): 392.7 ms … 395.7 ms 50 runs Benchmark 3: nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' Time (mean ± σ): 2.976 s ± 0.005 s [User: 2.757 s, System: 0.218 s] Range (min … max): 2.966 s … 2.990 s 50 runs
2021-12-20bulk-allocate Value instances in the evaluatorpennae
calling GC_malloc for each value is significantly more expensive than allocating a bunch of values at once with GC_malloc_many. "a bunch" here is a GC block size, ie 16KiB or less. this gives a 1.5% performance boost when evaluating our nixos system. tested with nix eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' # on master Time (mean ± σ): 3.335 s ± 0.007 s [User: 2.774 s, System: 0.293 s] Range (min … max): 3.315 s … 3.347 s 50 runs # with this change Time (mean ± σ): 3.288 s ± 0.006 s [User: 2.728 s, System: 0.292 s] Range (min … max): 3.274 s … 3.307 s 50 runs
2021-12-14Merge pull request #5623 from yorickvP/fix-5621Théophane Hufschmitt
flakes: fix boolean and int nixConfig values
2021-12-13Re-allow inputs.x.url = "/path/to/file"Eelco Dolstra
2021-12-13Merge branch 'better-interpolation-error-location' of ↵Eelco Dolstra
https://github.com/greedy/nix
2021-12-02Introduce builtins.groupBy primopSilvan Mosberger
This function is very useful in nixpkgs, but its implementation in Nix itself is rather slow due to it requiring a lot of attribute set and list appends.
2021-12-02Flakes: computeLocks: pass correct LockParent when reusing oldLockAlexander Bantyev
Previously, when we were attempting to reuse the old lockfile information in the computeLocks function, we have passed the parent of the current input to the next computeLocks call. This was incorrect, since the follows are resolved relative to the parent. This caused issues when we tried to reuse oldLock but couldn't for some reason (read: mustRefetch is true), in that case the follows were resolved incorrectly. Fix this by passing the correct parent, and adding some tests to prevent this particular regression from happening again. Closes https://github.com/NixOS/nix/issues/5697
2021-11-29flakes: fix boolean and int nixConfig valuesYorick van Pelt
Some type confusion was causing ints to be pointers, and bools to be ints. Fixes #5621
2021-11-28Don't move the arguments of the primOpAndreas Rammhold
Moving arguments of the primOp into the registration structure makes it impossible to initialize a second EvalState with the correct primOp registration. It will end up registering all those "RegisterPrimOp"'s with an arity of zero on all but the 2nd instance of the EvalState. Not moving the memory will add a tiny bit of memory overhead during the eval since we need a copy of all the argument lists of all the primOp's. The overhead shouldn't be too bad as it is static (based on the amonut of registered operations) and only occurs once during the interpreter startup.
2021-11-25Merge pull request #5648 from edolstra/list-iterEelco Dolstra
Support range-based for loop over list values
2021-11-25Support range-based for loop over list valuesEelco Dolstra
2021-11-25Fix the error when accessing a forbidden path in pure evalregnat
If we’re in pure eval mode, then tell that in the error message rather than (wrongly) speaking about restricted mode. Fix https://github.com/NixOS/nix/issues/5611
2021-11-24Merge pull request #5631 from Infinisil/list-compareEelco Dolstra
Make lists be comparable
2021-11-24Make lists be comparableSilvan Mosberger
Makes lists comparable using lexicographic comparison. Increments builtins.langVersion in order for this change to be detectable
2021-11-22Merge pull request #5624 from rofrol/typo-single-quoteEelco Dolstra
Typo: change to normal single quote
2021-11-22Typo: change to normal singlequoteRoman Frołow
2021-11-20add real path to allowedPathsTom Bereknyei
2021-11-18Merge branch 'accept_conf' of https://github.com/tomberek/nixEelco Dolstra
2021-11-18Merge pull request #5580 from ksonj/fix/non-standard-sshEelco Dolstra
Fix detection of scp-style URIs to support non-standard SSH ports
2021-11-17Simplify fix by disallowing / in front of @ to match scp styleKalle Jepsen
2021-11-17Parse '(f x) y' the same as 'f x y'Eelco Dolstra
(cherry picked from commit 5253cb4b68ad248f37b27849c0ebf3614e4f2777)
2021-11-17Fix detection of scp-style URIs to support non-standard SSH ports for gitKalle Jepsen
2021-11-16Call functors with both arguments at onceEelco Dolstra
This is not really useful on its own, but it does recover the 'infinite recursion' error message for '{ __functor = x: x; } 1', and is more efficient in conjunction with #3718. Fixes #5515.
2021-11-16Don't hang when calling an attrsetEelco Dolstra
Fixes #5565.
2021-11-16Merge pull request #5472 from NixOS/async-realisation-substitutionEelco Dolstra
async realisation substitution
2021-11-15Merge branch 'master' of github.com:NixOS/nixEelco Dolstra
2021-11-15Simplify lockFlake() a bitEelco Dolstra
2021-11-15Merge branch 'balsoft/fix-subinputs-not-getting-updated' of ↵Eelco Dolstra
https://github.com/tweag/nix
2021-11-15Merge pull request #5428 from kreisys/add-pos-to-json-type-errorDomen Kožar
toJSON: report error position for fancier output
2021-11-13toXML: display errors positionKevin Amado
- This change applies to builtins.toXML and inner workings - Proof of concept: ```nix let e = builtins.toXML e; in e ``` - Before: ``` $ nix-instantiate --eval poc.nix error: infinite recursion encountered ``` - After: ``` $ nix-instantiate --eval poc.nix error: infinite recursion encountered at /data/github/kamadorueda/nix/poc.nix:1:9: 1| let e = builtins.toXML e; in e | ```
2021-11-12Adds an accept-flake-config flagTom Bereknyei
2021-11-11Flakes: refetch the input when a follows disappearsAlexander Bantyev
When an input follows disappears, we can't just reuse the old lock file entries since we may be missing some required ones. Refetch the input when this happens. Closes https://github.com/NixOS/nix/issues/5289
2021-11-09Merge pull request #5494 from tweag/balsoft/allow-references-in-addPathEelco Dolstra
Allow references in addPath
2021-11-09addToStore, addToStoreFromDump: refactor: pass refs by const referenceAlexander Bantyev
Co-Authored-By: Eelco Dolstra <edolstra@gmail.com>
2021-11-08Merge pull request #5504 from NixOS/flake-options-and-daemonEelco Dolstra
Make the flake options work when using the daemon
2021-11-07Remove unused "<let-body>" symbolAndreas Rammhold
The requirement for the symbol has been removed since at least 7d47498.
2021-11-05addPath: allow paths with referencesAlexander Bantyev
Since 4806f2f6b0fd2cae401b89fe19d8c528ffd88b5f, we can't have paths with references passed to builtins.{path,filterSource}. This prevents many cases of those functions called on IFD outputs from working. Resolve this by passing the references found in the original path to the added path.
2021-11-05Make the flake options work when using the daemonregnat
When setting flake-local options (with the `nixConfig` field), forward these options to the daemon in case we’re using one. This is necessary in particular for options like `binary-caches` or `post-build-hook` to make sense. Fix <https://github.com/NixOS/nix/commit/343239fc8a1993f707a990c2cd54a41f1fa3de99#r44356843>
2021-11-04Remove maxPrimOpArityEelco Dolstra
2021-11-04Fix derivation primopEelco Dolstra
2021-11-04Use callFunction() with an array for some calls with arity > 1Eelco Dolstra
2021-11-04Add level / displacement typesEelco Dolstra
2021-11-04Optimize primop callsEelco Dolstra
We now parse function applications as a vector of arguments rather than as a chain of binary applications, e.g. 'substring 1 2 "foo"' is parsed as ExprCall { .fun = <substring>, .args = [ <1>, <2>, <"foo"> ] } rather than ExprApp (ExprApp (ExprApp <substring> <1>) <2>) <"foo"> This allows primops to be called immediately (if enough arguments are supplied) without having to allocate intermediate tPrimOpApp values. On $ nix-instantiate --dry-run '<nixpkgs/nixos/release-combined.nix>' -A nixos.tests.simple.x86_64-linux this gives a substantial performance improvement: user CPU time: median = 0.9209 mean = 0.9218 stddev = 0.0073 min = 0.9086 max = 0.9340 [rejected, p=0.00000, Δ=-0.21433±0.00677] elapsed time: median = 1.0585 mean = 1.0584 stddev = 0.0024 min = 1.0523 max = 1.0623 [rejected, p=0.00000, Δ=-0.20594±0.00236] because it reduces the number of tPrimOpApp allocations from 551990 to 42534 (i.e. only small minority of primop calls are partially applied) which in turn reduces time spent in the garbage collector.
2021-11-04StaticEnv: Use std::vector instead of std::mapEelco Dolstra
2021-11-03Don’t require `ca-derivations` when `__contentAddressed = false`regnat
If we explicitely opt-out of it, there’s no need to require the experimental feature
2021-10-27toJSON: improve pos accuracy, add traceShay Bergmann
2021-10-27Remove redundant 'warning:'Eelco Dolstra
2021-10-26toJSON: pass pos in case of a list as wellShay Bergmann
2021-10-26Tweak fetchTree docsEelco Dolstra