Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

perf(semantic): give AstNodeId a niche #4469

Merged
merged 1 commit into from
Jul 26, 2024

Conversation

overlookmotel
Copy link
Collaborator

@overlookmotel overlookmotel commented Jul 25, 2024

Make AstNodeId a type with a niche, using NonMaxU32 as its internal storage. This makes Option<AstNodeId> 4 bytes instead of 8. That halves the size of the Vec for parent IDs in AstNodes (which gets pretty big).

Copy link

graphite-app bot commented Jul 25, 2024

Your org has enabled the Graphite merge queue for merging into main

Add the label “merge” to the PR and Graphite will automatically add it to the merge queue when it’s ready to merge. Or use the label “hotfix” to add to the merge queue as a hot fix.

You must have a Graphite account and log in to Graphite in order to use the merge queue. Sign up using this link.

@overlookmotel overlookmotel marked this pull request as ready for review July 25, 2024 19:46
Copy link

codspeed-hq bot commented Jul 25, 2024

CodSpeed Performance Report

Merging #4469 will create unknown performance changes

Comparing 07-25-perf_semantic_give_astnodeid_a_niche (24beaeb) with main (348c1ad)

Summary

🆕 32 new benchmarks

Benchmarks breakdown

Benchmark main 07-25-perf_semantic_give_astnodeid_a_niche Change
🆕 codegen[checker.ts] N/A 18.4 ms N/A
🆕 codegen_sourcemap[checker.ts] N/A 75.1 ms N/A
🆕 isolated-declarations[vue-id.ts] N/A 378 ms N/A
🆕 lexer[RadixUIAdoptionSection.jsx] N/A 22.7 µs N/A
🆕 lexer[antd.js] N/A 20.1 ms N/A
🆕 lexer[cal.com.tsx] N/A 5 ms N/A
🆕 lexer[checker.ts] N/A 12 ms N/A
🆕 lexer[pdf.mjs] N/A 3.2 ms N/A
🆕 linter[cal.com.tsx] N/A 766.6 ms N/A
🆕 linter[checker.ts] N/A 1.3 s N/A
🆕 minifier[antd.js] N/A 281.5 ms N/A
🆕 minifier[react.development.js] N/A 3.2 ms N/A
🆕 minifier[typescript.js] N/A 511.7 ms N/A
🆕 prepass[antd.js] N/A 15.8 ms N/A
🆕 prepass[react.development.js] N/A 208.2 µs N/A
🆕 prepass[typescript.js] N/A 27.9 ms N/A
🆕 parser[RadixUIAdoptionSection.jsx] N/A 77.2 µs N/A
🆕 parser[antd.js] N/A 103.5 ms N/A
🆕 parser[cal.com.tsx] N/A 24 ms N/A
🆕 parser[checker.ts] N/A 52.4 ms N/A
... ... ... ... ...

ℹ️ Only the first 20 benchmarks are displayed. Go to the app to view all benchmarks.

@DonIsaac
Copy link
Collaborator

DonIsaac commented Jul 25, 2024

Why not make this a NonZeroU32 like the other ids created by Semantic?

Nevermind, just saw your rationale in your up-stack pr.

Copy link

graphite-app bot commented Jul 26, 2024

Merge activity

Make `AstNodeId` a type with a niche, using `NonMaxU32` as its internal storage. This makes `Option<AstNodeId>` 4 bytes instead of 8. That halves the size of the `Vec` for parent IDs in `AstNodes` (which gets pretty big).
@Boshen Boshen force-pushed the 07-25-refactor_syntax_give_scopeid_a_niche branch from b62822d to c99b3eb Compare July 26, 2024 00:19
@Boshen Boshen force-pushed the 07-25-perf_semantic_give_astnodeid_a_niche branch from eeb0b99 to 24beaeb Compare July 26, 2024 00:20
@Boshen Boshen changed the base branch from 07-25-refactor_syntax_give_scopeid_a_niche to main July 26, 2024 00:34
@graphite-app graphite-app bot merged commit 24beaeb into main Jul 26, 2024
25 checks passed
@graphite-app graphite-app bot deleted the 07-25-perf_semantic_give_astnodeid_a_niche branch July 26, 2024 00:37
@oxc-bot oxc-bot mentioned this pull request Jul 27, 2024
Dunqing pushed a commit that referenced this pull request Jul 28, 2024
## [0.22.1] - 2024-07-27

### Features

- 2477330 ast: Add `AstKind::TSExportAssignment` (#4501) (Dunqing)
- aaee07e ast: Add `AstKind::AssignmentTargetPattern`,
`AstKind::ArrayAssignmentTarget` and `AstKind::ObjectAssignmentTarget`
(#4456) (Dunqing)
- fd363d1 ast: Add AstKind::get_container_scope_id (#4450) (DonIsaac)
- e2735ca span: Add `contains_inclusive` method (#4491) (DonIsaac)

### Bug Fixes

- 368112c ast: Remove `#[visit(ignore)]` from
`ExportDefaultDeclarationKind`'s `TSInterfaceDeclaration` (#4497)
(Dunqing)
- 36bb680 semantic: `TSExportAssignment` cannot reference type binding
(#4502) (Dunqing)
- cb2fa49 semantic: `typeof` operator cannot reference type-only import
(#4500) (Dunqing)
- ef0e953 semantic: Generic passed to typeof not counted as a reference
(#4499) (Dunqing)
- 40cafb8 semantic: Params in `export default (function() {})` flagged
as `SymbolFlags::Export` (#4480) (Dunqing)
- 2e01a45 semantic: Non-exported namespace member symbols flagged as
exported (#4493) (Don Isaac)
- e4ca06a semantic: Incorrect symbol’s scope_id after var hoisting
(#4458) (Dunqing)
- 77bd5f1 semantic: Use correct span for namespace symbols (#4448) (Don
Isaac)
- 5db7bed sourcemap: Fix pre-calculation of required segments for
building JSON (#4490) (overlookmotel)
- 1667491 syntax: Correct `is_reserved_keyword_or_global_object`'s
incorrect function calling. (#4484) (Ethan Goh)
- 82ba2a0 syntax: Fix unsound use of `NonZeroU32` (#4466)
(overlookmotel)
- c04b9aa transformer: Add to `SymbolTable::declarations` for all
symbols (#4460) (overlookmotel)
- ecdee88 transformer/typescript: Incorrect eliminate exports when the
referenced symbol is both value and type (#4507) (Dunqing)

### Performance

- 963a2d1 mangler: Reduce unnecessary allocation (#4498) (Dunqing)
- 868fc87 parser: Optimize conditional advance on ASCII values (#4298)
(lucab)
- 24beaeb semantic: Give `AstNodeId` a niche (#4469) (overlookmotel)
- 348c1ad semantic: Remove `span` field from `Reference` (#4464)
(overlookmotel)
- 6a9f4db semantic: Reduce storage size for symbol redeclarations
(#4463) (overlookmotel)
- 705e19f sourcemap: Reduce memory copies encoding JSON (#4489)
(overlookmotel)
- 4d10c6c sourcemap: Pre allocate String buf while encoding (#4476)
(Brooooooklyn)

### Documentation

- f5f0ba8 ast: Add doc comments to more AST nodes (#4413) (Don Isaac)
- 871b3d6 semantic: Add doc comments for SymbolTester and SemanticTester
(#4433) (DonIsaac)

### Refactor

- 9c5d2f9 ast/builder: Use `Box::new_in` over `.into_in` (#4428)
(overlookmotel)
- ccb1835 semantic: Methods take `Span` as param, not `&Span` (#4470)
(overlookmotel)
- f17254a semantic: Populate `declarations` field in
`SymbolTable::create_symbol` (#4461) (overlookmotel)
- a49f491 semantic: Re-order `SymbolTable` fields (#4459)
(overlookmotel)
- 7cd53f3 semantic: Var hoisting (#4379) (Dunqing)
- 4f5a7cb semantic: Mark SemanticTester and SymbolTester as must_use
(#4430) (DonIsaac)
- c958a55 sourcemap: `push_list` method for building JSON (#4486)
(overlookmotel)
- c99b3eb syntax: Give `ScopeId` a niche (#4468) (overlookmotel)
- 96fc94f syntax: Use `NonMaxU32` for IDs (#4467) (overlookmotel)

### Testing

- 4b274a8 semantic: Add more test cases for symbol references (#4429)
(DonIsaac)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants