nushell/crates/nu-command/src
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
..
bits Box ShellError in Value::Error (#8375) 2023-03-12 09:57:27 +01:00
bytes fix: bytes length example description typo (#8550) 2023-03-21 11:41:37 -05:00
charting fix: fixed typo and improved Value TypeMismatch exceptions (#8324) 2023-03-22 09:47:40 +01:00
conversions Box ShellError in Value::Error (#8375) 2023-03-12 09:57:27 +01:00
database Add pattern matching (#8590) 2023-03-24 14:52:01 +13:00
dataframe docs: Use capital letters for CSV and JSON acronyms (#8459) 2023-03-15 21:52:13 -07:00
date Box ShellError in Value::Error (#8375) 2023-03-12 09:57:27 +01:00
debug Make timeit work with command calls (#8594) 2023-03-24 22:34:03 +13:00
deprecated Revert "Allow NU_LIBS_DIR and friends to be const" (#8501) 2023-03-17 09:33:24 -05:00
env Switch let/let-env family to init with math expressions (#8545) 2023-03-23 09:14:10 +13:00
experimental Uniformize usage() and extra_usage() message ending for commands helper. (#8268) 2023-02-28 21:33:02 -08:00
filesystem Better error message for mv when file not found (#8586) 2023-03-23 11:31:49 -07:00
filters Fix closures that use matches. Move 'collect' to core. (#8596) 2023-03-24 22:50:23 +13:00
formats Add pattern matching (#8590) 2023-03-24 14:52:01 +13:00
generators Document and critically review ShellError variants - Ep. 2 (#8326) 2023-03-06 11:31:07 +01:00
hash Box ShellError in Value::Error (#8375) 2023-03-12 09:57:27 +01:00
math Box ShellError in Value::Error (#8375) 2023-03-12 09:57:27 +01:00
misc Uniformize usage() and extra_usage() message ending for commands helper. (#8268) 2023-02-28 21:33:02 -08:00
network Make HTTP requests cancellable when trying to connect (#8591) 2023-03-24 12:45:55 -07:00
path Box ShellError in Value::Error (#8375) 2023-03-12 09:57:27 +01:00
platform Box ShellError in Value::Error (#8375) 2023-03-12 09:57:27 +01:00
random Document and critically review ShellError variants - Ep. 3 (#8340) 2023-03-06 18:33:09 +01:00
shells Document and critically review ShellError variants - Ep. 3 (#8340) 2023-03-06 18:33:09 +01:00
strings Decode and Encode hex (#8392) 2023-03-24 12:25:26 +01:00
system feat: add a command_not_found hook (#8314) 2023-03-20 17:05:22 +13:00
viewers Optional members in cell paths: Attempt 2 (#8379) 2023-03-15 20:50:58 -07:00
default_context.rs Decode and Encode hex (#8392) 2023-03-24 12:25:26 +01:00
example_test.rs cratification: Example support (#8231) 2023-02-27 13:58:56 -08:00
hook.rs Move variables to var stack (#8604) 2023-03-25 12:56:45 +13:00
input_handler.rs Box ShellError in Value::Error (#8375) 2023-03-12 09:57:27 +01:00
lib.rs feat: add a command_not_found hook (#8314) 2023-03-20 17:05:22 +13:00
progress_bar.rs cp progress bar implementation (#8012) 2023-02-22 11:57:38 -08:00
sort_utils.rs Document and critically review ShellError variants - Ep. 3 (#8340) 2023-03-06 18:33:09 +01:00
util.rs feat: add a command_not_found hook (#8314) 2023-03-20 17:05:22 +13:00