nushell/crates
Stefan Holderbach 9c7feb2b19
Reduce table allocs: only strip ANSI if necessary (#4378)
For the width calculations for table layout the `strip_ansi` function
has to be called frequently. By checking for the ASCII control chars
(0x00 to 0x1f) except `\n` that are stripped by `strip_ansi_escapes` the number of
necessary allocations can be reduced significantly for the simple case
of text not containing ANSI escapes.

**Benchmark:**

```
nu -c "for i in 0..1000 { ls } | flatten | table"
```

**Allocation reduction**

Running on the nushell repo root as the directory, this change reduces the
allocation volume by approximately 400 MB

(Measured run via KDE heaptrack)
**Speed improvement to output**

Measured via `/usr/bin/time -v`

*before*

```
Command being timed: "./eager_nu -c for i in 0..1000 {ls} | flatten | table"
	User time (seconds): 0.87
	System time (seconds): 0.14
	Percent of CPU this job got: 87%
	Elapsed (wall clock) time (h:mm:ss or m:ss): 0:01.16
	Average shared text size (kbytes): 0
	Average unshared data size (kbytes): 0
	Average stack size (kbytes): 0
	Average total size (kbytes): 0
	Maximum resident set size (kbytes): 18888
	Average resident set size (kbytes): 0
	Major (requiring I/O) page faults: 0
	Minor (reclaiming a frame) page faults: 4809
	Voluntary context switches: 38
	Involuntary context switches: 14
	Swaps: 0
	File system inputs: 0
	File system outputs: 0
	Socket messages sent: 0
	Socket messages received: 0
	Signals delivered: 0
	Page size (bytes): 4096
	Exit status: 0
```

*after*

```
Command being timed: "./lazy_nu -c for i in 0..1000 {ls} | flatten | table"
	User time (seconds): 0.63
	System time (seconds): 0.14
	Percent of CPU this job got: 80%
	Elapsed (wall clock) time (h:mm:ss or m:ss): 0:00.97
	Average shared text size (kbytes): 0
	Average unshared data size (kbytes): 0
	Average stack size (kbytes): 0
	Average total size (kbytes): 0
	Maximum resident set size (kbytes): 18660
	Average resident set size (kbytes): 0
	Major (requiring I/O) page faults: 0
	Minor (reclaiming a frame) page faults: 5149
	Voluntary context switches: 24
	Involuntary context switches: 5
	Swaps: 0
	File system inputs: 0
	File system outputs: 0
	Socket messages sent: 0
	Socket messages received: 0
	Signals delivered: 0
	Page size (bytes): 4096
	Exit status: 0
```
2022-02-08 17:43:32 -06:00
..
nu_plugin_chart Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_example Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_from_bson Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_from_mp4 Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_from_sqlite Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_gstat Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_inc Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_match Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_python name change (#526) 2021-12-19 10:00:31 +00:00
nu_plugin_query Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_s3 Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_start Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_to_bson Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_to_sqlite Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu_plugin_tree Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-ansi-term Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-cli Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-color-config Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-command Support records in reject command (#4373) 2022-02-08 15:57:46 -05:00
nu-engine Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-json Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-parser Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-path Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-plugin Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-pretty-hex Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-protocol Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-system Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-table Reduce table allocs: only strip ANSI if necessary (#4378) 2022-02-08 17:43:32 -06:00
nu-term-grid Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00
nu-test-support Remove old nushell/merge engine-q 2022-02-07 14:54:06 -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.