about summary refs log tree commit diff
path: root/corp (follow)
AgeCommit message (Collapse)AuthorFilesLines
2022-10-27 r/5213 feat(tvix/eval): builtins.import without RefCellAdam Joseph1-1/+1
CL/6867 added support for builtins.import, which required a cyclic reference import->globals->builtins->import. This was implemented using a RefCell, which makes it possible to mutate the builtins during evaluation. The commit message for CL/6867 expressed a desire to eliminate this possibility: This opens up a potentially dangerous footgun in which we could mutate the builtins at runtime leading to different compiler invocations seeing different builtins, so it'd be nice to have some kind of "finalised" status for them or some such, but I'm not sure how to represent that atm. This CL replaces the RefCell with Rc::new_cyclic(), making the globals/builtins immutable once again. At VM runtime (once opcodes start executing) everything is the same as before this CL, except that the Rc<RefCell<>> introduced by CL/6867 is turned into an rc::Weak<>. The function passed to Rc::new_cyclic works very similarly to overlays in nixpkgs: a function takes its own result as an argument. However instead of laziness "breaking the cycle", Rust's Rc::new_cyclic() instead uses an rc::Weak. This is done to prevent memory leaks rather than divergence. This CL also resolves the following TODO from CL/6867: // TODO: encapsulate this import weirdness in builtins The main disadvantage of this CL is the fact that the VM now must ensure that it holds a strong reference to the globals while a program is executing; failure to do so will cause a panic when the weak reference in the builtins is upgrade()d. In theory it should be possible to create strong reference cycles the same way Rc::new_cyclic() creates weak cycles, but these cycles would cause a permanent memory leak -- without either an rc::Weak or RefCell there is no way to break the cycle. At some point we will have to implement some form of cycle collection; whatever library we choose for that purpose is likely to provide an "immutable strong reference cycle" primitive similar to Rc::new_cyclic(), and we should be able to simply drop it in. Signed-off-by: Adam Joseph <adam@westernsemico.com> Change-Id: I34bb5821628eb97e426bdb880b02e2097402adb7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7097 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-10-16 r/5145 refactor(tvixbolt): use details elements for toggling outputsVincent Ambo2-36/+70
For optional outputs (runtime trace & AST) this has a slightly nicer user experience. Note that the code of this is a bit verbose because doing a naive implementation hits dumb behaviours of browsers that result in infinite loops. Thanks Profpatsch for the suggestion. Change-Id: I8945a8e722f0ad8735829807fb5e39e2101f378c Reviewed-on: https://cl.tvl.fyi/c/depot/+/7006 Reviewed-by: j4m3s <james.landrein@gmail.com> Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2022-10-16 r/5144 feat(tvixbolt): add toggle for displaying pretty-printed ASTVincent Ambo1-2/+26
This uses the JSON serialisation of the AST introduced earlier to display a text box with the serialised AST to users. Useful for debugging. Change-Id: Ibc400eaf5ca87fa5072d5c044942505331c3bb40 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7005 Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI Reviewed-by: Adam Joseph <adam@westernsemico.com> Reviewed-by: tazjin <tazjin@tvl.su>
2022-10-16 r/5143 feat(tvix/eval): add an AST pretty-printing moduleVincent Ambo1-0/+1
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/+33
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-2/+3
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-10-10 r/5087 feat(tvix/eval): Initial resolution of `<...>` pathsGriffin Smith1-2/+10
This commit implements (lazy) resolution of `<...>` paths via either the NIX_PATH environment variable, or the -I command-line flag - both handled via EvalOptions. As a result, EvalOptions can no longer derive Copy, meaning we have to clone it at each line of the repl - this is probably not a huge deal as repl performance is not exactly an inner loop and we're not cloning very much. Internally, this works by creating a thunk which pushes a constant containing the string inside the brackets to the stack, then a new opcode to resolve that path via the `NixPath`. To get that opcode to work, we now have to pass in the NixPath when constructing the VM. This (intentionally) leaves out proper implementation of path resolution via `findFile` (cppnix just calls whatever identifier called findFile is in scope!!!) as that's widely considered a bit of a misfeature, but if we do decide to implement that down the road it likely wouldn't be more than a few extra ops within the thunk introduced here. Change-Id: Ibc979b7e425b65cbe88599940520239a4a10cee2 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6918 Autosubmit: grfn <grfn@gws.fyi> Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2022-10-07 r/5049 feat(tvix/eval): add method for emitting runtime warningsVincent Ambo1-1/+12
This lets the VM emit warnings when it encounters situations that should only be warned about at runtime. For starters, this is used to pass through compilation warnings that come up when `import` is used. Change-Id: I0c4bc8c534d699999887c430d93629fadfa662c4 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6868 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI
2022-10-07 r/5048 feat(tvix/eval): insert `import` into the builtins itselfVincent Ambo1-1/+3
Adding `import` to builtins causes causes a bootstrap cycle because the `import` builtin needs to be initialised with the set of globals before being inserted into the globals, which also must contain itself. To break out of the cycle this hack wraps the builtins passed to the compiler in an `Rc` (probably sensible anyways, as they will end up getting cloned a bunch), containing a RefCell which gives us mutable access to the builtins. This opens up a potentially dangerous footgun in which we could mutate the builtins at runtime leading to different compiler invocations seeing different builtins, so it'd be nice to have some kind of "finalised" status for them or some such, but I'm not sure how to represent that atm. Change-Id: I25f8d4d2a7e8472d401c8ba2f4bbf9d86ab2abcb Reviewed-on: https://cl.tvl.fyi/c/depot/+/6867 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
2022-10-06 r/5046 chore(3p/sources): Bump channels & overlayssterni2-35/+35
* //3p/overlays: kill electrum override applied upstream * //corp/tvixbolt, //users/tazjin/predlozhnik: update wasm-bindgen to match nixpkgs and run `cargo update` Change-Id: If4327112832fd0c7938962dd8d3888d4730b7532 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6874 Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-10-05 r/5035 refactor(tvix/eval): introduce source::SourceCode typeVincent Ambo1-9/+8
This type hides away the lower-level handling of most codemap data structures, especially to library consumers (see corresponding changes in tvixbolt). This will help with implement `import` by giving us central control over how the codemap works. Change-Id: Ifcea36776879725871b30c518aeb96ab5fda035a Reviewed-on: https://cl.tvl.fyi/c/depot/+/6855 Tested-by: BuildkiteCI Reviewed-by: wpcarro <wpcarro@gmail.com>
2022-10-04 r/5034 refactor(tvix/eval): remove unnecessary clones in compilerVincent Ambo1-1/+1
There's basically nothing that needs *ownership* of an AST node (which is just a little box full of references to other things anyways), so we can thread this through as references all the way. Change-Id: I35a1348a50c0e8e07d51dfc18847829379166fbf Reviewed-on: https://cl.tvl.fyi/c/depot/+/6853 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
2022-09-28 r/4980 chore(3p/sources): Bump channels & overlayssterni1-1/+1
Upstream nixpkgs removed a lot of aliases this time, so we needed to do the following transformations. It's a real shame that aliases only really become discoverable easily when they are removed. * runCommandNoCC -> runCommand * gmailieer -> lieer We also need to work around the fact that home-manager hasn't catched on to this rename. * mysql -> mariadb * pkgconfig -> pkg-config This also affects our Nix fork which needs to be bumped. * prometheus_client -> prometheus-client * rxvt_unicode -> rxvt-unicode-unwrapped * nix-review -> nixpkgs-review * oauth2_proxy -> oauth2-proxy Additionally, some Go-related builders decided to drop support for passing the sha256 hash in directly, so we need to use the generic hash arguments. Change-Id: I84aaa225ef18962937f8616a9ff064822f0d5dc3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6792 Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi> Reviewed-by: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: wpcarro <wpcarro@gmail.com>
2022-09-22 r/4958 fix(tvix/eval): support string identifiers in inheritsVincent Ambo3-3/+3
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-20 r/4935 chore(corp/tvixbolt): gitignore trunk's `dist` folderVincent Ambo1-0/+1
Change-Id: Id9df1b33f0e4f9e54b186b2040ba30d9bcd27d54 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6708 Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2022-09-19 r/4922 chore(gerrit): migrate OWNERS files to code-owners styleLuke Granger-Brown1-3/+3
Change-Id: Iacc521dfdd4b4a2d5cef3920cf8189bcce35a488
2022-09-18 r/4907 refactor(tvix/eval): clone the Arc<codemap::File> for the compilerVincent Ambo1-1/+1
This disconnects ownership of the `File` reference in a compiler from the calling scope, which is required for when we implement `import`. `import` will need to carry an `Rc<RefCell<CodeMap>>` (or maybe, in the future, Arc) to give us the ability to add new detected code files at runtime. Note that the choice of `Arc` over `Rc` here is not ours - it's the codemap crate's. Change-Id: I3aeca4ffc167acbd1701846a332d93550b56ba7d Reviewed-on: https://cl.tvl.fyi/c/depot/+/6630 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
2022-09-18 r/4900 feat(corp/tvixbolt): persist state in tvixbolt's URLVincent Ambo3-10/+23
This makes it possible to enter something into tvixbolt and then share the link with someone else. Suggested by Profpatsch originally. Change-Id: I9886e76a7b821070f13ea7005df09188821e091d Reviewed-on: https://cl.tvl.fyi/c/depot/+/6636 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
2022-09-18 r/4899 chore(corp/tvixbolt): add yew-router dependencyVincent Ambo2-11/+115
This will be used to set/get query parameters for making shareable links. Change-Id: I05ccf8cab2521564710523ccd3b25ec26f435dd5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6633 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
2022-09-18 r/4897 chore(tvix/eval): bump rnix-parser to latest HEADVincent Ambo3-3/+3
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-13 r/4837 feat(corp/tvixbolt): use fancy error formattingVincent Ambo1-5/+8
Change-Id: I633154f3a2ae2b1789992a1137c944e897c56b2c Reviewed-on: https://cl.tvl.fyi/c/depot/+/6535 Reviewed-by: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI
2022-09-13 r/4834 feat(corp/tvixbolt): add an ad in the footerVincent Ambo2-0/+25
As previously mentioned on IRC, this is why tvixbolt is under //corp. The majority of people in our community probably block ads anyways, but might as well ... The ad account is linked to the TVL legal entity. The ad is configured not to use any personalised data. In testing it's showing me lamps and shoes. This is the same kind of ad as on my grammar page, predlozhnik.ru Change-Id: I172881ed5d5ceb1fdeb2298b8f822d0c2a6518a8 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6558 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2022-09-13 r/4831 feat(corp/tvixbolt): use fancy warning formattingVincent Ambo1-5/+3
Unfortunately the codemap-diagnostic crate doesn't provide a way to get colour control characters written to an arbitrary writer, so this is black & white only, but we can look at this later if we introduce something even fancier. For now it's reasonable. Change-Id: I1c7655cc4b254f77768b5931bc95fa13b3bd7e12 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6533 Reviewed-by: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI
2022-09-13 r/4829 feat(ops/modules): deploy tvixbolt to tvixbolt.tvl.suVincent Ambo1-0/+7
Change-Id: I534cf918fc3e03ce8c14cf15f6d3280b6a657c8d Reviewed-on: https://cl.tvl.fyi/c/depot/+/6536 Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
2022-09-13 r/4827 chore(tvix/eval): add dependency on codemap-diagnosticVincent Ambo1-0/+50
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-11 r/4815 chore(corp/tvixbolt): check in generated Cargo.lock changeVincent Ambo1-0/+1
Change-Id: I9f87ced716a4328b24fd8fa2eec077ce8dc4a7db Reviewed-on: https://cl.tvl.fyi/c/depot/+/6504 Tested-by: BuildkiteCI Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: tazjin <tazjin@tvl.su>
2022-09-11 r/4791 feat(corp/tvixbolt): add Nix build instructionsVincent Ambo2-1/+80
Now that tvix-eval has almost caught up, tvixbolt can be built in the depot tree. Change-Id: Ib26dd98727b110ad8d668aec60db99678644a167 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6491 Tested-by: BuildkiteCI Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: sterni <sternenseemann@systemli.org>
2022-09-05 r/4650 fix(corp/tvixbolt): make label really clickableProfpatsch1-1/+1
It looks like this was intended, but typoed. Change-Id: I830d6f0488b75b859bcf4175531c35d79cd40985 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6335 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-09-05 r/4649 fix(corp/tvixbolt): move output above bytecode sectionVincent Ambo1-1/+1
Most expressions people enter will probably have a fairly small result. It's useful to see *that* it did the correct thing before looking at *how* it did that. Change-Id: I50d7d4c07e41f11b71a16c00c49b9553ae9e90a5 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6334 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-09-04 r/4645 feat(corp/tvixbolt): implement optional runtime tracingVincent Ambo1-6/+28
Uses Tvix's new `TracingObserver` to optionally produce a runtime trace, which the user can toggle via a checkbox. Runtime traces can be quite long, so they're only produced if asked for. Change-Id: Id0f27dc8ef6e9d81a31ecf22c81757b066815320 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6331 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-09-04 r/4644 feat(corp/tvixbolt): add some additional information on the pageVincent Ambo2-7/+83
A little bit easier to grasp what's going on then just a blank page with a textbox ... Change-Id: I16f456035173813d60d88ff7e5ebd14712f77ec3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6330 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-09-04 r/4631 refactor(corp/tvixbolt): adapt for tvix-eval's upcoming observer APIVincent Ambo2-13/+12
Instead of the previous hack which painfully threaded through a structure that the disassembler could write to, Tvix's evaluator is gaining a new "Observer" API which lets library clients observe compilation output (and, soon!, runtime tracing). This adapts tvixbolt to use this observer interface (with the default `DisassemblingObserver`) to populate the `bytecode` field of its output. This is purely a mechanical change, no functionality is impacted. Change-Id: I22bd2218629f30fd7351d4cc5ddcf639c12fea14 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6316 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-09-04 r/4630 feat(corp/tvixbolt): check in initial tvixbolt versionVincent Ambo6-0/+862
This is the code backing the small site currently deployed at https://tazj.in/blobs/nixbolt/index.html This relies on a newer version of Tvix than is available in depot and a bunch of other stuff that isn't public yet, so for now no build file is provided as this is heavily work-in-progress. Change-Id: I7a8e4dbf4e11d1c70175f929e65f40ff69acbbd9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6315 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
2022-01-31 r/3723 style: format entire depot with nixpkgs-fmtVincent Ambo1-1/+2
This CL can be used to compare the style of nixpkgs-fmt against other formatters (nixpkgs, alejandra). Change-Id: I87c6abff6bcb546b02ead15ad0405f81e01b6d9e Reviewed-on: https://cl.tvl.fyi/c/depot/+/4397 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org> Reviewed-by: lukegb <lukegb@tvl.fyi> Reviewed-by: wpcarro <wpcarro@gmail.com> Reviewed-by: Profpatsch <mail@profpatsch.de> Reviewed-by: kanepyork <rikingcoding@gmail.com> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: cynthia <cynthia@tvl.fyi> Reviewed-by: edef <edef@edef.eu> Reviewed-by: eta <tvl@eta.st> Reviewed-by: grfn <grfn@gws.fyi>
2021-10-07 r/2953 refactor(web): use static.tvl.{fyi|su} for static assetsVincent Ambo2-3/+2
Replaces all uses of relative static paths in TVL pages with the static.tvl.fyi domain. Where possible, the drv hash is directly embedded in the content. Change-Id: Ia882dd37ceae9d047cd81cf1eb37a856b339643a Reviewed-on: https://cl.tvl.fyi/c/depot/+/3682 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2021-10-01 r/2942 refactor(web/tvl/template): Make static asset URL configurableVincent Ambo1-1/+1
Change-Id: I168924cd7b15103d64c9ad72172f72304e1d3a7d Reviewed-on: https://cl.tvl.fyi/c/depot/+/3659 Tested-by: BuildkiteCI Reviewed-by: sterni <sternenseemann@systemli.org>
2021-10-01 r/2940 refactor(corp/website): Write index into a folder insteadVincent Ambo1-13/+17
This makes it possible to directly use the folder as an nginx root. Change-Id: I8cb5236f8d6d01658926330a01c9dfdfa7d60dcc Reviewed-on: https://cl.tvl.fyi/c/depot/+/3657 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
2021-09-28 r/2934 feat(corp/website): Add initial website for tvl.suVincent Ambo2-0/+59
Change-Id: I83506c214a5db1be283913ed2ebd182fbba00c61 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3650 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
2021-09-28 r/2932 feat(corp): Bootstrap //corp subtreeVincent Ambo2-0/+7
This will be used for anything to do with the TVL company. For the most part this will be website stuff, and maybe a handful of legal documents. Usage rights to this folder are reserved, in contrast to the rest of the depot. Change-Id: I7fb70278f49d52d7c54132fe4f8f22fb93a10da7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/3648 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI