Rust-based platform for the Web
Go to file
Donny/강동윤 8d5670e72b
refactor(allocator): Use & instead of a thread-local (#9235)
**Description:**

This is a part of https://github.com/swc-project/swc/pull/9230. I
profiled the performance, and `thread_local` took too long to get the
address of the thread-local variable. So, I inlined the reference into
the allocator.

# Benchmark result

```

Gnuplot not found, using plotters backend
common/allocator/alloc/std/1000000
                        time:   [4.9478 ms 4.9653 ms 4.9922 ms]
Found 17 outliers among 100 measurements (17.00%)
  4 (4.00%) high mild
  13 (13.00%) high severe

common/allocator/alloc/no-scope/1000000
                        time:   [5.4821 ms 5.4938 ms 5.5068 ms]
Found 17 outliers among 100 measurements (17.00%)
  2 (2.00%) high mild
  15 (15.00%) high severe

common/allocator/alloc/scoped/1000000
                        time:   [3.1401 ms 3.1456 ms 3.1518 ms]
Found 12 outliers among 100 measurements (12.00%)
  3 (3.00%) high mild
  9 (9.00%) high severe

common/allocator/alloc/cached-no-scope/1000000
                        time:   [5.0992 ms 5.1090 ms 5.1198 ms]
Found 11 outliers among 100 measurements (11.00%)
  2 (2.00%) high mild
  9 (9.00%) high severe

common/allocator/alloc/cached-scoped/1000000
                        time:   [3.0191 ms 3.0230 ms 3.0273 ms]
Found 11 outliers among 100 measurements (11.00%)
  2 (2.00%) low mild
  1 (1.00%) high mild
  8 (8.00%) high severe
```
2024-07-15 00:37:38 +09:00
.cargo refactor(atoms): Remove usage of js_word! to drop string-cache (#7976) 2023-10-08 00:39:51 +00:00
.github fix(allocator): Fix allocator & add benchmark (#9234) 2024-07-14 16:20:42 +09:00
.husky fix(es): Remove wrong debug assertion (#4445) 2022-04-26 14:16:38 +00:00
.vscode test(es/decorators): Add tests written by evanw (#8967) 2024-05-23 14:18:32 +09:00
bindings chore: Publish 1.7.0-nightly-20240713.1 with swc_core v0.97.1 2024-07-13 08:04:56 +00:00
crates refactor(allocator): Use & instead of a thread-local (#9235) 2024-07-15 00:37:38 +09:00
docs/adr feat(visit): Add path-aware variants (#5073) 2022-07-05 04:38:27 +00:00
packages chore: Publish @swc/helpers@v0.5.12 2024-07-13 17:14:27 +09:00
rules refactor(common): Drop SyntaxContext from AST nodes (#9175) 2024-07-12 13:13:20 +09:00
scripts chore(ci): Use dynamic matrix for cargo-test action (#9233) 2024-07-14 13:19:15 +09:00
xtask perf(es): Reduce allocations for dynamic stacks (#9133) 2024-07-05 09:18:38 +00:00
.gitattributes feat(html): Prepare processing system (#4358) 2022-04-22 20:20:47 +09:00
.gitignore fix(es/module): Fix jsc.paths for projects using pnpm (#7918) 2023-09-06 17:29:47 +00:00
.gitmodules test(es/decorators): Add tests written by evanw (#8967) 2024-05-23 14:18:32 +09:00
.kodiak.toml chore: Make kodiak auto-approve PRs by @kdy1 2024-01-04 04:46:43 +09:00
.mocha.setup.js chore(repo): Configure prettier (#4523) 2022-05-04 14:25:28 +00:00
.mocharc.js chore(repo): Configure prettier (#4523) 2022-05-04 14:25:28 +00:00
.prettierignore refactor(es/helpers): Move packages for monorepo (#7833) 2023-08-18 04:25:37 +00:00
.prettierrc chore(repo): Configure prettier (#4523) 2022-05-04 14:25:28 +00:00
.rustfmt.toml feat(wasm): Expose async facade interfaces (#5352) 2022-08-01 03:00:28 +00:00
.taplo.toml chore: Update toml formatting (#5368) 2022-08-03 03:07:28 +00:00
.yarnrc.yml chore: Use static .yarnrc 2024-05-29 00:35:29 +09:00
ARCHITECTURE.md doc(contributing): Remove enum_kind from ARCHITECTURE.md (#8666) 2024-02-27 03:53:03 +00:00
Cargo.lock refactor(allocator): Use & instead of a thread-local (#9235) 2024-07-15 00:37:38 +09:00
Cargo.toml feat(allocator): Implement SwcAlloc (#9232) 2024-07-14 13:27:41 +09:00
CHANGELOG.md chore: Bump crates 2024-07-14 07:22:17 +00:00
cliff.toml chore: Publish v1.3.93 with swc_core v0.85.7 (#8112) 2023-10-13 12:26:21 +09:00
clippy.toml build(cargo): Update rustc to nightly-2024-04-03 (#8821) 2024-04-16 02:20:47 +00:00
CONTRIBUTING.md doc(contributing): Change feature flags for running all tests (#6396) 2022-11-10 09:39:26 +00:00
cspell.json feat(css/ast): Make AST intuitive (#6606) 2022-12-09 02:27:19 +00:00
deny.toml build(plugin): Update wasmer to v4.2.5 (#8624) 2024-02-10 03:40:55 +00:00
LICENSE chore(node): Publish v1.2.121 2021-12-19 14:14:12 +09:00
MAINTENANCE.md doc(repo): Document maintenance (#6145) 2022-10-14 03:29:55 +00:00
package.json chore(ci): Use dynamic matrix for cargo-test action (#9233) 2024-07-14 13:19:15 +09:00
README.md doc: Use @swc/counter for 3rd-party download count 2024-07-02 22:07:53 +09:00
rust-toolchain build(cargo): Update rustc to nightly-2024-04-16 (#8870) 2024-04-17 05:42:11 +00:00
sgconfig.yml refactor(es/ast): Improve type definitions of patterns (#8532) 2024-02-05 15:32:52 +09:00
tests.yml chore(ci): Use dynamic matrix for cargo-test action (#9233) 2024-07-14 13:19:15 +09:00
yarn.lock chore(ci): Use dynamic matrix for cargo-test action (#9233) 2024-07-14 13:19:15 +09:00

swc

Make the web (development) faster.

downloads (@swc/core) downloads (3rd party)

undefined GitHub release (latest SemVer)

GitHub code size in bytes node-current (scoped)

Discord

SWC (stands for Speedy Web Compiler) is a super-fast TypeScript / JavaScript compiler written in Rust. It's a library for Rust and JavaScript at the same time. If you are using SWC from Rust, see rustdoc and for most users, your entry point for using the library will be parser.

Also, SWC tries to ensure that

If you select the latest version of each crates, it will work

for rust users.

MSRV of crates is currently 1.71.

To update all SWC crates you use, you can run curl https://raw.githubusercontent.com/swc-project/swc/main/scripts/update-all-swc-crates.sh | bash -s. This script will update all dependencies to the latest version and run cargo build to ensure that everything works. Note that you need

  • jq
  • cargo upgrade

command to run the script.


If you are using SWC from JavaScript, please refer to docs on the website.

Documentation

Check out the documentation in the website.

Features

Please see comparison with babel.

Performance

Please see benchmark results on the website.

Supporting swc

Sponsors

SWC is a community-driven project, and is maintained by a group of volunteers. If you'd like to help support the future of the project, please consider:

Contributing

See CONTRIBUTING.md. You may also find the architecture documentation useful (ARCHITECTURE.md).

License

SWC is primarily distributed under the terms of the Apache License (Version 2.0).

See LICENSE for details.