dillon1000/react

Commit

[rust-compiler] Use rustc-hash FxHasher for all maps and sets (#36811)

Swaps the default hashers across the Rust compiler crates for
rustc-hash's faster `FxHasher`.

## Why

`FxHasher` is a simple, fast, non-cryptographic hasher. std's default
(SipHash) is DoS-resistant but heavy — the compiler keys maps/sets
almost entirely on small integer IDs (`IdentifierId`, `BlockId`,
`ScopeId`, …) where that protection buys nothing. Switching gives:

- **Performance** — faster hashing on the hot ID-keyed maps/sets used
throughout the passes.
- **Slight binary size reduction** — drops the heavy SipHash hasher
pulled in by std's `HashMap`/`HashSet`.

## Changes

- `std::collections::HashMap`/`HashSet` →
`rustc_hash::FxHashMap`/`FxHashSet`
- `indexmap` `IndexMap`/`IndexSet` now use `FxBuildHasher`, inlined as
`IndexMap<K, V, FxBuildHasher>` (no `FxIndexMap` type aliases)
- `rustc-hash = "2"` added to all 12 crate manifests
- `rustc_hash`/`indexmap` imports consolidated into single brace imports
at the top of each file

The change is serde-neutral: `FxHashMap` and `IndexMap<_, _,
FxBuildHasher>` serialize to byte-identical JSON, and `IndexMap` keeps
insertion order.

`cargo check`, `cargo fmt --check`, and `cargo test` all pass with no
warnings.
Browse files
Changed paths89 files
First-parent comparison
M compiler/Cargo.lock ModifiedM compiler/crates/react_compiler/Cargo.toml ModifiedM compiler/crates/react_compiler/src/entrypoint/imports.rs ModifiedM compiler/crates/react_compiler/src/entrypoint/pipeline.rs ModifiedM compiler/crates/react_compiler/src/entrypoint/program.rs ModifiedM compiler/crates/react_compiler/src/entrypoint/validate_source_locations.rs ModifiedM compiler/crates/react_compiler_ast/Cargo.toml ModifiedM compiler/crates/react_compiler_ast/src/scope.rs ModifiedM compiler/crates/react_compiler_diagnostics/Cargo.toml ModifiedM compiler/crates/react_compiler_diagnostics/src/code_frame.rs ModifiedM compiler/crates/react_compiler_hir/Cargo.toml ModifiedM compiler/crates/react_compiler_hir/src/default_module_type_provider.rs ModifiedM compiler/crates/react_compiler_hir/src/dominator.rs ModifiedM compiler/crates/react_compiler_hir/src/environment.rs ModifiedM compiler/crates/react_compiler_hir/src/environment_config.rs ModifiedM compiler/crates/react_compiler_hir/src/globals.rs ModifiedM compiler/crates/react_compiler_hir/src/lib.rs ModifiedM compiler/crates/react_compiler_hir/src/object_shape.rs ModifiedM compiler/crates/react_compiler_hir/src/print.rs ModifiedM compiler/crates/react_compiler_hir/src/type_config.rs ModifiedM compiler/crates/react_compiler_hir/src/visitors.rs ModifiedM compiler/crates/react_compiler_inference/Cargo.toml ModifiedM compiler/crates/react_compiler_inference/src/align_method_call_scopes.rs ModifiedM compiler/crates/react_compiler_inference/src/align_object_method_scopes.rs ModifiedM compiler/crates/react_compiler_inference/src/align_reactive_scopes_to_block_scopes_hir.rs ModifiedM compiler/crates/react_compiler_inference/src/analyse_functions.rs ModifiedM compiler/crates/react_compiler_inference/src/build_reactive_scope_terminals_hir.rs ModifiedM compiler/crates/react_compiler_inference/src/infer_mutation_aliasing_effects.rs ModifiedM compiler/crates/react_compiler_inference/src/infer_mutation_aliasing_ranges.rs ModifiedM compiler/crates/react_compiler_inference/src/infer_reactive_places.rs ModifiedM compiler/crates/react_compiler_inference/src/infer_reactive_scope_variables.rs ModifiedM compiler/crates/react_compiler_inference/src/memoize_fbt_and_macro_operands_in_same_scope.rs ModifiedM compiler/crates/react_compiler_inference/src/merge_overlapping_reactive_scopes_hir.rs ModifiedM compiler/crates/react_compiler_inference/src/propagate_scope_dependencies_hir.rs ModifiedM compiler/crates/react_compiler_lowering/Cargo.toml ModifiedM compiler/crates/react_compiler_lowering/src/build_hir.rs ModifiedM compiler/crates/react_compiler_lowering/src/find_context_identifiers.rs ModifiedM compiler/crates/react_compiler_lowering/src/hir_builder.rs ModifiedM compiler/crates/react_compiler_lowering/src/identifier_loc_index.rs ModifiedM compiler/crates/react_compiler_optimization/Cargo.toml ModifiedM compiler/crates/react_compiler_optimization/src/constant_propagation.rs ModifiedM compiler/crates/react_compiler_optimization/src/dead_code_elimination.rs ModifiedM compiler/crates/react_compiler_optimization/src/drop_manual_memoization.rs ModifiedM compiler/crates/react_compiler_optimization/src/inline_iifes.rs ModifiedM compiler/crates/react_compiler_optimization/src/merge_consecutive_blocks.rs ModifiedM compiler/crates/react_compiler_optimization/src/name_anonymous_functions.rs ModifiedM compiler/crates/react_compiler_optimization/src/optimize_for_ssr.rs ModifiedM compiler/crates/react_compiler_optimization/src/outline_functions.rs ModifiedM compiler/crates/react_compiler_optimization/src/outline_jsx.rs ModifiedM compiler/crates/react_compiler_optimization/src/prune_maybe_throws.rs ModifiedM compiler/crates/react_compiler_optimization/src/prune_unused_labels_hir.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/Cargo.toml ModifiedM compiler/crates/react_compiler_reactive_scopes/src/assert_scope_instructions_within_scopes.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/assert_well_formed_break_targets.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/build_reactive_function.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/codegen_reactive_function.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/extract_scope_declarations_from_destructuring.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/merge_reactive_scopes_that_invalidate_together.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/promote_used_temporaries.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/prune_always_invalidating_scopes.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/prune_hoisted_contexts.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/prune_non_escaping_scopes.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/prune_non_reactive_dependencies.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/prune_unused_labels.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/prune_unused_lvalues.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/rename_variables.rs ModifiedM compiler/crates/react_compiler_reactive_scopes/src/stabilize_block_ids.rs ModifiedM compiler/crates/react_compiler_ssa/Cargo.toml ModifiedM compiler/crates/react_compiler_ssa/src/eliminate_redundant_phi.rs ModifiedM compiler/crates/react_compiler_ssa/src/enter_ssa.rs ModifiedM compiler/crates/react_compiler_ssa/src/rewrite_instruction_kinds_based_on_reassignment.rs ModifiedM compiler/crates/react_compiler_typeinference/Cargo.toml ModifiedM compiler/crates/react_compiler_typeinference/src/infer_types.rs ModifiedM compiler/crates/react_compiler_utils/Cargo.toml ModifiedM compiler/crates/react_compiler_utils/src/disjoint_set.rs ModifiedM compiler/crates/react_compiler_validation/Cargo.toml ModifiedM compiler/crates/react_compiler_validation/src/validate_context_variable_lvalues.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_exhaustive_dependencies.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_hooks_usage.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_locals_not_reassigned_after_render.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_no_capitalized_calls.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_no_derived_computations_in_effects.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_no_freezing_known_mutable_functions.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_no_ref_access_in_render.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_no_set_state_in_effects.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_no_set_state_in_render.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_preserved_manual_memoization.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_static_components.rs ModifiedM compiler/crates/react_compiler_validation/src/validate_use_memo.rs Modified
Patch

Files changed

Rendering syntax-highlighted changes…