Skip to content

Optimized insertion-ordered symbol tables - #64979

Merged
Anders Hejlsberg (ahejlsberg) merged 40 commits into
mainfrom
symbol-tables
Oct 27, 2026
Merged

Anders Hejlsberg (ahejlsberg) merged 40 commits into
mainfrom
symbol-tables

Conversation

@ahejlsberg

@ahejlsberg Anders Hejlsberg (ahejlsberg) commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

This PR builds on #64916 to further optimize symbol tables. Symbol table entries are now just *ast.Symbol (half the size of #64916) and the rare renamed symbols are stored via proxy symbols that carry the new name and a reference to the original symbol.

Closes #64916

Type ids are creation order, and --generateTrace writes every type a checker creates in id order.
Three places create types while they iterate a symbol table, whose iteration order varies from
run to run, so the type files differed between runs of the same program:

- getInferTypeParameters gets the declared type of each infer type parameter in map order. The
  result is already sorted; the types are now created in symbol order too.
- getNamedMembers checks whether each member is a value, which can resolve an alias, in map order
  and sorts afterwards. The members are now sorted first.
- getAliasForSymbolInContainer and buildExternalModuleContainerIndex resolve every export in map
  order. Exports that are not aliases still resolve in map order, since that has no side effects;
  aliases are now resolved last, sorted.

The results of all four functions are unchanged.
A symbol's key in a table is not always its name: a module augmentation can
merge a named declaration into a default export, which stays keyed "default".
extendExportSymbols and createAccessFromSymbolChain use the key, so the helper
passes it along with the symbol, and sorts aliases by key when they compare
equal.
Copilot AI balanced review requested due to automatic review settings October 27, 2026 17:37
@github-project-automation github-project-automation Bot moved this to Not started in PR Backlog Oct 27, 2026
@typescript-automation typescript-automation Bot added Author: Team For Uncommitted Bug PR for untriaged, rejected, closed or missing bug labels Oct 27, 2026
@ahejlsberg

Copy link
Copy Markdown
Member Author

TypeScript Bot (@typescript-bot) test it

@typescript-automation

typescript-automation Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Starting jobs; this comment will be updated as builds start and complete.

Command Status Results
test top400 ✅ Started
user test this ✅ Started ✅ Results
run dt ✅ Started ✅ Results
perf test this faster ✅ Started 👀 Results

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟡 Changes recommended

Repeated deletions rebuild the full hash index, making large reused signature-scope cleanup quadratic and allocation-heavy.

1 open issue
What changed in this PR

This PR reduces symbol-table storage in the native TypeScript compiler while preserving insertion order introduced by #64916. Renamed entries use proxy symbols so ordinary entries need only a symbol pointer.

Changes:

  • Introduces compact ordered symbol tables with linear lookup for small tables and hash indexing for larger tables.
  • Migrates compiler, language-server, and API consumers to the new table operations.
  • Adds regression fixtures and baselines for deterministic diagnostics, declaration emit, and export resolution.
File Description
tsc/​testdata/​tests/​cases/​compiler/​noFlakyExportEqualsWithOtherExportsImportOrder.ts Tests export-assignment import ordering.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyExportEqualsWithOtherExportsCheckOrder.ts Tests export-assignment checking order.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDiagnosticsSpellingSuggestionOrder.ts Tests resolution order during spelling suggestions.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDiagnosticsNonExportedMemberOrder.ts Tests non-exported-member diagnostic stability.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.ts Tests namespace ordering through re-exported types.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDiagnosticsNamespaceMembersResolutionOrder.ts Tests namespace-member resolution ordering.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDiagnosticsExportStarDeclarationCollisionOrder.ts Tests star-export declaration collision ordering.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDiagnosticsExportStarCollisionOrder.ts Tests star-export alias collision ordering.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDeclarationEmitVariableMatchesInScopeOrder.ts Tests scope matching during declaration emit.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDeclarationEmitUmdGlobalAliasesOrder.ts Tests global-alias ordering during declaration emit.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDeclarationEmitRenamedExportOrder.ts Tests renamed-export declaration ordering.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.ts Tests late-bound member resolution ordering.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDeclarationEmitExternalModuleContainerIndexOrder.ts Tests module-container indexing order.
tsc/​testdata/​tests/​cases/​compiler/​noFlakyDeclarationEmitExportEqualsQualifiedNameOrder.ts Tests export-assignment qualification ordering.
tsc/​testdata/​tests/​cases/​compiler/​namespaceMembersResolutionOrderExportStar.ts Tests explicit versus star-export resolution order.
tsc/​testdata/​tests/​cases/​compiler/​exportStarSkipsNamedDefaultExport.ts Tests exclusion of merged default exports.
tsc/​testdata/​tests/​cases/​compiler/​declarationEmitExternalModuleContainerIndexDeclarationOrder.ts Tests declaration order rather than name order.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyExportEqualsWithOtherExportsImportOrder.types Records import-order type results.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyExportEqualsWithOtherExportsImportOrder.js Records import-order declaration output.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyExportEqualsWithOtherExportsCheckOrder.types Records checking-order type results.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyExportEqualsWithOtherExportsCheckOrder.symbols Records checking-order symbol results.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyExportEqualsWithOtherExportsCheckOrder.errors.txt Records checking-order diagnostics.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDiagnosticsSpellingSuggestionOrder.types Records spelling-resolution type results.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDiagnosticsSpellingSuggestionOrder.errors.txt Records spelling-resolution diagnostics.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDiagnosticsNonExportedMemberOrder.types Records non-exported-member type results.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDiagnosticsNonExportedMemberOrder.errors.txt Records non-exported-member diagnostics.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDiagnosticsNamespaceMembersResolutionOrderReexportedTypes.errors.txt Records re-exported-type diagnostics.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDiagnosticsNamespaceMembersResolutionOrder.symbols Records namespace-resolution symbols.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDiagnosticsNamespaceMembersResolutionOrder.errors.txt Records namespace-resolution diagnostics.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDiagnosticsExportStarDeclarationCollisionOrder.types Records declaration-collision types.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDiagnosticsExportStarDeclarationCollisionOrder.errors.txt Records declaration-collision diagnostics.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDiagnosticsExportStarCollisionOrder.types Records alias-collision types.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDiagnosticsExportStarCollisionOrder.errors.txt Records alias-collision diagnostics.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitVariableMatchesInScopeOrder.types Records scope-matching types.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitVariableMatchesInScopeOrder.symbols Records scope-matching symbols.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitVariableMatchesInScopeOrder.js Records scope-matching declaration output.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitUmdGlobalAliasesOrder.types Records global-alias types.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitUmdGlobalAliasesOrder.js Records global-alias declaration output.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitRenamedExportOrder.types Records renamed-export types.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitRenamedExportOrder.js Records renamed-export declaration output.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.types Records late-bound member types.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.symbols Records late-bound member symbols.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitLateBoundIndexSignatureSiblingsOrder.js Records late-bound declaration output.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitExternalModuleContainerIndexOrder.types Records module-container type results.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitExternalModuleContainerIndexOrder.js Records module-container declaration output.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitExportEqualsQualifiedNameOrder.types Records export-assignment qualification types.
tsc/​testdata/​baselines/​reference/​compiler/​noFlakyDeclarationEmitExportEqualsQualifiedNameOrder.js Records qualified declaration output.
tsc/​testdata/​baselines/​reference/​compiler/​namespaceMembersResolutionOrderExportStar.symbols Records star-export resolution symbols.
tsc/​testdata/​baselines/​reference/​compiler/​namespaceMembersResolutionOrderExportStar.errors.txt Records star-export resolution diagnostics.
tsc/​testdata/​baselines/​reference/​compiler/​exportStarSkipsNamedDefaultExport.types Records default-export filtering types.
tsc/​testdata/​baselines/​reference/​compiler/​exportStarSkipsNamedDefaultExport.symbols Records default-export filtering symbols.
tsc/​testdata/​baselines/​reference/​compiler/​exportStarSkipsNamedDefaultExport.js Records default-export filtering emit.
tsc/​testdata/​baselines/​reference/​compiler/​exportStarSkipsNamedDefaultExport.errors.txt Records rejected default-export leakage.
tsc/​testdata/​baselines/​reference/​compiler/​declarationEmitExternalModuleContainerIndexDeclarationOrder.types Records declaration-ordered type results.
tsc/​testdata/​baselines/​reference/​compiler/​declarationEmitExternalModuleContainerIndexDeclarationOrder.js Records declaration-ordered emit results.
tsc/​internal/​transformers/​declarations/​transform.go Migrates declaration-transform table operations.
tsc/​internal/​printer/​namegenerator.go Migrates local-name lookup.
tsc/​internal/​modulespecifiers/​specifiers.go Migrates ambient export lookup.
tsc/​internal/​ls/​findallreferences.go Migrates reference-search table access.
tsc/​internal/​ls/​definition.go Migrates constructor lookup.
tsc/​internal/​ls/​completions.go Migrates completion iteration and lookup.
tsc/​internal/​ls/​codeactions_fixclassincorrectlyimplementsinterface.go Migrates inherited-member tables.
tsc/​internal/​ls/​autoimport/​extract.go Migrates auto-import export traversal.
tsc/​internal/​execute/​incremental/​affectedfileshandler.go Migrates exported-enum traversal.
tsc/​internal/​checker/​utilities.go Migrates shared symbol-table helpers.
tsc/​internal/​checker/​types.go Migrates structured-type member access.
tsc/​internal/​checker/​types_test.go Adapts intersection tests to table operations.
tsc/​internal/​checker/​symbolaccessibility.go Migrates accessibility and alias traversal.
tsc/​internal/​checker/​services.go Migrates scope and property collection.
tsc/​internal/​checker/​nodebuilderscopes.go Migrates temporary-scope insertion and cleanup.
tsc/​internal/​checker/​nodebuilderimpl.go Migrates symbol-chain table access.
tsc/​internal/​checker/​nodebuilder_hover.go Migrates namespace hover traversal.
tsc/​internal/​checker/​jsx.go Migrates JSX attribute tables.
tsc/​internal/​checker/​inference.go Migrates inferred-member table construction.
tsc/​internal/​checker/​exports.go Uses insertion order for index siblings.
tsc/​internal/​checker/​emitresolver.go Migrates augmentation and index-member traversal.
tsc/​internal/​binder/​nameresolver.go Migrates name-resolution lookups.
tsc/​internal/​binder/​binder.go Migrates symbol declaration and binding operations.
tsc/​internal/​ast/​utilities.go Uses the new table constructor.
tsc/​internal/​ast/​symbolflags.go Adds the internal name-proxy flag.
tsc/​internal/​ast/​symbol.go Implements compact insertion-ordered symbol tables.
tsc/​internal/​ast/​symbol_test.go Adapts symbol accessor and ownership tests.
tsc/​internal/​api/​session.go Migrates API symbol-table traversal.
tsc/​internal/​api/​session_symbolresponse_test.go Adapts API member lookup tests.

Review effort: Balanced

undo := func() {
for _, s := range newLocals {
delete(locals, s)
locals.Delete(s)
@typescript-automation

Copy link
Copy Markdown
Contributor

Hey Anders Hejlsberg (@ahejlsberg), the results of running the DT tests are ready.

Everything looks the same!

You can check the log here.

@typescript-automation

Copy link
Copy Markdown
Contributor

Anders Hejlsberg (@ahejlsberg) Here are the results of running the user tests with tsc comparing baseline and pr:

Everything looks good!

@typescript-automation

Copy link
Copy Markdown
Contributor

Anders Hejlsberg (@ahejlsberg)
The results of the perf run you requested are in!

Here they are:

Provisional hosted-runner results: these VMs are not the dedicated benchmark machines. Results may be noisier and are not comparable to the historical series. For comparisons, both revisions of each scenario ran on the same VM.

tsc

Comparison Report - baseline..pr
Metric baseline pr Delta Best Worst p-value
Compiler-Unions - native
Errors 41 41 ~ ~ ~ p=1.000 n=12
Symbols 88,466 88,466 ~ ~ ~ p=1.000 n=12
Types 79,607 79,607 ~ ~ ~ p=1.000 n=12
Memory Used 107,799k (± 0.07%) 104,153k (± 0.04%) 🟩-3,646k (- 3.38%) 104,006k 104,260k p=0.000 n=12
Memory Allocs 2,196,871 (± 0.01%) 2,200,570 (± 0.01%) +3,700 (+ 0.17%) 2,200,227 2,201,243 p=0.000 n=12
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Parse Time 0.035s (±10.58%) 0.032s (± 2.51%) ~ 0.029s 0.034s p=0.057 n=12
Bind Time 0.014s (±17.82%) 0.013s (± 8.57%) ~ 0.011s 0.017s p=0.942 n=12
Check Time 0.375s (± 5.92%) 0.366s (± 1.05%) ~ 0.354s 0.377s p=0.258 n=12
Emit Time 0.236s (± 6.40%) 0.228s (± 2.51%) ~ 0.212s 0.245s p=0.788 n=12
Total Time 0.666s (± 5.72%) 0.645s (± 1.49%) ~ 0.622s 0.678s p=0.944 n=12
angular-1 - native
Errors 3 3 ~ ~ ~ p=1.000 n=12
Symbols 586,540 (± 0.01%) 586,420 (± 0.01%) -120 (- 0.02%) 586,252 586,672 p=0.020 n=12
Types 241,692 (± 0.00%) 241,692 (± 0.00%) ~ 241,690 241,694 p=0.241 n=12
Memory Used 551,056k (± 0.02%) 517,803k (± 0.03%) 🟩-33,254k (- 6.03%) 517,457k 518,159k p=0.000 n=12
Memory Allocs 13,073,346 (± 0.04%) 13,116,673 (± 0.06%) +43,327 (+ 0.33%) 13,110,350 13,155,126 p=0.000 n=12
Config Time 0.017s 0.017s (± 1.43%) ~ 0.017s 0.018s p=0.478 n=12
Parse Time 0.200s (± 5.00%) 0.194s (± 4.70%) ~ 0.178s 0.233s p=0.310 n=12
Bind Time 0.057s (±11.20%) 0.058s (±13.00%) ~ 0.049s 0.084s p=0.383 n=12
Check Time 0s 0s ~ ~ ~ p=1.000 n=12
Emit Time 1.196s (± 1.36%) 1.173s (± 1.83%) ~ 1.128s 1.225s p=0.173 n=12
Total Time 1.484s (± 1.05%) 1.455s (± 1.29%) -0.028s (- 1.91%) 1.400s 1.493s p=0.037 n=12
arktype - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 685,943 685,943 ~ ~ ~ p=1.000 n=12
Types 939,490 939,490 ~ ~ ~ p=1.000 n=12
Memory Used 532,491k (± 0.02%) 497,232k (± 0.01%) 🟩-35,259k (- 6.62%) 496,970k 497,408k p=0.000 n=12
Memory Allocs 12,772,062 (± 0.02%) 12,803,713 (± 0.02%) +31,651 (+ 0.25%) 12,801,242 12,811,986 p=0.000 n=12
Config Time 0.002s 0.002s ~ ~ ~ p=1.000 n=12
Parse Time 0.064s (± 2.55%) 0.062s (± 3.22%) ~ 0.056s 0.065s p=0.381 n=12
Bind Time 0.022s (± 9.74%) 0.019s (± 8.72%) 🟩-0.003s (-15.41%) 0.017s 0.024s p=0.007 n=12
Check Time 1.484s (± 0.99%) 1.464s (± 0.81%) -0.020s (- 1.36%) 1.442s 1.500s p=0.032 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 1.615s (± 0.99%) 1.588s (± 0.61%) -0.027s (- 1.65%) 1.563s 1.616s p=0.011 n=12
mui-docs - native
Errors 11,405 11,405 ~ ~ ~ p=1.000 n=12
Symbols 3,784,027 3,784,027 ~ ~ ~ p=1.000 n=12
Types 1,355,982 1,355,982 ~ ~ ~ p=1.000 n=12
Memory Used 2,199,419k (± 0.09%) 1,831,743k (± 0.09%) 🟩-367,677k (-16.72%) 1,828,097k 1,835,150k p=0.000 n=12
Memory Allocs 26,492,356 (± 0.10%) 26,718,127 (± 0.08%) +225,771 (+ 0.85%) 26,671,764 26,782,329 p=0.000 n=12
Config Time 0.014s 0.014s (± 2.00%) ~ 0.014s 0.015s p=0.217 n=12
Parse Time 0.492s (± 2.71%) 0.506s (± 2.34%) ~ 0.475s 0.543s p=0.117 n=12
Bind Time 0.002s (±21.90%) 0.001s (±39.98%) ~ 0.001s 0.004s p=0.400 n=12
Check Time 4.786s (± 0.67%) 4.607s (± 0.42%) 🟩-0.179s (- 3.73%) 4.532s 4.652s p=0.000 n=12
Emit Time 0.362s (± 5.20%) 0.415s (± 7.59%) 🔻+0.053s (+14.62%) 0.341s 0.482s p=0.003 n=12
Total Time 6.464s (± 1.21%) 6.353s (± 0.74%) -0.112s (- 1.73%) 6.242s 6.463s p=0.020 n=12
sentry - native
Errors 2 2 ~ ~ ~ p=1.000 n=12
Symbols 4,793,249 4,793,249 ~ ~ ~ p=1.000 n=12
Types 2,607,051 2,607,051 ~ ~ ~ p=1.000 n=12
Memory Used 3,205,205k (± 0.02%) 2,879,419k (± 0.06%) 🟩-325,786k (-10.16%) 2,875,912k 2,886,424k p=0.000 n=12
Memory Allocs 75,197,292 (± 0.10%) 75,905,824 (± 0.12%) +708,531 (+ 0.94%) 75,675,857 76,152,866 p=0.000 n=12
Config Time 0.048s (± 4.36%) 0.045s (± 2.39%) 🟩-0.003s (- 5.56%) 0.044s 0.049s p=0.011 n=12
Parse Time 0.806s (± 4.29%) 0.740s (± 4.38%) 🟩-0.066s (- 8.15%) 0.693s 0.827s p=0.004 n=12
Bind Time 0.247s (±11.17%) 0.250s (±10.99%) ~ 0.177s 0.297s p=0.681 n=12
Check Time 10.344s (± 1.84%) 9.735s (± 4.07%) 🟩-0.608s (- 5.88%) 9.287s 10.918s p=0.024 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 11.522s (± 1.87%) 10.832s (± 3.85%) 🟩-0.690s (- 5.99%) 10.369s 12.073s p=0.014 n=12
social-app - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 1,883,075 1,883,075 ~ ~ ~ p=1.000 n=12
Types 1,158,171 1,158,171 ~ ~ ~ p=1.000 n=12
Memory Used 1,056,542k (± 0.02%) 971,575k (± 0.01%) 🟩-84,968k (- 8.04%) 971,260k 971,904k p=0.000 n=12
Memory Allocs 13,569,803 (± 0.14%) 13,713,942 (± 0.17%) +144,139 (+ 1.06%) 13,670,029 13,801,732 p=0.000 n=12
Config Time 0.015s (± 2.27%) 0.014s (± 2.16%) ~ 0.014s 0.015s p=0.680 n=12
Parse Time 0.238s (± 2.59%) 0.237s (± 2.03%) ~ 0.231s 0.259s p=0.965 n=12
Bind Time 0.056s (±12.90%) 0.049s (±11.47%) 🟩-0.007s (-11.81%) 0.042s 0.069s p=0.031 n=12
Check Time 2.139s (± 0.35%) 2.100s (± 0.22%) -0.040s (- 1.86%) 2.085s 2.109s p=0.000 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 2.469s (± 0.70%) 2.420s (± 0.44%) -0.049s (- 1.98%) 2.394s 2.448s p=0.000 n=12
strada-build-src - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 1,184,976 1,184,976 ~ ~ ~ p=1.000 n=12
Types 438,967 438,967 ~ ~ ~ p=1.000 n=12
Memory Used 1,259,912k (± 0.26%) 1,168,442k (± 0.44%) 🟩-91,470k (- 7.26%) 1,153,697k 1,183,764k p=0.000 n=12
Memory Allocs 76,903,769 (± 0.02%) 77,295,791 (± 0.22%) +392,021 (+ 0.51%) 76,914,353 77,740,234 p=0.000 n=12
Config Time 0.004s (±16.42%) 0.004s (±15.58%) ~ 0.003s 0.006s p=0.572 n=12
Parse Time 0.180s (± 2.28%) 0.185s (± 2.11%) ~ 0.169s 0.191s p=0.061 n=12
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Check Time 1.192s (± 0.40%) 1.186s (± 0.63%) ~ 1.170s 1.214s p=0.110 n=12
Emit Time 0.218s (± 1.59%) 0.214s (± 2.09%) ~ 0.201s 0.224s p=0.260 n=12
Total Time 14.103s (± 0.64%) 13.968s (± 0.54%) -0.135s (- 0.96%) 13.717s 14.159s p=0.039 n=12
strada-compiler - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 263,513 263,513 ~ ~ ~ p=1.000 n=12
Types 196,118 196,118 ~ ~ ~ p=1.000 n=12
Memory Used 236,187k (± 0.02%) 224,527k (± 0.02%) 🟩-11,660k (- 4.94%) 224,420k 224,657k p=0.000 n=12
Memory Allocs 4,287,926 (± 0.01%) 4,303,483 (± 0.01%) +15,557 (+ 0.36%) 4,302,586 4,304,224 p=0.000 n=12
Config Time 0.001s 0.001s ~ ~ ~ p=1.000 n=12
Parse Time 0.073s (± 5.02%) 0.074s (± 4.49%) ~ 0.066s 0.083s p=0.619 n=12
Bind Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Check Time 0.599s (± 0.78%) 0.602s (± 0.89%) ~ 0.592s 0.618s p=0.271 n=12
Emit Time 0.096s (± 2.47%) 0.094s (± 4.16%) ~ 0.084s 0.107s p=0.268 n=12
Total Time 0.806s (± 0.93%) 0.806s (± 0.75%) ~ 0.785s 0.819s p=0.831 n=12
t3code-server - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 4,350,705 4,350,705 ~ ~ ~ p=1.000 n=12
Types 3,040,691 3,040,691 ~ ~ ~ p=1.000 n=12
Memory Used 2,610,528k (± 0.03%) 2,433,170k (± 0.02%) 🟩-177,359k (- 6.79%) 2,432,335k 2,434,763k p=0.000 n=12
Memory Allocs 37,311,323 (± 0.05%) 37,862,097 (± 0.04%) +550,774 (+ 1.48%) 37,835,414 37,898,239 p=0.000 n=12
Config Time 0.005s 0.005s ~ ~ ~ p=1.000 n=12
Parse Time 0.364s (± 3.17%) 0.364s (± 2.54%) ~ 0.325s 0.388s p=0.619 n=12
Bind Time 0.122s (±11.16%) 0.109s (± 6.04%) 🟩-0.014s (-11.24%) 0.101s 0.141s p=0.003 n=12
Check Time 10.798s (± 0.53%) 10.845s (± 0.45%) ~ 10.689s 10.953s p=0.225 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 11.304s (± 0.50%) 11.336s (± 0.43%) ~ 11.178s 11.448s p=0.469 n=12
ts-pre-modules - native
Errors 87 87 ~ ~ ~ p=1.000 n=12
Symbols 231,617 231,617 ~ ~ ~ p=1.000 n=12
Types 181,196 181,196 ~ ~ ~ p=1.000 n=12
Memory Used 203,365k (± 0.02%) 193,526k (± 0.02%) 🟩-9,840k (- 4.84%) 193,452k 193,633k p=0.000 n=12
Memory Allocs 1,358,093 (± 0.01%) 1,372,680 (± 0.01%) +14,587 (+ 1.07%) 1,372,214 1,373,040 p=0.000 n=12
Config Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Parse Time 0.064s (± 4.76%) 0.064s (± 3.36%) ~ 0.059s 0.068s p=0.809 n=12
Bind Time 0.030s (± 5.47%) 0.030s (± 5.23%) ~ 0.027s 0.035s p=0.391 n=12
Check Time 0.471s (± 0.96%) 0.474s (± 0.74%) ~ 0.464s 0.481s p=0.384 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 0.577s (± 0.74%) 0.578s (± 0.89%) ~ 0.563s 0.587s p=0.523 n=12
vscode - native
Errors 10 10 ~ ~ ~ p=1.000 n=12
Symbols 7,326,070 7,326,070 ~ ~ ~ p=1.000 n=12
Types 4,351,704 4,351,704 ~ ~ ~ p=1.000 n=12
Memory Used 5,450,490k (± 0.02%) 5,111,600k (± 0.02%) 🟩-338,890k (- 6.22%) 5,109,225k 5,113,660k p=0.000 n=12
Memory Allocs 62,787,880 (± 0.01%) 64,273,637 (± 0.01%) +1,485,757 (+ 2.37%) 64,265,678 64,297,188 p=0.000 n=12
Config Time 0.069s (± 0.78%) 0.069s (± 0.89%) ~ 0.068s 0.071s p=0.588 n=12
Parse Time 1.272s (± 2.00%) 1.307s (± 2.76%) ~ 1.218s 1.407s p=0.147 n=12
Bind Time 0.417s (± 7.92%) 0.390s (± 3.00%) 🟩-0.027s (- 6.55%) 0.377s 0.447s p=0.002 n=12
Check Time 11.252s (± 0.82%) 11.308s (± 0.86%) ~ 11.042s 11.530s p=0.443 n=12
Emit Time 3.974s (± 5.30%) 3.947s (± 4.81%) ~ 3.674s 4.556s p=0.966 n=12
Total Time 17.061s (± 1.43%) 17.097s (± 1.52%) ~ 16.663s 18.082s p=1.000 n=12
webpack - native
Errors 619 619 ~ ~ ~ p=1.000 n=12
Symbols 916,787 916,787 ~ ~ ~ p=1.000 n=12
Types 636,816 636,816 ~ ~ ~ p=1.000 n=12
Memory Used 742,459k (± 0.02%) 690,818k (± 0.02%) 🟩-51,641k (- 6.96%) 690,525k 691,256k p=0.000 n=12
Memory Allocs 6,528,089 (± 0.03%) 6,604,828 (± 0.01%) +76,738 (+ 1.18%) 6,603,269 6,608,231 p=0.000 n=12
Config Time 0.007s (± 3.42%) 0.007s ~ ~ ~ p=0.478 n=12
Parse Time 0.193s (± 4.18%) 0.196s (± 4.15%) ~ 0.178s 0.215s p=0.522 n=12
Bind Time 0.063s (±12.08%) 0.060s (±12.40%) ~ 0.050s 0.086s p=0.467 n=12
Check Time 1.499s (± 0.47%) 1.495s (± 0.28%) ~ 1.486s 1.504s p=0.433 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 1.801s (± 0.76%) 1.793s (± 0.37%) ~ 1.779s 1.816s p=0.619 n=12
xstate-main - native
Errors 0 0 ~ ~ ~ p=1.000 n=12
Symbols 640,494 640,494 ~ ~ ~ p=1.000 n=12
Types 387,992 387,992 ~ ~ ~ p=1.000 n=12
Memory Used 386,523k (± 0.03%) 350,846k (± 0.02%) 🟩-35,678k (- 9.23%) 350,669k 351,019k p=0.000 n=12
Memory Allocs 3,990,481 (± 0.07%) 4,065,688 (± 0.04%) +75,207 (+ 1.88%) 4,062,774 4,069,683 p=0.000 n=12
Config Time 0.002s 0.002s ~ ~ ~ p=1.000 n=12
Parse Time 0.089s (± 2.49%) 0.090s (± 3.38%) ~ 0.082s 0.099s p=0.450 n=12
Bind Time 0.026s (±12.07%) 0.025s (± 9.99%) ~ 0.022s 0.032s p=0.091 n=12
Check Time 0.620s (± 0.86%) 0.607s (± 0.37%) -0.013s (- 2.14%) 0.600s 0.613s p=0.000 n=12
Emit Time 0.000s 0.000s ~ ~ ~ p=1.000 n=12
Total Time 0.743s (± 0.85%) 0.730s (± 0.52%) -0.013s (- 1.82%) 0.724s 0.745s p=0.000 n=12
System info unknown
Hosts
  • native
Scenarios
  • Compiler-Unions - native
  • angular-1 - native
  • arktype - native
  • mui-docs - native
  • sentry - native
  • social-app - native
  • strada-build-src - native
  • strada-compiler - native
  • t3code-server - native
  • ts-pre-modules - native
  • vscode - native
  • webpack - native
  • xstate-main - native
Benchmark Name Iterations
Current pr 12
Baseline baseline 12

Developer Information:

Download Benchmarks

@github-project-automation github-project-automation Bot moved this from Not started to Needs merge in PR Backlog Oct 27, 2026
@ahejlsberg
Anders Hejlsberg (ahejlsberg) added this pull request to the merge queue Oct 27, 2026
Merged via the queue into main with commit 3428533 Oct 27, 2026
29 checks passed
@ahejlsberg
Anders Hejlsberg (ahejlsberg) deleted the symbol-tables branch October 27, 2026 21:31
@github-project-automation github-project-automation Bot moved this from Needs merge to Done in PR Backlog Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Author: Team Domain: Performance Reports of unusually slow behavior For Uncommitted Bug PR for untriaged, rejected, closed or missing bug

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants