nushell/crates
JT 13515c5eb0
Limited mutable variables (#7089)
This adds support for (limited) mutable variables. Mutable variables are created with mut much the same way immutable variables are made with let.

Mutable variables allow mutation via the assignment operator (=).

❯ mut x = 100
❯ $x = 200
❯ print $x
200

Mutable variables are limited in that they're only tended to be used in the local code block. Trying to capture a local variable will result in an error:

❯ mut x = 123; {|| $x }
Error: nu::parser::expected_keyword (link)

  × Capture of mutable variable.

The intent of this limitation is to reduce some of the issues with mutable variables in general: namely they make code that's harder to reason about. By reducing the scope that a mutable variable can be used it, we can help create local reasoning about them.

Mutation can occur with fields as well, as in this case:

❯ mut y = {abc: 123}
❯ $y.abc = 456
❯ $y

On a historical note: mutable variables are something that we resisted for quite a long time, leaning as much as we could on the functional style of pipelines and dataflow. That said, we've watched folks struggle to work with reduce as an approximation for patterns that would be trivial to express with local mutation. With that in mind, we're leaning towards the happy path.
2022-11-11 19:51:08 +13:00
..
nu-cli Limited mutable variables (#7089) 2022-11-11 19:51:08 +13:00
nu-color-config bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu-command Limited mutable variables (#7089) 2022-11-11 19:51:08 +13:00
nu-engine Limited mutable variables (#7089) 2022-11-11 19:51:08 +13:00
nu-glob bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu-json bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu-parser Limited mutable variables (#7089) 2022-11-11 19:51:08 +13:00
nu-path bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu-plugin bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu-pretty-hex bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu-protocol Limited mutable variables (#7089) 2022-11-11 19:51:08 +13:00
nu-system Turn off foreground processes on macOS (#7068) 2022-11-10 07:39:09 +13:00
nu-table bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu-term-grid bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu-test-support bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu-utils bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu_plugin_custom_values bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu_plugin_example bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu_plugin_gstat bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu_plugin_inc bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
nu_plugin_python Further edits to help messages (#6913) 2022-10-26 09:36:42 -07:00
nu_plugin_query bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01:00
old bump to dev release 0.71.1 (#7064) 2022-11-09 13:18:34 +01: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.