Skip to content

Commit

Permalink
refactor(common): Make ahash optional (#7816)
Browse files Browse the repository at this point in the history
**Description:**

This adds the ability to not include `ahash` with swc_common, which
caused some issues for me compiling dprint-plugin-typescript to Wasm
because of:

```
   Compiling ahash v0.8.3
   Compiling getrandom v0.2.10
error: the wasm*-unknown-unknown targets are not supported by default, you may need to enable the "js" feature. For more information see: https://docs.rs/getrandom/#webassembly-support
   --> C:\Users\david\.cargo\registry\src\index.crates.io-6f17d22bba15001f\getrandom-0.2.10\src\lib.rs:285:9
    |
285 | /         compile_error!("the wasm*-unknown-unknown targets are not supported by \
286 | |                         default, you may need to enable the \"js\" feature. \
287 | |                         For more information see: \
288 | |                         https://docs.rs/getrandom/#webassembly-support");
    | |________________________________________________________________________^
``` 

(I can't enable the JS feature because it's running the wasm file in
Wasmer and also I don't support Wasi in dprint plugins)

**BREAKING CHANGE:**

This removes swc_common's "perf" feature and makes it the default, then
adds an `ahash` feature instead. An alternative would be to make the
`ahash` dep optional and part of the default features, then do
`default-features = false` in the downstream crates (I think, but I'm
not sure), but I figure most people will be using the perf default
anyway? I'm not sure what's preferable.

**Related issue:**

 - Closes #7729.
  • Loading branch information
dsherret committed Aug 16, 2023
1 parent d5495ee commit 981d7b1
Show file tree
Hide file tree
Showing 7 changed files with 13 additions and 15 deletions.
1 change: 0 additions & 1 deletion bindings/binding_core_wasm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ serde = { version = "1", features = ["derive"] }
serde-wasm-bindgen = "0.4.5"
swc_core = { version = "0.79.59", features = [
"ecma_ast_serde",
"common_perf",
"binding_macro_wasm",
"ecma_transforms",
"ecma_visit",
Expand Down
1 change: 1 addition & 0 deletions crates/swc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ url = "2.4.0"
swc_atoms = { version = "0.5.8", path = "../swc_atoms" }
swc_cached = { version = "0.3.17", path = "../swc_cached" }
swc_common = { version = "0.31.20", path = "../swc_common", features = [
"ahash",
"sourcemap",
"parking_lot",
] }
Expand Down
4 changes: 2 additions & 2 deletions crates/swc_common/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ bench = false
__plugin = []
__plugin_mode = []
__plugin_rt = []
ahash = ["dep:ahash"]
concurrent = ["parking_lot"]
debug = []
default = []
diagnostic-serde = []
perf = []
plugin-base = ["__plugin", "anyhow", "rkyv-impl", "diagnostic-serde"]
plugin-mode = ["__plugin_mode", "plugin-base"]
plugin-rt = ["__plugin_rt", "plugin-base"]
Expand All @@ -37,7 +37,7 @@ __rkyv = []
rkyv-impl = ["__rkyv", "rkyv", "swc_atoms/rkyv-impl", "bytecheck"]

[dependencies]
ahash = "0.8.3"
ahash = { version = "0.8.3", optional = true }
anyhow = { version = "1.0.71", optional = true }
arbitrary = { version = "1", optional = true, features = ["derive"] }
atty = { version = "0.2", optional = true }
Expand Down
12 changes: 6 additions & 6 deletions crates/swc_common/src/collections.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#[cfg(not(feature = "perf"))]
#[cfg(feature = "ahash")]
pub use self::ahash::*;
#[cfg(feature = "perf")]
pub use self::fxhash::*;
#[cfg(not(feature = "ahash"))]
pub use self::rustchash::*;

#[cfg(feature = "perf")]
mod fxhash {
#[cfg(not(feature = "ahash"))]
mod rustchash {
use std::{
collections::{HashMap, HashSet},
hash::BuildHasherDefault,
Expand All @@ -19,7 +19,7 @@ mod fxhash {
pub type AHashSet<V> = HashSet<V, ARandomState>;
}

#[cfg(not(feature = "perf"))]
#[cfg(feature = "ahash")]
mod ahash {
use std::collections::{HashMap, HashSet};

Expand Down
4 changes: 2 additions & 2 deletions crates/swc_common/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
//! Allows replacing operations related to thread-local variables with a trait.
//!
//!
//! ## `perf`
//! ## `ahash`
//!
//! Use `fxhash` instead of `ahash` for `AHashMap` and `AHashSet`.
//! Use `ahash` instead of `rustc_hash` for `AHashMap` and `AHashSet`.
#![deny(clippy::all)]
#![cfg_attr(docsrs, feature(doc_cfg))]

Expand Down
5 changes: 2 additions & 3 deletions crates/swc_core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ repository = "https://github.com/swc-project/swc.git"
version = "0.79.62"
[package.metadata.docs.rs]
features = [
"common_perf",
"allocator_node",
"base",
"base_node",
Expand Down Expand Up @@ -38,8 +37,8 @@ doctest = false
## but changes internal logics to perform differently. These flag should be turned on in combination with
## actual features. Refer build.rs for more details.

# swc_common/perf
common_perf = ["swc_common/perf"]
# swc_common/ahash
common_ahash = ["swc_common/ahash"]

# swc_ecma_loader/cache*
ecma_loader_lru = ["swc_ecma_loader/lru"]
Expand Down
1 change: 0 additions & 1 deletion crates/swc_core/tests/fixture/stub_wasm/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ anyhow = "1.0.66"
serde = { version = "1", features = ["derive"] }
serde-wasm-bindgen = "0.4.5"
swc_core = { path = "../../../../swc_core", features = [
"common_perf",
"ecma_ast_serde",
"binding_macro_wasm",
"ecma_transforms",
Expand Down

1 comment on commit 981d7b1

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 981d7b1 Previous: b43e38d Ratio
es/full/bugs-1 289459 ns/iter (± 3587) 288172 ns/iter (± 5458) 1.00
es/full/minify/libraries/antd 1330727513 ns/iter (± 34598979) 1359085106 ns/iter (± 31967358) 0.98
es/full/minify/libraries/d3 278224504 ns/iter (± 2548501) 287914427 ns/iter (± 5911039) 0.97
es/full/minify/libraries/echarts 1058670113 ns/iter (± 10972379) 1103774738 ns/iter (± 23162266) 0.96
es/full/minify/libraries/jquery 84833160 ns/iter (± 316477) 85720262 ns/iter (± 205767) 0.99
es/full/minify/libraries/lodash 98527912 ns/iter (± 356825) 99670875 ns/iter (± 647857) 0.99
es/full/minify/libraries/moment 49936635 ns/iter (± 127278) 50724162 ns/iter (± 415253) 0.98
es/full/minify/libraries/react 17960580 ns/iter (± 55612) 18075434 ns/iter (± 54002) 0.99
es/full/minify/libraries/terser 218829885 ns/iter (± 910541) 222746257 ns/iter (± 2644116) 0.98
es/full/minify/libraries/three 386830207 ns/iter (± 3007863) 404465543 ns/iter (± 9165189) 0.96
es/full/minify/libraries/typescript 2695894386 ns/iter (± 82484052) 2731636000 ns/iter (± 56436850) 0.99
es/full/minify/libraries/victory 575574233 ns/iter (± 3599842) 595382442 ns/iter (± 8407851) 0.97
es/full/minify/libraries/vue 120938463 ns/iter (± 449720) 122254187 ns/iter (± 1421315) 0.99
es/full/codegen/es3 34763 ns/iter (± 80) 33937 ns/iter (± 66) 1.02
es/full/codegen/es5 34897 ns/iter (± 72) 33854 ns/iter (± 50) 1.03
es/full/codegen/es2015 35004 ns/iter (± 68) 33930 ns/iter (± 93) 1.03
es/full/codegen/es2016 35045 ns/iter (± 50) 34102 ns/iter (± 101) 1.03
es/full/codegen/es2017 34940 ns/iter (± 50) 33916 ns/iter (± 64) 1.03
es/full/codegen/es2018 34982 ns/iter (± 63) 33890 ns/iter (± 111) 1.03
es/full/codegen/es2019 34939 ns/iter (± 37) 33917 ns/iter (± 83) 1.03
es/full/codegen/es2020 34929 ns/iter (± 84) 33906 ns/iter (± 75) 1.03
es/full/all/es3 167311344 ns/iter (± 1143664) 167593392 ns/iter (± 1257121) 1.00
es/full/all/es5 159488375 ns/iter (± 1151677) 161173497 ns/iter (± 1014677) 0.99
es/full/all/es2015 119721333 ns/iter (± 540453) 120634431 ns/iter (± 637712) 0.99
es/full/all/es2016 118524574 ns/iter (± 765701) 118907811 ns/iter (± 1121341) 1.00
es/full/all/es2017 117765075 ns/iter (± 699709) 118753801 ns/iter (± 1270865) 0.99
es/full/all/es2018 115718305 ns/iter (± 767999) 116426042 ns/iter (± 765582) 0.99
es/full/all/es2019 115470755 ns/iter (± 665725) 115955266 ns/iter (± 626143) 1.00
es/full/all/es2020 110697089 ns/iter (± 703354) 111429934 ns/iter (± 610521) 0.99
es/full/parser 493288 ns/iter (± 16906) 498062 ns/iter (± 4834) 0.99
es/full/base/fixer 17801 ns/iter (± 137) 18054 ns/iter (± 86) 0.99
es/full/base/resolver_and_hygiene 80254 ns/iter (± 150) 80596 ns/iter (± 96) 1.00
serialization of serde 299 ns/iter (± 1) 293 ns/iter (± 3) 1.02
css/minify/libraries/bootstrap 29040923 ns/iter (± 51147) 28361121 ns/iter (± 338762) 1.02
css/visitor/compare/clone 1627981 ns/iter (± 3724) 1640267 ns/iter (± 5942) 0.99
css/visitor/compare/visit_mut_span 1748240 ns/iter (± 5798) 1778530 ns/iter (± 15348) 0.98
css/visitor/compare/visit_mut_span_panic 1831337 ns/iter (± 6636) 1828127 ns/iter (± 7277) 1.00
css/visitor/compare/fold_span 2546755 ns/iter (± 14400) 2600207 ns/iter (± 17654) 0.98
css/visitor/compare/fold_span_panic 2751554 ns/iter (± 5709) 2744192 ns/iter (± 17834) 1.00
css/lexer/bootstrap_5_1_3 4510202 ns/iter (± 33017) 4550146 ns/iter (± 9188) 0.99
css/lexer/foundation_6_7_4 3804135 ns/iter (± 3102) 3844039 ns/iter (± 3836) 0.99
css/lexer/tailwind_3_1_1 723969 ns/iter (± 1038) 728986 ns/iter (± 9987) 0.99
css/parser/bootstrap_5_1_3 19216991 ns/iter (± 126953) 19623078 ns/iter (± 64561) 0.98
css/parser/foundation_6_7_4 15276927 ns/iter (± 15239) 15590759 ns/iter (± 33511) 0.98
css/parser/tailwind_3_1_1 2980810 ns/iter (± 4607) 2975402 ns/iter (± 6077) 1.00
es/codegen/colors 735386 ns/iter (± 405726) 737912 ns/iter (± 404036) 1.00
es/codegen/large 3148640 ns/iter (± 1682783) 2890718 ns/iter (± 1527228) 1.09
es/codegen/with-parser/colors 45952 ns/iter (± 258) 45590 ns/iter (± 163) 1.01
es/codegen/with-parser/large 485309 ns/iter (± 1255) 495612 ns/iter (± 1249) 0.98
es/minify/libraries/antd 1155928729 ns/iter (± 11125575) 1185766472 ns/iter (± 22078083) 0.97
es/minify/libraries/d3 242295541 ns/iter (± 972004) 242864554 ns/iter (± 1510392) 1.00
es/minify/libraries/echarts 917882461 ns/iter (± 8790555) 929200719 ns/iter (± 9097093) 0.99
es/minify/libraries/jquery 74065607 ns/iter (± 118158) 73929269 ns/iter (± 264138) 1.00
es/minify/libraries/lodash 88019536 ns/iter (± 113698) 88179159 ns/iter (± 382769) 1.00
es/minify/libraries/moment 43402563 ns/iter (± 78345) 43443787 ns/iter (± 113105) 1.00
es/minify/libraries/react 15970604 ns/iter (± 47207) 16007026 ns/iter (± 37853) 1.00
es/minify/libraries/terser 185911929 ns/iter (± 641651) 188862239 ns/iter (± 1242346) 0.98
es/minify/libraries/three 319836816 ns/iter (± 3230724) 326404511 ns/iter (± 2498438) 0.98
es/minify/libraries/typescript 2255437983 ns/iter (± 10885402) 2314216767 ns/iter (± 12655617) 0.97
es/minify/libraries/victory 483362069 ns/iter (± 2255604) 488936511 ns/iter (± 4844647) 0.99
es/minify/libraries/vue 106877958 ns/iter (± 447523) 107353324 ns/iter (± 464779) 1.00
es/visitor/compare/clone 1957351 ns/iter (± 5187) 1921042 ns/iter (± 4115) 1.02
es/visitor/compare/visit_mut_span 2292004 ns/iter (± 2481) 2263549 ns/iter (± 7601) 1.01
es/visitor/compare/visit_mut_span_panic 2336403 ns/iter (± 5700) 2315951 ns/iter (± 4434) 1.01
es/visitor/compare/fold_span 3403216 ns/iter (± 7471) 3349872 ns/iter (± 6983) 1.02
es/visitor/compare/fold_span_panic 3497278 ns/iter (± 8101) 3419833 ns/iter (± 6002) 1.02
es/lexer/colors 13006 ns/iter (± 9) 13874 ns/iter (± 21) 0.94
es/lexer/angular 6152919 ns/iter (± 12449) 6354353 ns/iter (± 4301) 0.97
es/lexer/backbone 795990 ns/iter (± 647) 845056 ns/iter (± 1797) 0.94
es/lexer/jquery 4520890 ns/iter (± 5909) 4696587 ns/iter (± 11063) 0.96
es/lexer/jquery mobile 6879077 ns/iter (± 16468) 7279898 ns/iter (± 61688) 0.94
es/lexer/mootools 3555791 ns/iter (± 2863) 3753072 ns/iter (± 31519) 0.95
es/lexer/underscore 666256 ns/iter (± 435) 695762 ns/iter (± 320) 0.96
es/lexer/three 21519271 ns/iter (± 17859) 22428180 ns/iter (± 22606) 0.96
es/lexer/yui 3862285 ns/iter (± 2313) 4008528 ns/iter (± 4017) 0.96
es/parser/colors 27399 ns/iter (± 57) 27052 ns/iter (± 40) 1.01
es/parser/angular 13670811 ns/iter (± 63117) 13506143 ns/iter (± 111740) 1.01
es/parser/backbone 1992541 ns/iter (± 9358) 2005540 ns/iter (± 12842) 0.99
es/parser/jquery 10925050 ns/iter (± 53532) 10928574 ns/iter (± 59844) 1.00
es/parser/jquery mobile 16807699 ns/iter (± 52285) 16899596 ns/iter (± 111471) 0.99
es/parser/mootools 8430861 ns/iter (± 17684) 8409690 ns/iter (± 41660) 1.00
es/parser/underscore 1731804 ns/iter (± 7779) 1735780 ns/iter (± 9573) 1.00
es/parser/three 47181567 ns/iter (± 343274) 48158395 ns/iter (± 671549) 0.98
es/parser/yui 8291128 ns/iter (± 27392) 8301964 ns/iter (± 25909) 1.00
es/preset-env/usage/builtin_type 136100 ns/iter (± 31202) 136120 ns/iter (± 32812) 1.00
es/preset-env/usage/property 17424 ns/iter (± 70) 16641 ns/iter (± 62) 1.05
es/resolver/typescript 87597997 ns/iter (± 1318263) 89214416 ns/iter (± 1606142) 0.98
es/fixer/typescript 62834658 ns/iter (± 1860467) 64704572 ns/iter (± 1425851) 0.97
es/hygiene/typescript 132714374 ns/iter (± 1926240) 131929231 ns/iter (± 1401456) 1.01
es/resolver_with_hygiene/typescript 241383920 ns/iter (± 1313789) 248366770 ns/iter (± 1983348) 0.97
es/visitor/base-perf/module_clone 58915 ns/iter (± 858) 60231 ns/iter (± 286) 0.98
es/visitor/base-perf/fold_empty 62603 ns/iter (± 657) 64008 ns/iter (± 249) 0.98
es/visitor/base-perf/fold_noop_impl_all 63205 ns/iter (± 409) 64048 ns/iter (± 211) 0.99
es/visitor/base-perf/fold_noop_impl_vec 63391 ns/iter (± 242) 64148 ns/iter (± 247) 0.99
es/visitor/base-perf/boxing_boxed_clone 57 ns/iter (± 0) 58 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed_clone 39 ns/iter (± 0) 39 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 108 ns/iter (± 0) 108 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 77 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2680 ns/iter (± 24) 2635 ns/iter (± 14) 1.02
es/base/parallel/resolver/typescript 3793063312 ns/iter (± 232148673) 4445464517 ns/iter (± 271132462) 0.85
es/base/parallel/hygiene/typescript 1514608318 ns/iter (± 24038974) 1448507641 ns/iter (± 19089554) 1.05
misc/visitors/time-complexity/time 5 139 ns/iter (± 2) 133 ns/iter (± 0) 1.05
misc/visitors/time-complexity/time 10 382 ns/iter (± 7) 396 ns/iter (± 2) 0.96
misc/visitors/time-complexity/time 15 728 ns/iter (± 31) 676 ns/iter (± 4) 1.08
misc/visitors/time-complexity/time 20 1153 ns/iter (± 69) 1064 ns/iter (± 3) 1.08
misc/visitors/time-complexity/time 40 4174 ns/iter (± 142) 3540 ns/iter (± 42) 1.18
misc/visitors/time-complexity/time 60 7879 ns/iter (± 311) 8783 ns/iter (± 10) 0.90
es/full-target/es2016 233396 ns/iter (± 633) 232559 ns/iter (± 939) 1.00
es/full-target/es2017 221356 ns/iter (± 620) 219460 ns/iter (± 514) 1.01
es/full-target/es2018 209826 ns/iter (± 734) 208045 ns/iter (± 1006) 1.01
es2020_nullish_coalescing 69216 ns/iter (± 420) 72004 ns/iter (± 275) 0.96
es2020_optional_chaining 80631 ns/iter (± 529) 83131 ns/iter (± 519) 0.97
es2022_class_properties 114118 ns/iter (± 360) 115978 ns/iter (± 244) 0.98
es2018_object_rest_spread 74005 ns/iter (± 85) 76723 ns/iter (± 308) 0.96
es2019_optional_catch_binding 64004 ns/iter (± 211) 65296 ns/iter (± 152) 0.98
es2017_async_to_generator 63486 ns/iter (± 276) 64814 ns/iter (± 155) 0.98
es2016_exponentiation 68073 ns/iter (± 253) 69324 ns/iter (± 224) 0.98
es2015_arrow 70278 ns/iter (± 150) 72095 ns/iter (± 211) 0.97
es2015_block_scoped_fn 67046 ns/iter (± 237) 69487 ns/iter (± 194) 0.96
es2015_block_scoping 119171 ns/iter (± 461) 120776 ns/iter (± 618) 0.99

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.