about summary refs log tree commit diff
path: root/src/libexpr/eval.cc
AgeCommit message (Collapse)AuthorFilesLines
2006-10-16 * Big cleanup of the semantics of paths, strings, contexts, stringEelco Dolstra1-95/+115
concatenation and string coercion. This was a big mess (see e.g. NIX-67). Contexts are now folded into strings, so that they don't cause evaluation errors when they're not expected. The semantics of paths has been clarified (see nixexpr-ast.def). toString() and coerceToString() have been merged. Semantic change: paths are now copied to the store when they're in a concatenation (and in most other situations - that's the formalisation of the meaning of a path). So "foo " + ./bla evaluates to "foo /nix/store/hash...-bla", not "foo /path/to/current-dir/bla". This prevents accidental impurities, and is more consistent with the treatment of derivation outputs, e.g., `"foo " + bla' where `bla' is a derivation. (Here `bla' would be replaced by the output path of `bla'.)
2006-10-11 * Removed URIs from the evaluator (NIX-66). They are now just anotherEelco Dolstra1-3/+1
kind of notation for strings.
2006-10-10 * Quick hack to fix NIX-67: evaluation result differing if the NixEelco Dolstra1-4/+8
expression resides in the store.
2006-10-03 * toFile: added an additional argument to specify the store pathEelco Dolstra1-1/+6
suffix, e.g., `builtins.toFile "builder.sh" "..."'. * toFile: handle references to other files correctly.
2006-09-24 * The result of a concatenation with a derivation on the left-handEelco Dolstra1-0/+1
side should be a path, I guess. * Handle paths that are in the store but not direct children of the store directory. * Ugh, hack to prevent double context wrapping.
2006-09-22 * Builtin function `add' to add integers.Eelco Dolstra1-0/+10
* Put common test functions in tests/lang/lib.nix.
2006-09-04 * Use a proper namespace.Eelco Dolstra1-1/+9
* Optimise header file usage a bit. * Compile the parser as C++.
2006-08-30 * Okay, that's a bit harder than expected.Eelco Dolstra1-7/+14
2006-08-30 * Uninitialised variable.Eelco Dolstra1-1/+1
2006-08-29 * Fix the ~ operator.Eelco Dolstra1-2/+12
2006-08-28 * Removed processBinding, instead we now apply toString to allEelco Dolstra1-1/+1
derivation attributes to flatten them into strings. This is possible since string can nowadays be wrapped in contexts that describe the derivations/sources referenced by the evaluation of the string.
2006-08-24 * Strict evaluation and XML printing of lists.Eelco Dolstra1-3/+9
2006-08-24 * Refactoring: move strictEval to libexpr.Eelco Dolstra1-0/+43
2006-08-23 * New primop: abort "error message".Eelco Dolstra1-2/+2
2006-08-04 * Fix a few warnings.Eelco Dolstra1-1/+1
2006-07-28 * `nix-instantiate ... --arg NAME VALUE': allow arguments to be passedEelco Dolstra1-4/+11
to functions from the command line. * nix-build: started removing backticks.
2006-07-26 * Refactoring: get the selection path stuff out of getDerivations()Eelco Dolstra1-1/+21
and put it into a separate function findAlongAttrPath().
2006-07-24 * When there is a domain check, we have to evaluate the argument.Eelco Dolstra1-0/+1
Can't be lazy!
2006-07-24 * New language feature: domain checks, which check whether a functionEelco Dolstra1-8/+27
argument has a valid value, i.e., is in a certain domain. E.g., { foo : [true false] , bar : ["a" "b" "c"] }: ... This previously could be done using assertions, but domain checks will allow the buildfarm to automatically extract the configuration space from functions.
2006-07-24 * Refactoring to support domain checks.Eelco Dolstra1-5/+7
2006-07-19 * Better error messages (especially wrt types).Eelco Dolstra1-27/+37
2006-05-08 * Allow function argument default values to refer to other argumentsEelco Dolstra1-35/+40
of the function. Implements NIX-45.
2006-05-08 * Show evaluation stats when NIX_SHOW_STATS=1.Eelco Dolstra1-1/+4
2006-05-04 * Use the new ATermMap.Eelco Dolstra1-23/+21
2006-05-02 * Optimise null-ary term builders. Also declare all term builderEelco Dolstra1-5/+2
functions as pure, which might improve performance a bit.
2006-05-02 * Use a linked list of substitutions. This reduces the amount ofEelco Dolstra1-4/+7
copying.
2006-05-02 * Some preliminaries towards NIX-45.Eelco Dolstra1-3/+23
2006-05-01 * String interpolation. Expressions likeEelco Dolstra1-1/+9
"--with-freetype2-library=" + freetype + "/lib" can now be written as "--with-freetype2-library=${freetype}/lib" An arbitrary expression can be enclosed within ${...}, not just identifiers. * Escaping in string literals: \n, \r, \t interpreted as in C, any other character following \ is interpreted as-is. * Newlines are now allowed in string literals.
2006-05-01 * Allow string concatenations involving derivations, e.g.,Eelco Dolstra1-11/+103
configureFlags = "--with-freetype2-library=" + freetype + "/lib";
2006-03-10 * In theory, this should reduce the number of ATermMapEelco Dolstra1-1/+1
re-allocations.
2006-03-08 * When obtaining derivations from Nix expressions, ignore allEelco Dolstra1-1/+7
expressions that cause an assertion failure (like `assert system == "i686-linux"'). This allows all-packages.nix in Nixpkgs to be used on all platforms, even if some Nix expressions don't work on all platforms. Not sure if this is a good idea; it's a bit hacky. In particular, due to laziness some derivations might appear in `nix-env -qa' but disappear in `nix-env -qas' or `nix-env -i'. Commit 5000!
2006-03-08 * Some refactoring of the exception handling code so that we can catchEelco Dolstra1-13/+19
Nix expression assertion failures.
2005-07-25 * Added a list concatenation operator:Eelco Dolstra1-0/+16
[1 2 3] ++ [4 5 6] => [1 2 3 4 5 6]
2004-11-03 * string2ATerm -> overloaded toATerm.Eelco Dolstra1-4/+4
2004-10-29 * Drop ATmake / ATMatcher also in handling store expressions.Eelco Dolstra1-2/+2
2004-10-26 * Don't use ATmake / ATmatch anymore, nor the ATMatcher class.Eelco Dolstra1-88/+72
Instead we generate data bindings (build and match functions) for the constructors specified in `constructors.def'. In particular this removes the conversions between AFuns and strings, and Nix expression evaluation now seems 3 to 4 times faster.
2004-10-26 * Doh!Eelco Dolstra1-1/+1
2004-10-26 * String/path concatenation operator (`+').Eelco Dolstra1-0/+14
2004-10-25 * New language feature: with expressions.Eelco Dolstra1-4/+24
The expression `with E1; E2' evaluates to E2 with all bindings in the attribute set E1 substituted. E.g., with {x = 123;}; x evaluates to 123. That is, the attribute set E1 is in scope in E2. This is particularly useful when importing files containing lots definitions. E.g., instead of let { inherit (import ./foo.nix) a b c d e f; body = ... a ... f ...; } we can now say with import ./foo.nix; ... a ... f ... I.e., we don't have to say what variables should be brought into scope.
2004-08-04 * Every real language has a `map' function.Eelco Dolstra1-1/+1
2004-08-04 * Allow primops with more that 1 arguments.Eelco Dolstra1-44/+37
2004-04-05 * When something goes wrong in the evaluation of a Nix expression,Eelco Dolstra1-29/+55
print a nice backtrace of the stack, rather than vomiting a gigantic (and useless) aterm on the screen. Example: error: while evaluating file `.../pkgs/system/test.nix': while evaluating attribute `subversion' at `.../pkgs/system/all-packages-generic.nix', line 533: while evaluating function at `.../pkgs/applications/version-management/subversion/default.nix', line 1: assertion failed at `.../pkgs/applications/version-management/subversion/default.nix', line 13 Since the Nix expression language is lazy, the trace may be misleading. The purpose is to provide a hint as to the location of the problem.
2004-03-30 * The recent change in nixpkgs of calling `stdenv.mkDerivation'Eelco Dolstra1-0/+5
instead of `derivation' triggered a huge slowdown in the Nix expression evaluator. Total execution time of `nix-env -qa' went up by a factor of 60 or so. This scalability problem was caused by expressions such as (x: y: ... x ...) a b where `a' is a large term (say, the one in `all-packages-generic.nix'). Then the first beta-reduction would produce (y: ... a ...) b by substituting `a' for `x'. The second beta-reduction would then substitute `b' for `y' into the body `... a ...', which is a large term due to `a', and thus causes a large traversal to be performed by substitute() in the second reduction. This is however entirely redundant, since `a' cannot contain free variables (since we never substitute below a weak head normal form). The solution is to wrap substituted terms into a `Closed' constructor, i.e., subst(subs, Var(x)) = Closed(e) iff subs[x] = e have substitution not descent into closed terms, subst(subs, Closed(x)) = Closed(x) and otherwise ignore them for evaluation, eval(Closed(x)) = eval(x). * Fix a typo that caused incorrect substitutions to be performed in simple lambdas, e.g., `(x: x: x) a' would reduce to `(x: a)'.
2004-03-28 * Added an operator `?' to test for attribute existence, e.g.,Eelco Dolstra1-1/+8
`attrs ? x' yields true iff `attrs' has an attribute named `x'.
2004-03-28 * Added an operator `~' to select paths within a derivation. E.g.,Eelco Dolstra1-0/+1
{stdenv, bash}: derivation { builder = bash ~ /bin/sh; args = ["-e" "-x" ./builder.sh]; ... } Here the attribute `builder' will evaluate to, e.g., `/nix/store/1234abcd...-bash-2.0.1/bin/sh'.
2004-03-28 * Added plain lambdas, e.g., `let { id = x: x; const = x: y: x; }'.Eelco Dolstra1-0/+7
`bla:' is now no longer parsed as a URL. * Re-enabled support for the `args' attribute in derivations to specify command line arguments to the builder, e.g., ... builder = /usr/bin/python; args = ["-c" ./builder.py]; ...
2004-03-19 * `null' is a normal form.Eelco Dolstra1-8/+11
2004-02-16 * Inherited attributes in recursive attribute sets are in scope of theEelco Dolstra1-6/+7
non-inherited attributes.
2004-02-04 * An attribute set update operator (//). E.g.,Eelco Dolstra1-0/+16
{x=1; y=2; z=3;} // {y=4;} => {x=1; y=4; z=3;}
2004-02-04 * Use a map to lookup primops.Eelco Dolstra1-15/+53
* Various performance improvements in the evaluator. * Do not link against unused (and missing!) libraries (-lsglr, etc.).