nushell/crates
Ian Manske 9996e4a1f8
Shrink the size of Expr (#12610)
# Description
Continuing from #12568, this PR further reduces the size of `Expr` from
64 to 40 bytes. It also reduces `Expression` from 128 to 96 bytes and
`Type` from 32 to 24 bytes.

This was accomplished by:
- for `Expr` with multiple fields (e.g., `Expr::Thing(A, B, C)`),
merging the fields into new AST struct types and then boxing this struct
(e.g. `Expr::Thing(Box<ABC>)`).
- replacing `Vec<T>` with `Box<[T]>` in multiple places. `Expr`s and
`Expression`s should rarely be mutated, if at all, so this optimization
makes sense.

By reducing the size of these types, I didn't notice a large performance
improvement (at least compared to #12568). But this PR does reduce the
memory usage of nushell. My config is somewhat light so I only noticed a
difference of 1.4MiB (38.9MiB vs 37.5MiB).

---------

Co-authored-by: Stefan Holderbach <sholderbach@users.noreply.github.com>
2024-04-24 15:46:35 +00:00
..
nu_plugin_custom_values Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_example Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu_plugin_formats Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00: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_nu_example Add an example Nushell plugin written in Nushell itself (#12574) 2024-04-19 09:53:30 +03:00
nu_plugin_polars Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu_plugin_python Fix the error output in the python plugin to match LabeledError (#12575) 2024-04-18 20:01:35 -05:00
nu_plugin_query Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu_plugin_stress_internals Fix (and test) for a deadlock that can happen while waiting for protocol info (#12633) 2024-04-24 08:44:04 -05:00
nu-cli Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu-cmd-base Remove the Value::Block case (#12582) 2024-04-21 07:03:33 +02:00
nu-cmd-dataframe Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu-cmd-extra Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu-cmd-lang Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu-cmd-plugin Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu-color-config Refactor using ClosureEval types (#12541) 2024-04-22 14:15:09 +08:00
nu-command Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu-engine Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu-explore Replace subtraction of Instants and Durations with saturating subtractions (#12549) 2024-04-17 07:25:16 -05: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 improve nu --lsp command tooltips (#12589) 2024-04-20 07:16:38 -05:00
nu-parser Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu-path Accept filenames in other plugin management commands (#12639) 2024-04-24 06:28:45 -05:00
nu-plugin Fix (and test) for a deadlock that can happen while waiting for protocol info (#12633) 2024-04-24 08:44:04 -05:00
nu-plugin-test-support Local socket mode and foreground terminal control for plugins (#12448) 2024-04-15 18:28:18 +00:00
nu-pretty-hex Bump version to 0.92.3 (#12476) 2024-04-12 08:00:43 -05:00
nu-protocol Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00:00
nu-std Fix circular source causing Nushell to crash (#12262) 2024-04-19 09:38:08 +03:00
nu-system Replace subtraction of Instants and Durations with saturating subtractions (#12549) 2024-04-17 07:25:16 -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 Deprecate register and add plugin use (#12607) 2024-04-23 06:37:50 -05:00
nu-utils Copy-on-write for record values (#12305) 2024-04-14 01:42:03 +00:00
nuon Shrink the size of Expr (#12610) 2024-04-24 15:46:35 +00: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.