about summary refs log tree commit diff
path: root/tvix/eval/Cargo.toml
AgeCommit message (Collapse)AuthorFilesLines
2022-11-08 r/5263 feat(tvix/eval): Add a proc-macro for defining builtinsGriffin Smith1-0/+1
Add a single new proc macro to a new proc-macro crate, `tvix-eval-proc-macros` for defining an inline module containing nix builtins, and automatically generating a function within that module which returns a list of those builtins as `tvix_eval::value::Builtin`. Change-Id: Ie4afae438914d2af93d15637151a49b4c68aa352 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7198 Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: Adam Joseph <adam@westernsemico.com> Tested-by: BuildkiteCI
2022-10-20 r/5163 test(tvix/eval): enable nix_tests by defaultsterni1-1/+1
Since cl/7036 we have a mechanism for dealing with the nix_tests we do not pass yet. Change-Id: I246c52963ae7f2500253f4035a77d7006dd35307 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7049 Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-10-16 r/5143 feat(tvix/eval): add an AST pretty-printing moduleVincent Ambo1-1/+2
This implements serde::Serialize for the rnix AST through a wrapper type, and exposes a function for serialising the AST into a (pretty-printed JSON) string representation. This can be used to debug issues with the AST, and to display an AST reprsentation in tools like tvixbolt. Serialize is implemented manually because we don't own any of the structs and the way to traverse them is not easily derived automatically, and this is quite verbose. We might be able to condense it a little bit, but at the same time it's also fairly straightforward. Change-Id: I922df43cfc25636f3c8baee7944c75ade516055c Reviewed-on: https://cl.tvl.fyi/c/depot/+/6943 Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI Reviewed-by: Adam Joseph <adam@westernsemico.com> Reviewed-by: tazjin <tazjin@tvl.su>
2022-10-15 r/5136 feat(tvix/eval): Initial impl of builtins.matchGriffin Smith1-0/+1
Implement an *initial* version of builtins.match, using the rust `regex` crate for regular expressions. The rust regex crate definitely has different semantics than nix's regular expressions - but we'd like to see how far we can get before the incompatibility starts to matter. This consciously leaves out any sort of memo for compiled regular expressions (which upstream nix also has) for the sake of expediency - in the future we should implement that so we don't have to compile the same regular expression multiple times. Change-Id: I5b718635831ec83397940e417a9047c4342b6fa1 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6989 Tested-by: BuildkiteCI Reviewed-by: Adam Joseph <adam@westernsemico.com> Reviewed-by: tazjin <tazjin@tvl.su>
2022-10-15 r/5135 feat(tvix/eval): Implement builtins.fromJSONGriffin Smith1-0/+1
Using `serde_json` for parsing JSON here, plus an `impl FromJSON for Value`. The latter is primarily to stay "dependency light" for now - likely going with an actual serde `Deserialize` impl in the future is going to be way better as it allows saving significantly on intermediary allocations. Change-Id: I152a0448ff7c87cf7ebaac927c38912b99de1c18 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6920 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-09-22 r/4958 fix(tvix/eval): support string identifiers in inheritsVincent Ambo1-2/+2
This updates rnix-parser to a version where inherits provide an iterator over `ast::Attr` instead of `ast::Ident`, which mirrors the behaviour of Nix (inherits can have (statically known) strings as their identifiers). This actually required some fairly significant code reshuffling in the compiler, as there was an implicit assumption in many places that we would have an `ast::Ident` node available when dealing with variable access (which is then explicitly only not true in this case). Change-Id: I12f1e786c0030c85107b1aa409bd49adb5465546 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6747 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-09-22 r/4954 feat(tvix/eval): Sketch out impure builtinsGriffin Smith1-1/+4
Sketch out a new set of "impure" builtins, which supplement the existing set of "pure" builtins but are gated behind a feature flag, which allows them to be omitted by crates depending on tvix-eval that only want pure evaluation, such as tvixbolt. Change-Id: I2736017b5c9b4776bbba8758e108ec84887abd66 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6655 Reviewed-by: wpcarro <wpcarro@gmail.com> Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: tazjin <tazjin@tvl.su>
2022-09-18 r/4911 refactor(tvix/eval): use Clap for arg+env parsingGriffin Smith1-1/+2
Refactor the environment variable and argument parsing for the tvix repl to use Clap instead of doing things ad-hoc, and thread through options obtained from environment variables via explicit arguments rather than obtaining them from the environment as they're needed. This makes adding more flags more sustainable, and also makes the binary fully self-documenting, including supported env vars, via `--help`. Change-Id: Ib1f6a0cd20056e8c9196760ff755fa5729667760 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6653 Autosubmit: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-09-18 r/4897 chore(tvix/eval): bump rnix-parser to latest HEADVincent Ambo1-2/+2
This bumps rnix-parser to a commit that should be unaffected by the Nix >= 2.4 bug that prevents it from cloning repositories with filters. Change-Id: Ie01da95245ec6740fa889eb710819e512202f665 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6634 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-09-17 r/4891 chore(tvix/eval): Add deps on proptest+test_strategyGriffin Smith1-1/+6
It's proptest time! Add deps on the proptest and test_strategy crates, gated behind a new (default-enabled) "arbitrary" feature flag so that they don't affect dependencies of things like tvixbolt that depend on tvix. These are going in dependencies, not dev-dependencies, so that we can impl Arbitrary for stuff outside of test modules (which will be important for integration suites which want to run proptests) Change-Id: I1613bd3ea9a835e22986ad4e59700e8736007963 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6624 Autosubmit: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-09-17 r/4886 test(tvix/eval): Add the start of a nix oracle test suiteGriffin Smith1-0/+1
Add the start of a test suite that compares tvix eval results against nix, using the string repr of the value as the comparison. This shells out to a nix-instantiate binary, which is configurable as an environment variable, to eval - there's some extra machinery there to setup a new nix store as a tempdir to allow running this test inside the nix build for tvix-eval itself. Currently this has a macro that'll allow writing lots and lots of hardcoded tests, but going forward I'm also going to be looking into adding proptest-based generation of expressions to compare. Change-Id: I9f4895fab1e668ed2b7dfd6f92f8c80de1bbb16b Reviewed-on: https://cl.tvl.fyi/c/depot/+/6307 Autosubmit: grfn <grfn@gws.fyi> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2022-09-13 r/4827 chore(tvix/eval): add dependency on codemap-diagnosticVincent Ambo1-0/+1
This is a crate for source-span based error reporting. Since all of our spans are already codemap spans, it is a good starting point. We have to figure out quite a bit of logic for neat error printing; later on if we want fancier presentation we might want to look at one of the other libraries in this space like miette. Change-Id: I4e28886af1ed199b7112d9dbf063c9f29b612bf1 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6531 Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: grfn <grfn@gws.fyi>
2022-09-09 r/4775 feat(tvix/eval): implement DisassemblingObserver for compilerVincent Ambo1-4/+1
This type implements an observer that is called whenever the compiler emits a chunk (after the toplevel, thunks, or lambdas) and prints the output of the disassembler to its internal writer. This replaces half of the uses of the `disassembler` feature, which has been removed from the Cargo configuration. Note that at this commit runtime tracing is not yet implemented as an observer. Change-Id: I7894ca1ba445761aba4ad51d98e4a7b6445f1aea Reviewed-on: https://cl.tvl.fyi/c/depot/+/6449 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
2022-09-09 r/4772 chore(tvix/eval): gate REPL-only dependencies behind `repl` featureVincent Ambo1-1/+13
With this change, it becomes possible to compile tvix-eval to webassembly if the `repl` feature is disabled. Change-Id: Icc0a059964cd0bea2054110c682d50fc5c87ec01 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6446 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-09-07 r/4708 chore(tvix/eval): bump all dependenciesVincent Ambo1-2/+2
Updated the rnix hash manually, and ran `cargo update` for the rest. Change-Id: I457262625d648e25d745efa4d33ae44cb8f21326 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6375 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-09-07 r/4707 chore(tvix/eval): add codemap dependencyVincent Ambo1-0/+1
This will be used to track source spans when emitting bytecode. The codemap is a data structure which tracks *all* the source files visited by an evaluation, and makes it possible to represent locations across all of the files using a simple span (i.e. pair of offsets). When reporting errors, this even contains enough information to reconstruct the rnix AST to create fancier reporting in certain cases if desired. Change-Id: I4ae98620b9b150fb5a389bd7f1e12670e3192c62 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6374 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-09-07 r/4698 chore(tvix/eval): add release-with-debug cargo profileVincent Ambo1-0/+4
This lets us create a release build with debug info, for use with e.g. perf + hotspot Change-Id: I03897de36c872d318abf1332ca0c1aeabe344ec6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6362 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-09-03 r/4615 test(tvix/eval): Add attr merge benchmarksGriffin Smith1-0/+1
Add a quick couple of benchmarks for merging attribute sets, large and small. Change-Id: I26940a9cf4e0d30e3d9eb07a7b8c366ca4072ca3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6286 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: grfn <grfn@gws.fyi>
2022-09-01 r/4569 chore(tvix/eval): bump rnix-parser to latest masterVincent Ambo1-2/+2
In this commit, the string interpolation parsing is identical to nixpkgs which makes some of the upstream Nix tests for interpolation-related weirdness pass. Change-Id: I3a295cfdc404c32228a54846e6efd3c0dcee5842 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6233 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
2022-09-01 r/4567 refactor(tvix/eval): Upgrade to latest rnix-parserVincent Ambo1-1/+7
Since the latest published version of rnix-parser on crates.io, the crate has undergone major changes which are only available in the git repository at the moment. This commit updates the compiler to this newer version of rnix. Most notably, the entire AST provided by rnix is now wrapped in the AST type system. As a result of this traversal is much nicer in many places, especially for things like nested attribute selection. There are a handful of smaller features missing for full feature parity with the previous version, especially handling of path literals, but PRs for these already exist in rnix-parser. Change-Id: Icde6d393067976549492b7d89c4cc49e5e575fc7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6231 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
2022-09-01 r/4563 refactor(tvix/eval): use pretty_assertions for testsVincent Ambo1-0/+1
This makes for much more readable output especially when long strings are involved. Change-Id: I43dd73a0480535d7181a760788c42883a9b083f8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6229 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-08-30 r/4533 feat(tvix/eval): implement optional runtime tracingVincent Ambo1-0/+4
This adds a `disassembler` feature to the crate configuration that traces the operations executed and the state of the stack at runtime. This can be enabled by compiling with `--feature disassembler`. This will also gain a more sensible layout of code slices eventually. Change-Id: I34c15e1cd346ecc4362b5afba6bf82dd49359d20 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6193 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-08-28 r/4520 fix(tvix/eval): use path_clean instead of fs::canonicalize for pathsVincent Ambo1-0/+1
Canonicalisation performs much more functionality than what C++ Nix implements for paths, and causes some undesirable behaviour (e.g. handling non-existant files becomes difficult, but should be possible in literals). Instead, the path_clean crate provides a pure normalisation method. There is an intention to add this to Rust itself: https://github.com/rust-lang/rfcs/issues/2208 Change-Id: I775d238136db0a52cf6b12a68985833c8fb32882 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6186 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2022-08-26 r/4504 chore(tvix/cargo): add dirs dependencyVincent Ambo1-0/+1
This crate provides sensible default locations for directories on different platforms. Change-Id: I0b61cc7f626dc6c8df903ba0f873be24e07d69b5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6170 Reviewed-by: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI
2022-08-26 r/4503 chore(tvix/cargo): add rustyline dependencyVincent Ambo1-0/+1
There's a few options for this, but this one seems fine in terms of features and doesn't have an insane amount of dependencies. Change-Id: Ief99e66bfee0ba0ba1cfdd09568b002121b7325b Reviewed-on: https://cl.tvl.fyi/c/depot/+/6169 Reviewed-by: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI
2022-08-26 r/4498 refactor(tvix/value): replace static representation with SmolStrVincent Ambo1-0/+1
The only uses of the static variant were for `"name"` and `"value"`, which are both small enough to fit into a SmolStr. The size of NixString accomodates `String` anyways, so we may as well inline them. Additionally smol_str is already in the dependency graph because rnix uses it, and using it for representations of identifiers is sensible. Change-Id: I9969312256d1657d69128e54c47dc7294a18ce58 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6165 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: grfn <grfn@gws.fyi>
2022-08-25 r/4489 feat(tvix/eval): Add initial benchmarking infrastructureGriffin Smith1-0/+5
Bootstrap some (initially very simple, mostly proof-of-concept) benchmarking infrastructure using Criterion, using the newly-exposed lib from tvix-eval. Change-Id: I4bb93c142ba8d018d7e67e58ac8907a0429398a5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6156 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI Autosubmit: grfn <grfn@gws.fyi>
2022-08-24 r/4464 chore(tvix/tests): gate Nix test suite behind `nix_tests` featureVincent Ambo1-0/+5
Once we have full coverage they should be enabled by default. Change-Id: Iace9e1ae9a9f901a0979ad336434004b8028fe8a Reviewed-on: https://cl.tvl.fyi/c/depot/+/6129 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
2022-08-24 r/4460 chore(tvix/eval): add 'test-generator' as dev-dependencyVincent Ambo1-0/+3
This crate makes it easy to generate test cases from files on disk, which is used for running the Nix test suite against Tvix. Change-Id: I60ef26484d05e723982679dd42958adf52735916 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6125 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 r/4402 chore(tvix/eval): add rnix-parser dependencyVincent Ambo1-0/+1
Change-Id: I81bd8416b3837a728ecd7911fe1ca06e89b9e90e Reviewed-on: https://cl.tvl.fyi/c/depot/+/6065 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 r/4398 feat(tvix/eval): check in generated project skeletonVincent Ambo1-0/+8
Change-Id: Iecc8283abb289de71f22076fd88892f6ded99cb3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6062 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>