Changes global allocator to mimalloc, improving performance. (#9415)

# Description
<!--
Thank you for improving Nushell. Please, check our [contributing
guide](../CONTRIBUTING.md) and talk to the core team before making major
changes.

Description of your pull request goes here. **Provide examples and/or
screenshots** if your changes affect the user experience.
-->

this PR makes nushell use mimalloc as the default allocator, this has
the benefit of reducing startup time on my machine. `17%` on linux and
`22%` on windows, when testing using hyperfine.
the overhead to compile seem to be quite small, aswell as the increase
of binary size quite small
on linux the binary went from `33.1mb` to `33.2mb`

linux

![image](https://github.com/nushell/nushell/assets/17986183/ba5379b4-2c08-483a-a9ff-a9d8524d2943)

windows 

![image](https://github.com/nushell/nushell/assets/17986183/fda5090f-96a9-48d1-ada4-617694b9d880)


# User-Facing Changes
<!-- List of all changes that impact the user experience here. This
helps us keep track of breaking changes. -->

# 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 -A clippy::result_large_err` to check that
you're using the standard code style
- `cargo test --workspace` to check that all tests pass
- `cargo run -- crates/nu-std/tests/run.nu` to run the tests for the
standard library

> **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.
-->
This commit is contained in:
Filip Andersson
2023-06-15 00:27:12 +02:00
committed by GitHub
parent 46eebc644c
commit 2fd4a36c0d
5 changed files with 43 additions and 0 deletions

View File

@ -28,6 +28,7 @@ ahash = "0.8.3"
shadow-rs = { version = "0.22", default-features = false }
[features]
mimalloc = []
which-support = []
trash-support = []
sqlite = []

View File

@ -117,6 +117,12 @@ pub fn version(
vals.push(Value::string(build_rust_channel, call.head));
}
cols.push("allocator".to_string());
vals.push(Value::String {
val: global_allocator().to_string(),
span: call.head,
});
cols.push("features".to_string());
vals.push(Value::String {
val: features_enabled().join(", "),
@ -144,6 +150,14 @@ pub fn version(
.into_pipeline_data())
}
fn global_allocator() -> &'static str {
if cfg!(feature = "mimalloc") {
"mimalloc"
} else {
"standard"
}
}
fn features_enabled() -> Vec<String> {
let mut names = vec!["default".to_string()];