Changes HashMap to use aHash instead, giving a performance boost. (#9391)

# Description

see https://github.com/nushell/nushell/issues/9390
using `ahash` instead of the default hasher. this will not affect
compile time as we where already building `ahash`.


# 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-10 18:41:58 +02:00
committed by GitHub
parent e605d8007c
commit 1433f4a520
69 changed files with 124 additions and 93 deletions

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use ahash::{HashMap, HashMapExt};
use serde::{Deserialize, Serialize};

View File

@ -1,7 +1,7 @@
use serde::{Deserialize, Serialize};
use crate::{span, ModuleId, Span};
use std::collections::HashSet;
use ahash::{HashSet, HashSetExt};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ImportPatternMember {

View File

@ -1,6 +1,6 @@
use crate::{ShellError, Span, Value};
use ahash::{HashMap, HashMapExt};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
const TRIM_STRATEGY_DEFAULT: TrimStrategy = TrimStrategy::Wrap {
try_to_keep_words: true,

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use ahash::HashMap;
use crate::{BlockId, Value, VarId};

View File

@ -7,17 +7,15 @@ use crate::{
Signature, Span, Type, VarId, Variable, VirtualPathId,
};
use crate::{ParseError, Value};
use ahash::{HashMap, HashMapExt, HashSet, HashSetExt};
use core::panic;
use std::borrow::Borrow;
use std::num::NonZeroUsize;
use std::path::Path;
use std::path::PathBuf;
use std::{
collections::{HashMap, HashSet},
sync::{
atomic::{AtomicBool, AtomicU32},
Arc, Mutex,
},
use std::sync::{
atomic::{AtomicBool, AtomicU32},
Arc, Mutex,
};
static PWD_ENV: &str = "PWD";
@ -170,7 +168,9 @@ impl EngineState {
false,
),
ctrlc: None,
env_vars: EnvVars::from([(DEFAULT_OVERLAY_NAME.to_string(), HashMap::new())]),
env_vars: [(DEFAULT_OVERLAY_NAME.to_string(), HashMap::new())]
.into_iter()
.collect(),
previous_env_vars: HashMap::new(),
config: Config::default(),
pipeline_externals_state: Arc::new((AtomicU32::new(0), AtomicU32::new(0))),
@ -436,7 +436,7 @@ impl EngineState {
env_vars.insert(name, val);
} else {
self.env_vars
.insert(overlay_name, HashMap::from([(name, val)]));
.insert(overlay_name, [(name, val)].into_iter().collect());
}
}

View File

@ -1,6 +1,6 @@
use crate::{DeclId, ModuleId, OverlayId, Type, Value, VarId};
use ahash::{HashMap, HashMapExt};
use std::borrow::Borrow;
use std::collections::HashMap;
use std::hash::{Hash, Hasher};
pub static DEFAULT_OVERLAY_NAME: &str = "zero";

View File

@ -1,4 +1,4 @@
use std::collections::{HashMap, HashSet};
use ahash::{HashMap, HashMapExt, HashSet, HashSetExt};
use crate::engine::EngineState;
use crate::engine::DEFAULT_OVERLAY_NAME;
@ -154,13 +154,14 @@ impl Stack {
if let Some(env_vars) = scope.get_mut(last_overlay) {
env_vars.insert(var, value);
} else {
scope.insert(last_overlay.into(), HashMap::from([(var, value)]));
scope.insert(last_overlay.into(), [(var, value)].into_iter().collect());
}
} else {
self.env_vars.push(HashMap::from([(
last_overlay.into(),
HashMap::from([(var, value)]),
)]));
self.env_vars.push(
[(last_overlay.into(), [(var, value)].into_iter().collect())]
.into_iter()
.collect(),
);
}
} else {
// TODO: Remove panic
@ -394,7 +395,7 @@ impl Stack {
env_hidden.insert(name.into());
} else {
self.env_hidden
.insert(active_overlay.into(), HashSet::from([name.into()]));
.insert(active_overlay.into(), [name.into()].into_iter().collect());
}
return true;

View File

@ -1,4 +1,4 @@
use std::collections::HashMap;
use ahash::{HashMap, HashMapExt};
use std::path::PathBuf;
use std::str::FromStr;

View File

@ -11,6 +11,7 @@ use crate::ast::{Math, Operator};
use crate::engine::EngineState;
use crate::ShellError;
use crate::{did_you_mean, BlockId, Config, Span, Spanned, Type, VarId};
use ahash::HashMap;
use byte_unit::ByteUnit;
use chrono::{DateTime, Duration, FixedOffset};
use chrono_humanize::HumanTime;
@ -25,7 +26,6 @@ pub use range::*;
use serde::{Deserialize, Serialize};
use std::{
borrow::Cow,
collections::HashMap,
fmt::{Display, Formatter, Result as FmtResult},
iter,
path::PathBuf,