# 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
> ```