# Nushell core team meeting 2023-09-20 ## Attendees - JT - Stefan - Antoine - Michael - NotLebedev - Darren - FilipAnderson - Reilly - Jakub ## Agenda - [x] release issues? (lots of comments on faster startup) - [x] complex type annotations ([#10405](https://github.com/nushell/nushell/pull/10405)) - [x] Fuzzing the parser - [x] Defaulting history to sqlite with history isolation versus plaintext [10440](https://github.com/nushell/nushell/pull/10440) - Related: [request for migration script/tooling #9403](https://github.com/nushell/nushell/issues/9403) - What does history isolation mean ? - Negatives: Much more challenging to edit your history going forward - I (storm) have had cases where I "mess" up my history file by adding an entry I no longer want to appear in the history and so I have to go in and hand edit the file. - If we move in this direction we should have scripts that enable one to remove a particular history entry by running a nushell script and it should be documented ? - [x] Long/multiline strings -- do we need a nicer way to create them? - [ ] Making progress on the "hard stuff" - [ ] stdout/stderr - [ ] signals and background tasks - [ ] resize + reedline - [ ] streams as values ## Discussed Topics ### Release issues - NetBSD: Issue delegated to uutils #### Startup - Darren observed significant improvements - allocator - platform specific compilation on Mac Aarch64 - `[[[[[[[` worse case, possibly there was a problem even for sane parses - Kubouch doesn't observe bigger changes - Antoine: Major contribution of config/stdlib to startup delay - How to instrument contribution of parsing and evaluation of that - Darren: JT removed profile instrumentation, probably remove the command/collection - Kubouch on it ### Complex type annotations - currently we don't report changes to inner types in commands - escaping to `any` is still frequently needed - JT: hack `record<...>` would be allowed in a more concrete requirement - NotLebedev fixed lexing stage of the parser - do the change to the semantics in the ### we now have fuzz targets - check it out in: - https://github.com/nushell/nushell/tree/main/crates/nu-parser/fuzz - https://github.com/nushell/nushell/tree/main/crates/nu-path/fuzz - Issues and fixes already coming in ### Changes to the history - Julian Hofer improved `history_isolation`: - Sqlite only (at the moment) - parallel sessions will be isolated - but now you can still read your old history - Julian proposing to make this the default - Migration from text before landing - `history migrate`? as a command - Jakub: sync option to unify the sessions if needed - Michael: deletion of entries should be easy with the sqlite db as well -> tracking issue and wait with making it default in a release ### Long/multiline strings Currently a bit unpleasant to type Long strings examples: ```nushell let text = $"expected `$.type` to be one of [module, script," + " custom], got ($package.type)" ``` ```nushell throw-error ($"Module package '($package.name)' does not" + $" contain directory '($package.name)'") ``` Darren: the line editor will accept the example when pressing enter on the first line Multiline strings example: ```nushell throw-error ( [ $"package_file_not_found(ansi reset):" $"no 'package.nuon' found in ($dir)" ] | str join (char nl)) ``` Jakub: should we have the python like triple quote strings. not closing the quote to continue (tricky due to leading whitespace semantics) ##### Related: multiline command invocations - e.g. long (external) command - Parentheses are adding a subexpression (collecting) - `\` as a line continuation + windows path separator a problem - no easy/good continuation character - NotLebedev: `%` rarely used (missing new line indicator in some shells) - Q: is this valid syntax where it matters - used in Windows special variables - valid filename on linux - URLs - Jakub: For externals you can pass a list of arguments ### Outstanding big issues: Making progress on the hard stuff - Background tasks - reedline rough edges Scary to tackle, no progress from us at the moment - JT: Can we get folks chipping away at the big blockers - Stefan: Tracking issues collecting the research #### Reedline - NotLebedev: Testing is a big issue - Reilly: escape-artist project: https://github.com/rgwood/escape-artist I'm using Wez's `portable-pty` library: https://docs.rs/portable-pty/latest/portable_pty/ - Stefan: possibly problem with the input during testing (we don't want to lock up the event loop when not in a tty) #### Parser - few people can review PRs and hack easily - incremental vs rewrite of large blocks - are we calcified in our design? - data oriented design enticing (possible performance) ### Span separation can we move to ids, smaller than our current `Span` - would already provide a compression - no separate logic with `Spanned/UnspannedValue` - cost only at error print time Goal having those actual spans living with the AST. So no independent `Span` pairs (which would require separate GC), engine_state doesn't evict code currently anyways ## Issues > :bulb: the issues which [needs-core-team-attention](https://github.com/nushell/nushell/labels/needs-core-team-attention) > :bulb: **Note** > to list all the PRs currently [opened in `nushell/nushell`](https://github.com/nushell/nushell/pulls): > ```nu > gh pr list --json url,number,author,title > | from json > | each {|i| > $"- [($i.number)]\(($i.url)\) ($i.title) \(@($i.author.login)\)" > } > | reverse > | to text > ```