nushell/crates
JT c0648a83be
Move variables to var stack (#8604)
# Description

This moves the representation of variables on the stack to a Vec, which
more closely resembles a stack. For small numbers of variables live at
any one point, this tends to be more efficient than a HashMap. Having a
stack-like vector also allows us to remember a stack position,
temporarily push variables on, then quickly drop the stack back to the
original size when we're done. We'll need this capability to allow
matching inside of conditions.

On this mac, a simple run of:

`timeit { mut x = 1; while $x < 1000000 { $x += 1 } }`

Went from 1 sec 86 ms, down to 1 sec 2 ms. Clearly, we have a lot more
ground we can make up in looping speed 😅 but it's nice that for fixing
this to make matching easier, we also get a win in terms of lookup speed
for small numbers of variables.

# User-Facing Changes

Likely users won't (hopefully) see any negative impact and may even see
a small positive impact.

# Tests + Formatting

Don't forget to add tests that cover your changes.

Make sure you've run and fixed any issues with these commands:

- `cargo fmt --all -- --check` to check standard code formatting (`cargo
fmt --all` applies these changes)
- `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A
clippy::needless_collect` to check that you're using the standard code
style
- `cargo test --workspace` to check that all tests pass

> **Note**
> from `nushell` you can also use the `toolkit` as follows
> ```bash
> use toolkit.nu # or use an `env_change` hook to activate it
automatically
> toolkit check pr
> ```

# After Submitting

If your PR had any user-facing changes, update [the
documentation](https://github.com/nushell/nushell.github.io) after the
PR is merged, if necessary. This will help us keep the docs up to date.
2023-03-25 12:56:45 +13:00
..
nu-cli Bump miette from 5.5.0 to 5.6.0 (#8531) 2023-03-24 22:55:25 +13:00
nu-cmd-lang Move variables to var stack (#8604) 2023-03-25 12:56:45 +13:00
nu-color-config Add pattern matching (#8590) 2023-03-24 14:52:01 +13:00
nu-command Move variables to var stack (#8604) 2023-03-25 12:56:45 +13:00
nu-engine Move variables to var stack (#8604) 2023-03-25 12:56:45 +13:00
nu-explore bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu-glob bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu-json bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu-parser type-check default values of list annotations (#8600) 2023-03-25 08:57:18 +13:00
nu-path bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu-plugin bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu-pretty-hex bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu-protocol Move variables to var stack (#8604) 2023-03-25 12:56:45 +13:00
nu-system bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu-table bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu-term-grid bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu-test-support Remove once_cell dependency from nu-test-support create. (#8568) 2023-03-22 19:36:52 +01:00
nu-utils Add pattern matching (#8590) 2023-03-24 14:52:01 +13:00
nu_plugin_custom_values bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu_plugin_example bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu_plugin_formats bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu_plugin_gstat bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu_plugin_inc bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13:00
nu_plugin_python update nu_plugin_python due to signature changes (#8107) 2023-02-18 13:27:24 +00:00
nu_plugin_query bump to 0.77.2 (#8496) 2023-03-17 21:29:15 +13: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.