nushell/crates
Devyn Cairns 2ae9ad8676
Copy-on-write for record values (#12305)
# Description
This adds a `SharedCow` type as a transparent copy-on-write pointer that
clones to unique on mutate.

As an initial test, the `Record` within `Value::Record` is shared.

There are some pretty big wins for performance. I'll post benchmark
results in a comment. The biggest winner is nested access, as that would
have cloned the records for each cell path follow before and it doesn't
have to anymore.

The reusability of the `SharedCow` type is nice and I think it could be
used to clean up the previous work I did with `Arc` in `EngineState`.
It's meant to be a mostly transparent clone-on-write that just clones on
`.to_mut()` or `.into_owned()` if there are actually multiple
references, but avoids cloning if the reference is unique.

# User-Facing Changes
- `Value::Record` field is a different type (plugin authors)

# Tests + Formatting
- 🟢 `toolkit fmt`
- 🟢 `toolkit clippy`
- 🟢 `toolkit test`
- 🟢 `toolkit test stdlib`

# After Submitting
- [ ] use for `EngineState`
- [ ] use for `Value::List`
2024-04-14 01:42:03 +00:00
..
nu-cli Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu-cmd-base Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-cmd-dataframe Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu-cmd-extra Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu-cmd-lang Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu-color-config Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-command Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu-engine Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-explore Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu-glob Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-json Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-lsp Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-parser Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-path Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-plugin Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu-plugin-test-support Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu-pretty-hex Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-protocol Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu-std Fixes #12482 by pointing help links for ndjson to a non-spam source (take 2) (#12509) 2024-04-13 18:59:43 -05:00
nu-system Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-table Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu-term-grid Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-test-support Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-utils Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu_plugin_custom_values Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_example Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_formats Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_gstat Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_inc Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_polars Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nu_plugin_python Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_query Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
README.md Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00

Nushell core libraries and plugins

These sub-crates form both the foundation for Nu and a set of plugins which extend Nu with additional functionality.

Foundational libraries are split into two kinds of crates:

  • Core crates - those crates that work together to build the Nushell language engine
  • Support crates - a set of crates that support the engine with additional features like JSON support, ANSI support, and more.

Plugins are likewise also split into two types:

  • Core plugins - plugins that provide part of the default experience of Nu, including access to the system properties, processes, and web-connectivity features.
  • Extra plugins - these plugins run a wide range of different capabilities like working with different file types, charting, viewing binary data, and more.