Skip to content

Analyze control flow effects of lambdas passed as arguments - #58729

Closed
Anders Hejlsberg (ahejlsberg) wants to merge 33 commits into
mainfrom
fix11498
Closed

Analyze control flow effects of lambdas passed as arguments#58729
Anders Hejlsberg (ahejlsberg) wants to merge 33 commits into
mainfrom
fix11498

Conversation

@ahejlsberg

@ahejlsbergAnders Hejlsberg (ahejlsberg) commented May 31, 2024

Copy link
Copy Markdown
Member

This PR introduces a new immediate modifier that can be applied to callback parameters to indicate that control flow analysis should assume that function expressions or arrow functions (in the following called lambda expressions) passed as arguments in a function call may be invoked synchronously during that call. For example:

declarefunctionmystery(immediatecb: ()=>void): void;letx: string|number="OK";x;// stringmystery(()=>{x=10;});x;// string | numberif(x===10){// Error without 'immediate' modifier}

Without the immediate modifier, control flow analysis will assume that the lambda expression is never invoked synchronously and thus will consider the type of x to be string following the call. With the immediate modifier, control flow analysis assumes that the lambda expression may have been invoked synchronously and thus considers the type of x to be string | number following the call.

It an error to apply the immediate modifier to anything but a parameter with a type that permits functions. Async arrow functions, async function expressions, and generator function expressions are always assumed to be deferred, regardless of whether their corresponding parameter includes an immediate modifier.

In JavaScript files, an immediate callback parameter can be declared using an /** @immediate */ JSDoc annotation:

/** * @param {() => void} cb */functioncallNow(/** @immediate */cb){ ... }

Since the immediate modifier is considered an error by earlier versions of TypeScript, it isn't possible to add immediate modifiers to frameworks and libraries without also requiring the latest version of the compiler. The compiler therefore also recognizes /** @immediate */ JSDoc comments in TypeScript files such that they can be used in cases where backwards compatibility matters. However, use of immediate modifiers is recommended whenever possible.

NOTE: This PR initially changed control flow analysis to assume possibly-immediately-called semantics by default and implemented a deferred modifier to indicate never-immediately-called semantics. While technically more sound (absent knowledge of whether or when a callback is called, it is safest and most conservative to assume it may have been called), this turned out to require too much remediation in existing code. The PR now preserves the default never-immediately-called semantics and allows code to opt into possibly-immediately-called analysis using the immediate modifier.

Fixes#11498.
Fixes#15380.
Fixes#57880.

@ahejlsberg

Copy link
Copy Markdown
MemberAuthor

TypeScript Bot (@typescript-bot) test it

@typescript-bot

TypeScript Bot (typescript-bot) commented May 31, 2024

Copy link
Copy Markdown
Contributor

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

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

@typescript-bot

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-bot

Copy link
Copy Markdown
Contributor

Anders Hejlsberg (@ahejlsberg) Here are the results of running the user tests with tsc comparing main and refs/pull/58729/merge:

Something interesting changed - please have a look.

Details

enhanced-resolve

/mnt/ts_downloads/_/m/enhanced-resolve/tsconfig.json

  • [MISSING] error TS2339: Property 'replace' does not exist on type 'never'.
    • /mnt/ts_downloads/_/m/enhanced-resolve/node_modules/enhanced-resolve/lib/concord.js(149,24)
    • /mnt/ts_downloads/_/m/enhanced-resolve/node_modules/enhanced-resolve/lib/concord.js(188,17)

pyright

/mnt/ts_downloads/_/m/pyright/build.sh

  • [NEW] error TS18048: 'cacheEntry' is possibly 'undefined'.
    • /mnt/ts_downloads/_/m/pyright/pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(951,25)
    • /mnt/ts_downloads/_/m/pyright/pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(1064,41)
    • /mnt/ts_downloads/_/m/pyright/pyright-internal: src/analyzer/codeFlowEngine.ts(951,25)
    • /mnt/ts_downloads/_/m/pyright/pyright-internal: src/analyzer/codeFlowEngine.ts(1064,41)
    • /mnt/ts_downloads/_/m/pyright/vscode-pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(951,25)
    • /mnt/ts_downloads/_/m/pyright/vscode-pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(1064,41)

uglify-js

/mnt/ts_downloads/_/m/uglify-js/tsconfig.json

  • [MISSING] error TS18048: 'ldef' is possibly 'undefined'.
    • /mnt/ts_downloads/_/m/uglify-js/node_modules/uglify-js/lib/compress.js(6753,56)

webpack

tsconfig.types.json

xterm.js

src/tsconfig-library-base.json

@typescript-bot

Copy link
Copy Markdown
Contributor

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

Here they are:

tsc

Comparison Report - baseline..pr
MetricbaselineprDeltaBestWorstp-value
Compiler-Unions - node (v18.15.0, x64)
Errors3030~~~p=1.000 n=6
Symbols62,15362,153~~~p=1.000 n=6
Types50,24250,243+1 (+ 0.00%)~~p=0.001 n=6
Memory used192,920k (± 0.75%)192,999k (± 0.75%)+79k (+ 0.04%)192,402k195,952kp=0.045 n=6
Parse Time1.95s (± 0.96%)1.95s (± 0.53%)~1.94s1.97sp=0.317 n=6
Bind Time1.08s (± 0.70%)1.10s (± 0.74%)+0.02s (+ 2.00%)1.09s1.11sp=0.007 n=6
Check Time14.05s (± 0.46%)14.15s (± 0.52%)+0.10s (+ 0.70%)14.05s14.27sp=0.037 n=6
Emit Time4.07s (± 1.00%)4.06s (± 0.53%)~4.03s4.09sp=0.223 n=6
Total Time21.14s (± 0.18%)21.26s (± 0.32%)+0.12s (+ 0.54%)21.17s21.37sp=0.010 n=6
angular-1 - node (v18.15.0, x64)
Errors59🔻+4 (+80.00%)~~p=0.001 n=6
Symbols944,109944,283+174 (+ 0.02%)~~p=0.001 n=6
Types407,049407,127+78 (+ 0.02%)~~p=0.001 n=6
Memory used1,222,154k (± 0.00%)1,223,819k (± 0.00%)+1,664k (+ 0.14%)1,223,752k1,223,903kp=0.005 n=6
Parse Time8.05s (± 0.57%)8.07s (± 0.67%)~8.02s8.16sp=0.809 n=6
Bind Time2.23s (± 0.62%)2.28s (± 0.72%)+0.05s (+ 2.32%)2.26s2.30sp=0.005 n=6
Check Time36.28s (± 0.12%)36.72s (± 0.27%)+0.43s (+ 1.19%)36.62s36.90sp=0.005 n=6
Emit Time17.94s (± 0.68%)18.11s (± 0.50%)+0.17s (+ 0.95%)18.01s18.25sp=0.030 n=6
Total Time64.49s (± 0.28%)65.18s (± 0.29%)+0.68s (+ 1.06%)64.97s65.46sp=0.005 n=6
mui-docs - node (v18.15.0, x64)
Errors55~~~p=1.000 n=6
Symbols2,051,4602,051,489+29 (+ 0.00%)~~p=0.001 n=6
Types899,446899,469+23 (+ 0.00%)~~p=0.001 n=6
Memory used2,065,603k (± 0.01%)2,065,874k (± 0.00%)+271k (+ 0.01%)2,065,749k2,065,985kp=0.013 n=6
Parse Time8.10s (± 0.46%)8.11s (± 0.21%)~8.09s8.13sp=1.000 n=6
Bind Time2.75s (± 0.88%)2.77s (± 0.84%)~2.74s2.80sp=0.124 n=6
Check Time81.77s (± 0.36%)82.13s (± 0.44%)~81.76s82.71sp=0.066 n=6
Emit Time0.16s (± 3.16%)0.17s (± 3.10%)~0.16s0.17sp=0.311 n=6
Total Time92.78s (± 0.28%)93.18s (± 0.40%)+0.39s (+ 0.43%)92.82s93.78sp=0.045 n=6
self-build-src - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols1,229,7081,229,781+73 (+ 0.01%)~~p=0.001 n=6
Types260,904260,917+13 (+ 0.00%)~~p=0.001 n=6
Memory used2,351,266k (± 0.02%)2,350,890k (± 0.06%)~2,349,360k2,353,094kp=0.575 n=6
Parse Time4.98s (± 0.91%)4.98s (± 0.85%)~4.94s5.05sp=0.936 n=6
Bind Time1.91s (± 0.55%)1.93s (± 0.39%)+0.03s (+ 1.40%)1.92s1.94sp=0.006 n=6
Check Time34.12s (± 0.30%)34.20s (± 0.17%)~34.11s34.27sp=0.109 n=6
Emit Time2.56s (± 1.65%)2.63s (± 2.41%)~2.56s2.72sp=0.066 n=6
Total Time43.55s (± 0.21%)43.78s (± 0.22%)+0.22s (+ 0.51%)43.63s43.89sp=0.013 n=6
self-build-src-public-api - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols1,229,7081,229,781+73 (+ 0.01%)~~p=0.001 n=6
Types260,904260,917+13 (+ 0.00%)~~p=0.001 n=6
Memory used2,452,360k (± 2.48%)2,428,222k (± 0.04%)~2,427,090k2,429,614kp=0.810 n=6
Parse Time6.24s (± 0.45%)6.26s (± 0.55%)~6.22s6.30sp=0.471 n=6
Bind Time2.01s (± 0.96%)2.20s (± 4.72%)🔻+0.19s (+ 9.28%)2.05s2.27sp=0.005 n=6
Check Time40.47s (± 0.33%)40.48s (± 0.93%)~40.18s41.00sp=0.378 n=6
Emit Time3.07s (± 2.70%)3.05s (± 1.79%)~2.99s3.11sp=0.575 n=6
Total Time51.82s (± 0.25%)52.02s (± 0.49%)~51.71s52.35sp=0.230 n=6
self-compiler - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols258,593258,618+25 (+ 0.01%)~~p=0.001 n=6
Types105,011105,024+13 (+ 0.01%)~~p=0.001 n=6
Memory used428,227k (± 0.01%)428,434k (± 0.01%)+207k (+ 0.05%)428,406k428,469kp=0.005 n=6
Parse Time4.06s (± 0.57%)4.08s (± 0.38%)~4.07s4.10sp=0.210 n=6
Bind Time1.63s (± 0.92%)1.65s (± 1.31%)~1.62s1.68sp=0.124 n=6
Check Time22.42s (± 0.40%)22.43s (± 0.20%)~22.37s22.47sp=0.809 n=6
Emit Time1.70s (± 1.93%)1.71s (± 1.41%)~1.68s1.75sp=0.466 n=6
Total Time29.81s (± 0.35%)29.88s (± 0.21%)~29.80s29.95sp=0.295 n=6
ts-pre-modules - node (v18.15.0, x64)
Errors3535~~~p=1.000 n=6
Symbols224,565224,565~~~p=1.000 n=6
Types93,73493,736+2 (+ 0.00%)~~p=0.001 n=6
Memory used369,857k (± 0.03%)369,994k (± 0.04%)~369,826k370,188kp=0.173 n=6
Parse Time2.85s (± 0.79%)2.85s (± 0.85%)~2.82s2.87sp=0.808 n=6
Bind Time1.59s (± 0.97%)1.60s (± 0.65%)~1.59s1.62sp=0.118 n=6
Check Time15.73s (± 0.39%)15.76s (± 0.27%)~15.71s15.82sp=0.746 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time20.17s (± 0.36%)20.21s (± 0.31%)~20.12s20.29sp=0.377 n=6
vscode - node (v18.15.0, x64)
Errors1090🔻+80 (+800.00%)~~p=0.001 n=6
Symbols2,842,9912,847,064+4,073 (+ 0.14%)~~p=0.001 n=6
Types963,472964,365+893 (+ 0.09%)~~p=0.001 n=6
Memory used3,015,847k (± 0.00%)3,019,578k (± 0.00%)+3,732k (+ 0.12%)3,019,506k3,019,681kp=0.005 n=6
Parse Time17.02s (± 0.26%)17.07s (± 0.32%)~17.02s17.16sp=0.065 n=6
Bind Time5.16s (± 2.45%)5.21s (± 1.76%)~5.17s5.40sp=0.226 n=6
Check Time89.08s (± 0.11%)91.48s (± 1.87%)+2.41s (+ 2.70%)90.25s94.91sp=0.005 n=6
Emit Time28.89s (± 0.78%)28.10s (± 6.97%)~24.11s29.07sp=0.936 n=6
Total Time140.15s (± 0.15%)141.87s (± 0.36%)+1.72s (+ 1.23%)141.29s142.45sp=0.005 n=6
webpack - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols266,361266,362+1 (+ 0.00%)~~p=0.001 n=6
Types108,554108,557+3 (+ 0.00%)~~p=0.001 n=6
Memory used411,503k (± 0.02%)411,827k (± 0.04%)+324k (+ 0.08%)411,629k412,030kp=0.005 n=6
Parse Time4.83s (± 0.54%)4.78s (± 0.70%)-0.05s (- 1.04%)4.73s4.83sp=0.028 n=6
Bind Time2.09s (± 0.58%)2.12s (± 0.42%)+0.03s (+ 1.60%)2.11s2.13sp=0.005 n=6
Check Time21.13s (± 0.16%)21.29s (± 0.58%)~21.07s21.41sp=0.065 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time28.05s (± 0.18%)28.19s (± 0.38%)~27.99s28.28sp=0.066 n=6
xstate-main - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols525,588525,588~~~p=1.000 n=6
Types179,032179,032~~~p=1.000 n=6
Memory used463,503k (± 0.07%)463,672k (± 0.06%)~463,176k463,934kp=0.378 n=6
Parse Time2.62s (± 0.45%)2.62s (± 0.16%)~2.62s2.63sp=0.787 n=6
Bind Time0.99s (± 0.41%)1.00s (± 0.54%)+0.01s (+ 1.34%)1.00s1.01sp=0.006 n=6
Check Time15.24s (± 0.62%)15.33s (± 0.37%)~15.27s15.41sp=0.065 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time18.85s (± 0.48%)18.96s (± 0.30%)~18.89s19.03sp=0.054 n=6
System info unknown
Hosts
  • node (v18.15.0, x64)
Scenarios
  • Compiler-Unions - node (v18.15.0, x64)
  • angular-1 - node (v18.15.0, x64)
  • mui-docs - node (v18.15.0, x64)
  • self-build-src - node (v18.15.0, x64)
  • self-build-src-public-api - node (v18.15.0, x64)
  • self-compiler - node (v18.15.0, x64)
  • ts-pre-modules - node (v18.15.0, x64)
  • vscode - node (v18.15.0, x64)
  • webpack - node (v18.15.0, x64)
  • xstate-main - node (v18.15.0, x64)
BenchmarkNameIterations
Currentpr6
Baselinebaseline6

Developer Information:

Download Benchmarks

@fatcerberus

Copy link
Copy Markdown

I feel like this is just going to flip the problem on its head in the end - instead of people complaining because their immediately-invoked callbacks didn't affect narrowing, an equal number of people will probably now complain instead that callbacks they know will be called out-of-band do affect narrowing. The goalposts don't even move really - the other team just gets possession is all 😄

@typescript-bot

Copy link
Copy Markdown
Contributor

Anders Hejlsberg (@ahejlsberg) Here are the results of running the top 400 repos with tsc comparing main and refs/pull/58729/merge:

Something interesting changed - please have a look.

Details

apollographql/apollo-client

1 of 12 projects failed to build with the old tsc and were ignored

tsconfig.json

  • error TS7022: 'match' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.

src/tsconfig.json

  • error TS7022: 'match' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.

conwnet/github1s

extensions/github1s/tsconfig.json

electron-react-boilerplate/electron-react-boilerplate

tsconfig.json

highcharts/highcharts

25 of 26 projects failed to build with the old tsc and were ignored

test/ts-node-unit-tests/tsconfig.json

labring/FastGPT

projects/app/tsconfig.json

packages/service/tsconfig.json

lyswhut/lx-music-desktop

1 of 6 projects failed to build with the old tsc and were ignored

src/main/tsconfig.json

microsoft/vscode

7 of 54 projects failed to build with the old tsc and were ignored

extensions/vscode-test-resolver/tsconfig.json

extensions/vscode-api-tests/tsconfig.json

reduxjs/redux-toolkit

11 of 32 projects failed to build with the old tsc and were ignored

packages/toolkit/tsconfig.build.json

subquery/subql

2 of 6 projects failed to build with the old tsc and were ignored

tsconfig.json

tinacms/tinacms

12 of 24 projects failed to build with the old tsc and were ignored

packages/@tinacms/mdx/tsconfig.json

@fatcerberus

Copy link
Copy Markdown

@ahejlsberg

Copy link
Copy Markdown
MemberAuthor

I think it's clear that there's no one-size-fits-all answer to whether effects of executing lambda arguments should be reflected in CFA types. Our current assumption is that lambdas are never executed synchronously. This PR experiments with the assumption they're possibly executed, which, given no additional information about the function to which the lambda arguments are passed, is definitely a more sound assumption. Also, the PR validates an implementation strategy and gives us data on the performance cost of analyzing lambda effects.

I would nice to avoid modifiers (like sync, immediate, deferred) on callback parameters, but in the end it may be unavoidable. Modifiers come with the added complication that CFA will need to resolve the function's type, which may in turn lead to circularities.

@ahejlsberg

Copy link
Copy Markdown
MemberAuthor

TypeScript Bot (@typescript-bot) test it

@typescript-bot

TypeScript Bot (typescript-bot) commented Jun 3, 2024

Copy link
Copy Markdown
Contributor

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

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

@typescript-bot

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-bot

Copy link
Copy Markdown
Contributor

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

Here they are:

tsc

Comparison Report - baseline..pr
MetricbaselineprDeltaBestWorstp-value
Compiler-Unions - node (v18.15.0, x64)
Errors3030~~~p=1.000 n=6
Symbols62,15362,153~~~p=1.000 n=6
Types50,24250,243+1 (+ 0.00%)~~p=0.001 n=6
Memory used193,572k (± 1.01%)193,028k (± 0.73%)~192,339k195,911kp=0.378 n=6
Parse Time1.29s (± 0.94%)1.29s (± 0.81%)~1.28s1.31sp=0.868 n=6
Bind Time0.72s0.74s+0.02s (+ 2.78%)~~p=0.001 n=6
Check Time9.57s (± 0.23%)9.59s (± 0.70%)~9.48s9.66sp=0.468 n=6
Emit Time2.76s (± 0.20%)2.75s (± 0.74%)~2.72s2.78sp=0.100 n=6
Total Time14.35s (± 0.16%)14.37s (± 0.48%)~14.25s14.44sp=0.195 n=6
angular-1 - node (v18.15.0, x64)
Errors59🔻+4 (+80.00%)~~p=0.001 n=6
Symbols944,109944,283+174 (+ 0.02%)~~p=0.001 n=6
Types407,049407,096+47 (+ 0.01%)~~p=0.001 n=6
Memory used1,222,193k (± 0.00%)1,223,909k (± 0.00%)+1,717k (+ 0.14%)1,223,856k1,223,966kp=0.005 n=6
Parse Time6.80s (± 0.47%)6.79s (± 0.50%)~6.74s6.84sp=0.420 n=6
Bind Time1.88s (± 0.29%)1.91s (± 0.57%)+0.03s (+ 1.87%)1.89s1.92sp=0.004 n=6
Check Time31.38s (± 0.34%)31.71s (± 0.56%)+0.34s (+ 1.07%)31.49s31.98sp=0.006 n=6
Emit Time15.21s (± 0.97%)15.20s (± 0.32%)~15.12s15.24sp=0.575 n=6
Total Time55.26s (± 0.23%)55.60s (± 0.41%)+0.34s (+ 0.62%)55.33s55.97sp=0.013 n=6
mui-docs - node (v18.15.0, x64)
Errors55~~~p=1.000 n=6
Symbols2,054,0612,054,090+29 (+ 0.00%)~~p=0.001 n=6
Types899,813899,836+23 (+ 0.00%)~~p=0.001 n=6
Memory used2,067,140k (± 0.01%)2,067,295k (± 0.01%)~2,067,100k2,067,509kp=0.336 n=6
Parse Time8.10s (± 0.18%)8.13s (± 0.34%)~8.10s8.17sp=0.120 n=6
Bind Time2.75s (± 0.90%)2.78s (± 0.87%)~2.74s2.80sp=0.145 n=6
Check Time82.19s (± 0.36%)82.05s (± 0.55%)~81.46s82.49sp=0.689 n=6
Emit Time0.16s0.17s (± 4.89%)~0.16s0.18sp=0.073 n=6
Total Time93.21s (± 0.31%)93.12s (± 0.51%)~92.53s93.57sp=1.000 n=6
self-build-src - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols1,229,5851,229,658+73 (+ 0.01%)~~p=0.001 n=6
Types260,899260,912+13 (+ 0.00%)~~p=0.001 n=6
Memory used2,350,738k (± 0.02%)2,350,985k (± 0.04%)~2,350,160k2,352,793kp=0.810 n=6
Parse Time4.99s (± 1.00%)4.99s (± 0.76%)~4.95s5.05sp=1.000 n=6
Bind Time1.91s (± 0.51%)1.94s (± 0.51%)+0.03s (+ 1.39%)1.92s1.95sp=0.008 n=6
Check Time33.99s (± 0.36%)34.19s (± 0.34%)+0.20s (+ 0.59%)33.98s34.28sp=0.031 n=6
Emit Time2.58s (± 1.35%)2.65s (± 3.33%)~2.52s2.73sp=0.230 n=6
Total Time43.50s (± 0.31%)43.78s (± 0.47%)+0.27s (+ 0.63%)43.41s43.94sp=0.045 n=6
self-build-src-public-api - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols1,229,5851,229,658+73 (+ 0.01%)~~p=0.001 n=6
Types260,899260,912+13 (+ 0.00%)~~p=0.001 n=6
Memory used2,451,724k (± 2.52%)2,426,666k (± 0.04%)~2,426,036k2,428,177kp=0.810 n=6
Parse Time5.20s (± 0.51%)5.16s (± 0.65%)-0.04s (- 0.83%)5.12s5.21sp=0.037 n=6
Bind Time1.68s (± 0.58%)1.89s (± 4.74%)🔻+0.21s (+12.29%)1.71s1.95sp=0.004 n=6
Check Time34.45s (± 0.15%)34.35s (± 0.58%)~34.13s34.70sp=0.092 n=6
Emit Time2.64s (± 3.81%)2.64s (± 2.98%)~2.56s2.77sp=0.936 n=6
Total Time43.99s (± 0.19%)44.07s (± 0.39%)~43.78s44.31sp=0.230 n=6
self-compiler - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols258,592258,617+25 (+ 0.01%)~~p=0.001 n=6
Types105,012105,025+13 (+ 0.01%)~~p=0.001 n=6
Memory used428,264k (± 0.01%)428,428k (± 0.01%)+165k (+ 0.04%)428,359k428,468kp=0.005 n=6
Parse Time4.08s (± 0.22%)4.07s (± 0.57%)~4.05s4.10sp=0.685 n=6
Bind Time1.64s (± 1.89%)1.67s (± 0.99%)~1.64s1.69sp=0.103 n=6
Check Time22.39s (± 0.10%)22.40s (± 0.38%)~22.32s22.52sp=1.000 n=6
Emit Time1.72s (± 0.61%)1.72s (± 0.70%)~1.71s1.74sp=0.868 n=6
Total Time29.84s (± 0.20%)29.87s (± 0.31%)~29.76s30.02sp=1.000 n=6
ts-pre-modules - node (v18.15.0, x64)
Errors3535~~~p=1.000 n=6
Symbols224,565224,565~~~p=1.000 n=6
Types93,73493,736+2 (+ 0.00%)~~p=0.001 n=6
Memory used369,775k (± 0.01%)369,980k (± 0.02%)+206k (+ 0.06%)369,875k370,097kp=0.005 n=6
Parse Time2.84s (± 0.87%)2.84s (± 1.03%)~2.80s2.87sp=1.000 n=6
Bind Time1.58s (± 0.84%)1.61s (± 0.64%)+0.03s (+ 1.80%)1.59s1.62sp=0.011 n=6
Check Time15.72s (± 0.48%)15.74s (± 0.38%)~15.65s15.82sp=0.376 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time20.14s (± 0.33%)20.18s (± 0.40%)~20.06s20.30sp=0.226 n=6
vscode - node (v18.15.0, x64)
Errors079🔻+79 (+ ∞%)~~p=0.001 n=6
Symbols2,845,5962,849,669+4,073 (+ 0.14%)~~p=0.001 n=6
Types964,085964,978+893 (+ 0.09%)~~p=0.001 n=6
Memory used3,017,140k (± 0.00%)3,021,037k (± 0.00%)+3,897k (+ 0.13%)3,020,987k3,021,138kp=0.005 n=6
Parse Time13.90s (± 0.17%)13.88s (± 0.23%)~13.83s13.93sp=0.326 n=6
Bind Time4.23s (± 2.59%)4.27s (± 1.80%)~4.20s4.42sp=0.230 n=6
Check Time73.40s (± 0.42%)75.35s (± 2.27%)+1.95s (+ 2.66%)74.38s78.83sp=0.005 n=6
Emit Time23.70s (± 0.61%)23.06s (± 7.06%)~19.75s23.90sp=0.810 n=6
Total Time115.23s (± 0.26%)116.57s (± 0.11%)+1.34s (+ 1.17%)116.36s116.75sp=0.005 n=6
webpack - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols266,361266,362+1 (+ 0.00%)~~p=0.001 n=6
Types108,554108,557+3 (+ 0.00%)~~p=0.001 n=6
Memory used411,328k (± 0.03%)411,647k (± 0.02%)+320k (+ 0.08%)411,571k411,847kp=0.005 n=6
Parse Time3.84s (± 0.39%)3.84s (± 0.50%)~3.82s3.87sp=0.677 n=6
Bind Time1.66s (± 0.82%)1.70s (± 0.69%)+0.04s (+ 2.30%)1.69s1.72sp=0.005 n=6
Check Time17.02s (± 0.27%)17.12s (± 0.29%)+0.10s (+ 0.59%)17.05s17.19sp=0.008 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time22.52s (± 0.23%)22.66s (± 0.22%)+0.14s (+ 0.61%)22.62s22.72sp=0.005 n=6
xstate-main - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols526,436526,436~~~p=1.000 n=6
Types179,425179,425~~~p=1.000 n=6
Memory used464,088k (± 0.06%)464,116k (± 0.08%)~463,817k464,702kp=0.936 n=6
Parse Time3.15s (± 0.56%)3.16s (± 0.68%)~3.13s3.18sp=0.870 n=6
Bind Time1.19s (± 0.43%)1.20s (± 0.53%)+0.01s (+ 1.12%)1.19s1.21sp=0.009 n=6
Check Time18.20s (± 0.30%)18.12s (± 0.26%)-0.08s (- 0.47%)18.05s18.18sp=0.037 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time22.54s (± 0.30%)22.48s (± 0.25%)~22.37s22.53sp=0.148 n=6
System info unknown
Hosts
  • node (v18.15.0, x64)
Scenarios
  • Compiler-Unions - node (v18.15.0, x64)
  • angular-1 - node (v18.15.0, x64)
  • mui-docs - node (v18.15.0, x64)
  • self-build-src - node (v18.15.0, x64)
  • self-build-src-public-api - node (v18.15.0, x64)
  • self-compiler - node (v18.15.0, x64)
  • ts-pre-modules - node (v18.15.0, x64)
  • vscode - node (v18.15.0, x64)
  • webpack - node (v18.15.0, x64)
  • xstate-main - node (v18.15.0, x64)
BenchmarkNameIterations
Currentpr6
Baselinebaseline6

Developer Information:

Download Benchmarks

@typescript-bot

Copy link
Copy Markdown
Contributor

Anders Hejlsberg (@ahejlsberg) Here are the results of running the user tests with tsc comparing main and refs/pull/58729/merge:

Something interesting changed - please have a look.

Details

enhanced-resolve

/mnt/ts_downloads/_/m/enhanced-resolve/tsconfig.json

  • [MISSING] error TS2339: Property 'replace' does not exist on type 'never'.
    • /mnt/ts_downloads/_/m/enhanced-resolve/node_modules/enhanced-resolve/lib/concord.js(149,24)
    • /mnt/ts_downloads/_/m/enhanced-resolve/node_modules/enhanced-resolve/lib/concord.js(188,17)

pyright

/mnt/ts_downloads/_/m/pyright/build.sh

  • [NEW] error TS18048: 'cacheEntry' is possibly 'undefined'.
    • /mnt/ts_downloads/_/m/pyright/pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(951,25)
    • /mnt/ts_downloads/_/m/pyright/pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(1064,41)
    • /mnt/ts_downloads/_/m/pyright/pyright-internal: src/analyzer/codeFlowEngine.ts(951,25)
    • /mnt/ts_downloads/_/m/pyright/pyright-internal: src/analyzer/codeFlowEngine.ts(1064,41)
    • /mnt/ts_downloads/_/m/pyright/vscode-pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(951,25)
    • /mnt/ts_downloads/_/m/pyright/vscode-pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(1064,41)

uglify-js

/mnt/ts_downloads/_/m/uglify-js/tsconfig.json

  • [MISSING] error TS18048: 'ldef' is possibly 'undefined'.
    • /mnt/ts_downloads/_/m/uglify-js/node_modules/uglify-js/lib/compress.js(6753,56)

xterm.js

src/tsconfig-library-base.json

@typescript-bot

Copy link
Copy Markdown
Contributor

Anders Hejlsberg (@ahejlsberg) Here are the results of running the top 400 repos with tsc comparing main and refs/pull/58729/merge:

Something interesting changed - please have a look.

Details

apollographql/apollo-client

1 of 12 projects failed to build with the old tsc and were ignored

tsconfig.json

  • error TS7022: 'match' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.

src/tsconfig.json

  • error TS7022: 'match' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer.

conwnet/github1s

extensions/github1s/tsconfig.json

electron-react-boilerplate/electron-react-boilerplate

tsconfig.json

labring/FastGPT

projects/app/tsconfig.json

packages/service/tsconfig.json

lyswhut/lx-music-desktop

1 of 6 projects failed to build with the old tsc and were ignored

src/main/tsconfig.json

microsoft/vscode

4 of 54 projects failed to build with the old tsc and were ignored

src/tsconfig.tsec.json

src/tsconfig.monaco.json

src/tsconfig.json

extensions/vscode-test-resolver/tsconfig.json

extensions/vscode-api-tests/tsconfig.json

tinacms/tinacms

12 of 24 projects failed to build with the old tsc and were ignored

packages/@tinacms/mdx/tsconfig.json

@ethanresnick

Ethan Resnick (ethanresnick) commented Jun 5, 2024

Copy link
Copy Markdown
Contributor

Anders Hejlsberg (@ahejlsberg) If I'm understanding correctly, this would apply to arguments that are declared as arrow functions or function expressions, but not function declarations. Is that right? If so, why exclude function declarations?

(FWIW, I do like this experiment and the attempt at added strictness, if it ends up not being too breaking.)

@ahejlsberg

Copy link
Copy Markdown
MemberAuthor

Ethan Resnick (@ethanresnick) It only applies to arrow functions and function expressions passed directly as arguments. It does not apply to functions referenced through identifiers or other indirect expression constructs.

@typescript-bot

Copy link
Copy Markdown
Contributor

Looks like you're introducing a change to the public API surface area. If this includes breaking changes, please document them on our wiki's API Breaking Changes page.

Also, please make sure Daniel Rosenwasser (@DanielRosenwasser) and Ryan Cavanaugh (@RyanCavanaugh) are aware of the changes, just as a heads up.

@ahejlsberg

Copy link
Copy Markdown
MemberAuthor

TypeScript Bot (@typescript-bot) test it

@typescript-bot

TypeScript Bot (typescript-bot) commented Aug 8, 2024

Copy link
Copy Markdown
Contributor

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

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

@typescript-bot

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-bot

Copy link
Copy Markdown
Contributor

Anders Hejlsberg (@ahejlsberg) Here are the results of running the user tests with tsc comparing main and refs/pull/58729/merge:

Something interesting changed - please have a look.

Details

enhanced-resolve

/mnt/ts_downloads/_/m/enhanced-resolve/tsconfig.json

  • [MISSING] error TS2339: Property 'replace' does not exist on type 'never'.
    • /mnt/ts_downloads/_/m/enhanced-resolve/node_modules/enhanced-resolve/lib/concord.js(149,24)
    • /mnt/ts_downloads/_/m/enhanced-resolve/node_modules/enhanced-resolve/lib/concord.js(188,17)

pyright

/mnt/ts_downloads/_/m/pyright/build.sh

  • [NEW] error TS18048: 'cacheEntry' is possibly 'undefined'.
    • /mnt/ts_downloads/_/m/pyright/pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(981,25)
    • /mnt/ts_downloads/_/m/pyright/pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(1105,41)
    • /mnt/ts_downloads/_/m/pyright/pyright-internal: src/analyzer/codeFlowEngine.ts(981,25)
    • /mnt/ts_downloads/_/m/pyright/pyright-internal: src/analyzer/codeFlowEngine.ts(1105,41)
    • /mnt/ts_downloads/_/m/pyright/vscode-pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(981,25)
    • /mnt/ts_downloads/_/m/pyright/vscode-pyright: ../pyright-internal/src/analyzer/codeFlowEngine.ts(1105,41)

@typescript-bot

Copy link
Copy Markdown
Contributor

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

Here they are:

tsc

Comparison Report - baseline..pr
MetricbaselineprDeltaBestWorstp-value
Compiler-Unions - node (v18.15.0, x64)
Errors3030~~~p=1.000 n=6
Symbols62,15362,153~~~p=1.000 n=6
Types50,24250,242~~~p=1.000 n=6
Memory used193,609k (± 0.92%)194,558k (± 0.91%)~192,713k196,242kp=0.066 n=6
Parse Time1.57s (± 0.96%)1.59s (± 1.10%)~1.56s1.61sp=0.211 n=6
Bind Time0.85s (± 1.37%)0.88s (± 1.33%)+0.03s (+ 3.13%)0.86s0.89sp=0.012 n=6
Check Time11.35s (± 0.50%)11.32s (± 0.40%)~11.27s11.38sp=0.628 n=6
Emit Time3.23s (± 0.75%)3.24s (± 0.23%)~3.23s3.25sp=0.075 n=6
Total Time17.01s (± 0.42%)17.03s (± 0.15%)~16.99s17.06sp=0.336 n=6
angular-1 - node (v18.15.0, x64)
Errors77~~~p=1.000 n=6
Symbols945,757945,752-5 (- 0.00%)~~p=0.001 n=6
Types410,045410,082+37 (+ 0.01%)~~p=0.001 n=6
Memory used1,222,457k (± 0.00%)1,223,097k (± 0.00%)+641k (+ 0.05%)1,223,068k1,223,128kp=0.005 n=6
Parse Time7.95s (± 0.42%)7.95s (± 0.79%)~7.87s8.02sp=0.872 n=6
Bind Time2.23s (± 0.18%)2.28s (± 0.66%)+0.05s (+ 2.47%)2.27s2.31sp=0.004 n=6
Check Time36.28s (± 0.54%)36.30s (± 0.37%)~36.15s36.47sp=0.748 n=6
Emit Time17.77s (± 0.35%)17.86s (± 0.77%)~17.74s18.11sp=0.225 n=6
Total Time64.22s (± 0.29%)64.39s (± 0.38%)~64.15s64.83sp=0.296 n=6
mui-docs - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols2,487,6312,487,654+23 (+ 0.00%)~~p=0.001 n=6
Types1,012,9531,012,969+16 (+ 0.00%)~~p=0.001 n=6
Memory used2,493,621k (± 0.01%)2,494,038k (± 0.01%)+416k (+ 0.02%)2,493,890k2,494,358kp=0.005 n=6
Parse Time13.44s (± 0.45%)13.45s (± 0.45%)~13.36s13.54sp=0.872 n=6
Bind Time3.20s (± 0.88%)3.21s (± 0.74%)~3.18s3.24sp=0.520 n=6
Check Time109.30s (± 1.14%)109.53s (± 0.84%)~108.59s111.20sp=0.378 n=6
Emit Time0.40s (± 3.40%)0.40s (± 2.06%)~0.38s0.40sp=0.101 n=6
Total Time126.33s (± 1.00%)126.58s (± 0.74%)~125.66s128.32sp=0.378 n=6
self-build-src - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols1,229,2921,229,795+503 (+ 0.04%)~~p=0.001 n=6
Types264,032264,159+127 (+ 0.05%)~~p=0.001 n=6
Memory used2,348,388k (± 0.03%)2,472,550k (± 7.41%)🔻+124,162k (+ 5.29%)2,353,335k2,709,589kp=0.005 n=6
Parse Time6.07s (± 0.65%)6.09s (± 0.72%)~6.05s6.16sp=0.572 n=6
Bind Time2.25s (± 1.08%)2.35s (± 1.73%)🔻+0.10s (+ 4.67%)2.30s2.41sp=0.005 n=6
Check Time40.82s (± 0.67%)40.83s (± 0.74%)~40.30s41.15sp=0.689 n=6
Emit Time4.05s (± 2.13%)4.01s (± 1.16%)~3.94s4.06sp=0.575 n=6
Total Time53.21s (± 0.58%)53.30s (± 0.65%)~52.77s53.71sp=0.810 n=6
self-build-src-public-api - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols1,229,2921,229,795+503 (+ 0.04%)~~p=0.001 n=6
Types264,032264,159+127 (+ 0.05%)~~p=0.001 n=6
Memory used2,422,365k (± 0.05%)2,486,773k (± 5.80%)+64,408k (+ 2.66%)2,427,642k2,781,443kp=0.005 n=6
Parse Time6.25s (± 1.15%)6.33s (± 0.87%)~6.26s6.40sp=0.066 n=6
Bind Time2.02s (± 1.06%)2.40s (± 1.68%)🔻+0.37s (+18.47%)2.33s2.45sp=0.005 n=6
Check Time41.41s (± 0.92%)40.94s (± 0.52%)-0.47s (- 1.14%)40.53s41.09sp=0.031 n=6
Emit Time4.06s (± 2.84%)4.06s (± 0.98%)~4.00s4.11sp=1.000 n=6
Total Time53.76s (± 0.80%)53.73s (± 0.36%)~53.42s53.94sp=0.936 n=6
self-compiler - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols256,694256,830+136 (+ 0.05%)~~p=0.001 n=6
Types105,545105,615+70 (+ 0.07%)~~p=0.001 n=6
Memory used428,918k (± 0.02%)429,740k (± 0.01%)+821k (+ 0.19%)429,713k429,788kp=0.005 n=6
Parse Time4.16s (± 0.38%)4.17s (± 0.55%)~4.15s4.21sp=0.565 n=6
Bind Time1.61s (± 1.91%)1.63s (± 0.60%)~1.61s1.64sp=0.211 n=6
Check Time22.30s (± 0.41%)22.39s (± 0.34%)~22.32s22.50sp=0.092 n=6
Emit Time2.02s (± 1.46%)2.03s (± 0.59%)~2.02s2.05sp=0.935 n=6
Total Time30.08s (± 0.28%)30.22s (± 0.21%)+0.14s (+ 0.47%)30.15s30.33sp=0.030 n=6
ts-pre-modules - node (v18.15.0, x64)
Errors3535~~~p=1.000 n=6
Symbols225,018225,018~~~p=1.000 n=6
Types94,24594,245~~~p=1.000 n=6
Memory used370,225k (± 0.04%)370,391k (± 0.03%)+166k (+ 0.04%)370,252k370,510kp=0.045 n=6
Parse Time3.44s (± 0.56%)3.47s (± 0.89%)~3.42s3.50sp=0.124 n=6
Bind Time1.92s (± 0.97%)1.97s (± 0.89%)+0.06s (+ 2.96%)1.94s1.99sp=0.008 n=6
Check Time19.30s (± 0.45%)19.42s (± 0.30%)~19.37s19.50sp=0.108 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time24.66s (± 0.38%)24.86s (± 0.24%)+0.20s (+ 0.81%)24.77s24.95sp=0.010 n=6
vscode - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols2,995,2422,995,246+4 (+ 0.00%)~~p=0.001 n=6
Types1,032,0591,032,072+13 (+ 0.00%)~~p=0.001 n=6
Memory used3,120,605k (± 0.00%)3,121,257k (± 0.00%)+652k (+ 0.02%)3,121,170k3,121,369kp=0.005 n=6
Parse Time17.02s (± 0.32%)17.14s (± 0.19%)+0.11s (+ 0.67%)17.08s17.17sp=0.013 n=6
Bind Time5.24s (± 0.39%)5.28s (± 0.22%)+0.04s (+ 0.86%)5.27s5.30sp=0.007 n=6
Check Time96.69s (± 0.34%)96.59s (± 0.29%)~96.25s96.87sp=0.810 n=6
Emit Time25.00s (± 0.86%)24.99s (± 0.57%)~24.79s25.12sp=0.810 n=6
Total Time143.95s (± 0.23%)144.00s (± 0.24%)~143.64s144.44sp=0.810 n=6
webpack - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols271,703271,703~~~p=1.000 n=6
Types110,714110,714~~~p=1.000 n=6
Memory used417,637k (± 0.01%)418,169k (± 0.01%)+532k (+ 0.13%)418,130k418,196kp=0.005 n=6
Parse Time3.83s (± 0.75%)3.88s (± 0.66%)+0.05s (+ 1.26%)3.84s3.90sp=0.029 n=6
Bind Time1.69s (± 1.33%)1.76s (± 1.10%)🔻+0.07s (+ 4.04%)1.74s1.79sp=0.005 n=6
Check Time16.98s (± 0.40%)17.06s (± 0.38%)~16.96s17.14sp=0.077 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time22.50s (± 0.32%)22.71s (± 0.31%)+0.20s (+ 0.89%)22.59s22.80sp=0.008 n=6
xstate-main - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols538,614538,614~~~p=1.000 n=6
Types176,536176,536~~~p=1.000 n=6
Memory used481,404k (± 0.01%)481,817k (± 0.02%)+413k (+ 0.09%)481,735k481,927kp=0.005 n=6
Parse Time2.83s (± 0.71%)2.83s (± 0.85%)~2.81s2.87sp=1.000 n=6
Bind Time1.04s (± 0.61%)1.09s🔻+0.05s (+ 4.81%)~~p=0.002 n=6
Check Time15.29s (± 0.39%)15.30s (± 0.39%)~15.21s15.34sp=0.686 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time19.16s (± 0.23%)19.22s (± 0.35%)~19.12s19.29sp=0.173 n=6
System info unknown
Hosts
  • node (v18.15.0, x64)
Scenarios
  • Compiler-Unions - node (v18.15.0, x64)
  • angular-1 - node (v18.15.0, x64)
  • mui-docs - node (v18.15.0, x64)
  • self-build-src - node (v18.15.0, x64)
  • self-build-src-public-api - node (v18.15.0, x64)
  • self-compiler - node (v18.15.0, x64)
  • ts-pre-modules - node (v18.15.0, x64)
  • vscode - node (v18.15.0, x64)
  • webpack - node (v18.15.0, x64)
  • xstate-main - node (v18.15.0, x64)
BenchmarkNameIterations
Currentpr6
Baselinebaseline6

Developer Information:

Download Benchmarks

@typescript-bot

Copy link
Copy Markdown
Contributor

Anders Hejlsberg (@ahejlsberg) Here are the results of running the top 400 repos with tsc comparing main and refs/pull/58729/merge:

Something interesting changed - please have a look.

Details

tinacms/tinacms

11 of 23 projects failed to build with the old tsc and were ignored

packages/@tinacms/mdx/tsconfig.json

@ahejlsberg

Copy link
Copy Markdown
MemberAuthor

TypeScript Bot (@typescript-bot) perf test this faster

@typescript-bot

TypeScript Bot (typescript-bot) commented Aug 8, 2024

Copy link
Copy Markdown
Contributor

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

CommandStatusResults
perf test this faster✅ Started👀 Results

@typescript-bot

Copy link
Copy Markdown
Contributor

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

Here they are:

tsc

Comparison Report - baseline..pr
MetricbaselineprDeltaBestWorstp-value
Compiler-Unions - node (v18.15.0, x64)
Errors3030~~~p=1.000 n=6
Symbols62,15362,153~~~p=1.000 n=6
Types50,24250,242~~~p=1.000 n=6
Memory used192,926k (± 0.77%)194,413k (± 1.02%)+1,487k (+ 0.77%)192,600k196,272kp=0.020 n=6
Parse Time1.94s (± 0.56%)1.96s (± 1.10%)+0.02s (+ 1.20%)1.94s2.00sp=0.046 n=6
Bind Time1.06s (± 1.29%)1.09s (± 0.47%)+0.03s (+ 2.84%)1.08s1.09sp=0.007 n=6
Check Time14.08s (± 1.10%)14.06s (± 0.22%)~14.02s14.11sp=0.809 n=6
Emit Time3.97s (± 1.63%)4.00s (± 0.47%)~3.97s4.02sp=0.746 n=6
Total Time21.05s (± 0.65%)21.10s (± 0.14%)~21.05s21.14sp=0.172 n=6
angular-1 - node (v18.15.0, x64)
Errors77~~~p=1.000 n=6
Symbols945,757945,752-5 (- 0.00%)~~p=0.001 n=6
Types410,045410,082+37 (+ 0.01%)~~p=0.001 n=6
Memory used1,222,503k (± 0.00%)1,223,132k (± 0.00%)+629k (+ 0.05%)1,223,093k1,223,214kp=0.005 n=6
Parse Time7.89s (± 0.91%)7.93s (± 0.71%)~7.87s7.99sp=0.378 n=6
Bind Time2.21s (± 0.37%)2.27s (± 0.36%)+0.05s (+ 2.41%)2.26s2.28sp=0.003 n=6
Check Time36.20s (± 0.26%)36.34s (± 0.51%)~36.13s36.62sp=0.149 n=6
Emit Time17.70s (± 0.37%)17.76s (± 0.34%)~17.64s17.80sp=0.090 n=6
Total Time64.00s (± 0.09%)64.30s (± 0.34%)+0.30s (+ 0.47%)64.01s64.58sp=0.020 n=6
mui-docs - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols2,487,6312,487,654+23 (+ 0.00%)~~p=0.001 n=6
Types1,012,9531,012,969+16 (+ 0.00%)~~p=0.001 n=6
Memory used2,493,587k (± 0.01%)2,493,965k (± 0.00%)+378k (+ 0.02%)2,493,888k2,494,012kp=0.005 n=6
Parse Time10.95s (± 0.29%)10.93s (± 0.29%)~10.88s10.96sp=0.373 n=6
Bind Time2.61s (± 0.45%)2.63s (± 0.24%)+0.02s (+ 0.83%)2.62s2.64sp=0.007 n=6
Check Time89.50s (± 0.51%)89.50s (± 0.36%)~89.00s89.90sp=0.936 n=6
Emit Time0.33s (± 2.57%)0.34s (± 2.22%)🔻+0.01s (+ 4.10%)0.33s0.35sp=0.030 n=6
Total Time103.39s (± 0.46%)103.40s (± 0.30%)~102.94s103.79sp=0.873 n=6
self-build-src - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols1,229,4981,230,001+503 (+ 0.04%)~~p=0.001 n=6
Types264,061264,188+127 (+ 0.05%)~~p=0.001 n=6
Memory used2,468,078k (±11.76%)2,354,875k (± 0.04%)~2,353,520k2,355,889kp=0.066 n=6
Parse Time7.52s (± 1.70%)7.54s (± 0.63%)~7.49s7.60sp=0.199 n=6
Bind Time2.77s (± 0.87%)2.92s (± 0.82%)🔻+0.15s (+ 5.23%)2.88s2.94sp=0.005 n=6
Check Time50.56s (± 0.86%)50.74s (± 0.74%)~50.35s51.30sp=0.298 n=6
Emit Time5.01s (± 4.58%)5.09s (± 3.54%)~4.94s5.36sp=0.336 n=6
Total Time65.91s (± 0.58%)66.32s (± 0.46%)~65.95s66.67sp=0.066 n=6
self-build-src-public-api - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols1,229,4981,230,001+503 (+ 0.04%)~~p=0.001 n=6
Types264,061264,188+127 (+ 0.05%)~~p=0.001 n=6
Memory used2,423,316k (± 0.02%)2,427,894k (± 0.02%)+4,578k (+ 0.19%)2,427,190k2,428,315kp=0.005 n=6
Parse Time6.22s (± 0.78%)6.30s (± 0.66%)+0.08s (+ 1.37%)6.25s6.35sp=0.020 n=6
Bind Time2.02s (± 0.68%)2.38s (± 0.93%)🔻+0.36s (+17.61%)2.35s2.42sp=0.005 n=6
Check Time41.18s (± 0.44%)41.06s (± 0.27%)~40.87s41.20sp=0.230 n=6
Emit Time4.07s (± 3.79%)4.20s (± 4.08%)+0.13s (+ 3.11%)4.08s4.47sp=0.045 n=6
Total Time53.51s (± 0.30%)53.96s (± 0.24%)+0.45s (+ 0.85%)53.82s54.20sp=0.005 n=6
self-compiler - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols256,739256,875+136 (+ 0.05%)~~p=0.001 n=6
Types105,560105,630+70 (+ 0.07%)~~p=0.001 n=6
Memory used428,907k (± 0.01%)429,683k (± 0.01%)+776k (+ 0.18%)429,628k429,738kp=0.005 n=6
Parse Time3.36s (± 0.45%)3.35s (± 0.52%)~3.34s3.38sp=0.744 n=6
Bind Time1.32s (± 0.93%)1.32s (± 1.41%)~1.31s1.36sp=0.655 n=6
Check Time18.07s (± 0.24%)18.15s (± 0.45%)~18.03s18.26sp=0.128 n=6
Emit Time1.64s (± 1.88%)1.66s (± 1.12%)~1.64s1.69sp=0.125 n=6
Total Time24.38s (± 0.13%)24.49s (± 0.32%)+0.11s (+ 0.44%)24.40s24.61sp=0.010 n=6
ts-pre-modules - node (v18.15.0, x64)
Errors3535~~~p=1.000 n=6
Symbols225,018225,018~~~p=1.000 n=6
Types94,24594,245~~~p=1.000 n=6
Memory used370,197k (± 0.04%)370,385k (± 0.03%)~370,291k370,538kp=0.066 n=6
Parse Time2.76s (± 0.58%)2.78s (± 1.05%)~2.74s2.81sp=0.256 n=6
Bind Time1.57s (± 0.70%)1.61s (± 0.61%)+0.04s (+ 2.65%)1.60s1.63sp=0.004 n=6
Check Time15.67s (± 0.31%)15.72s (± 0.53%)~15.59s15.80sp=0.377 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time20.00s (± 0.18%)20.11s (± 0.45%)+0.10s (+ 0.52%)19.94s20.18sp=0.044 n=6
vscode - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols2,995,2502,995,254+4 (+ 0.00%)~~p=0.001 n=6
Types1,032,0861,032,099+13 (+ 0.00%)~~p=0.001 n=6
Memory used3,120,649k (± 0.00%)3,121,303k (± 0.00%)+655k (+ 0.02%)3,121,181k3,121,441kp=0.005 n=6
Parse Time16.99s (± 0.17%)17.14s (± 0.25%)+0.16s (+ 0.91%)17.10s17.21sp=0.005 n=6
Bind Time5.26s (± 1.77%)5.28s (± 0.53%)~5.26s5.33sp=0.063 n=6
Check Time96.55s (± 0.27%)97.01s (± 0.21%)+0.46s (+ 0.48%)96.75s97.34sp=0.020 n=6
Emit Time25.16s (± 0.58%)25.00s (± 0.47%)~24.87s25.18sp=0.078 n=6
Total Time143.95s (± 0.23%)144.42s (± 0.15%)+0.48s (+ 0.33%)144.20s144.78sp=0.020 n=6
webpack - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols273,789273,789~~~p=1.000 n=6
Types111,669111,669~~~p=1.000 n=6
Memory used419,923k (± 0.02%)420,355k (± 0.02%)+432k (+ 0.10%)420,245k420,457kp=0.005 n=6
Parse Time4.92s (± 0.44%)4.91s (± 0.43%)~4.89s4.94sp=0.627 n=6
Bind Time2.11s (± 0.98%)2.16s (± 0.63%)+0.05s (+ 2.29%)2.14s2.18sp=0.006 n=6
Check Time21.10s (± 0.29%)21.35s (± 0.77%)+0.25s (+ 1.18%)21.15s21.55sp=0.010 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time28.13s (± 0.24%)28.43s (± 0.55%)+0.30s (+ 1.05%)28.22s28.62sp=0.005 n=6
xstate-main - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols538,614538,614~~~p=1.000 n=6
Types176,536176,536~~~p=1.000 n=6
Memory used481,460k (± 0.01%)481,823k (± 0.00%)+363k (+ 0.08%)481,807k481,839kp=0.005 n=6
Parse Time3.38s (± 0.95%)3.38s (± 0.54%)~3.36s3.40sp=0.809 n=6
Bind Time1.24s (± 1.11%)1.31s (± 0.39%)🔻+0.06s (+ 4.95%)1.30s1.31sp=0.004 n=6
Check Time18.04s (± 0.51%)18.09s (± 0.20%)~18.03s18.13sp=0.335 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time22.67s (± 0.47%)22.78s (± 0.14%)+0.11s (+ 0.49%)22.72s22.81sp=0.012 n=6
System info unknown
Hosts
  • node (v18.15.0, x64)
Scenarios
  • Compiler-Unions - node (v18.15.0, x64)
  • angular-1 - node (v18.15.0, x64)
  • mui-docs - node (v18.15.0, x64)
  • self-build-src - node (v18.15.0, x64)
  • self-build-src-public-api - node (v18.15.0, x64)
  • self-compiler - node (v18.15.0, x64)
  • ts-pre-modules - node (v18.15.0, x64)
  • vscode - node (v18.15.0, x64)
  • webpack - node (v18.15.0, x64)
  • xstate-main - node (v18.15.0, x64)
BenchmarkNameIterations
Currentpr6
Baselinebaseline6

Developer Information:

Download Benchmarks

@jakebailey

Copy link
Copy Markdown
Member

TypeScript Bot (@typescript-bot) perf test this faster predictable=true

@typescript-bot

TypeScript Bot (typescript-bot) commented Aug 8, 2024

Copy link
Copy Markdown
Contributor

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

CommandStatusResults
perf test this faster predictable=true✅ Started👀 Results

@typescript-bot

Copy link
Copy Markdown
Contributor

Jake Bailey (@jakebailey)
The results of the perf run you requested are in!

Here they are:

tsc

Comparison Report - baseline..pr
MetricbaselineprDeltaBestWorstp-value
Compiler-Unions - node (v18.15.0, x64)
Errors3030~~~p=1.000 n=6
Symbols62,15362,153~~~p=1.000 n=6
Types50,24250,242~~~p=1.000 n=6
Memory used192,317k192,541k+224k (+ 0.12%)~~p=0.001 n=6
Parse Time1.28s (± 0.40%)1.29s+0.01s (+ 0.52%)~~p=0.025 n=6
Bind Time0.71s (± 0.73%)0.73s (± 0.71%)+0.02s (+ 2.83%)0.72s0.73sp=0.004 n=6
Check Time9.35s (± 0.12%)9.21s (± 0.06%)-0.14s (- 1.44%)9.21s9.22sp=0.004 n=6
Emit Time2.89s (± 0.18%)2.98s (± 0.14%)+0.09s (+ 3.05%)2.98s2.99sp=0.003 n=6
Total Time14.24s (± 0.07%)14.21s (± 0.04%)-0.02s (- 0.15%)14.21s14.22sp=0.007 n=6
angular-1 - node (v18.15.0, x64)
Errors77~~~p=1.000 n=6
Symbols945,757945,752-5 (- 0.00%)~~p=0.001 n=6
Types410,045410,082+37 (+ 0.01%)~~p=0.001 n=6
Memory used1,222,697k (± 0.00%)1,223,212k (± 0.01%)+515k (+ 0.04%)1,223,101k1,223,382kp=0.004 n=6
Parse Time6.27s (± 0.14%)6.31s (± 0.25%)+0.04s (+ 0.64%)6.30s6.34sp=0.004 n=6
Bind Time1.85s (± 0.28%)1.92s (± 0.64%)+0.06s (+ 3.33%)1.91s1.94sp=0.003 n=6
Check Time35.27s (± 0.18%)33.63s (± 0.16%)🟩-1.64s (- 4.64%)33.58s33.73sp=0.005 n=6
Emit Time14.65s (± 0.19%)16.69s (± 0.22%)🔻+2.04s (+13.92%)16.65s16.74sp=0.005 n=6
Total Time58.04s (± 0.13%)58.55s (± 0.05%)+0.51s (+ 0.87%)58.52s58.59sp=0.005 n=6
mui-docs - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols2,487,6312,487,654+23 (+ 0.00%)~~p=0.001 n=6
Types1,012,9531,012,969+16 (+ 0.00%)~~p=0.001 n=6
Memory used2,493,838k2,494,479k+641k (+ 0.03%)~~p=0.001 n=6
Parse Time8.93s (± 0.06%)8.93s (± 0.15%)~8.92s8.95sp=0.794 n=6
Bind Time2.81s (± 0.18%)2.27s (± 0.23%)🟩-0.54s (-19.19%)2.27s2.28sp=0.004 n=6
Check Time77.26s (± 0.11%)77.23s (± 0.05%)~77.18s77.28sp=0.298 n=6
Emit Time0.29s0.29s~~~p=1.000 n=6
Total Time89.29s (± 0.09%)88.73s (± 0.05%)-0.56s (- 0.63%)88.67s88.78sp=0.005 n=6
self-build-src - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols1,229,4981,230,001+503 (+ 0.04%)~~p=0.001 n=6
Types264,061264,188+127 (+ 0.05%)~~p=0.001 n=6
Memory used2,350,880k (± 0.00%)2,355,888k (± 0.00%)+5,008k (+ 0.21%)2,355,874k2,355,947kp=0.005 n=6
Parse Time5.75s (± 0.32%)5.85s (± 0.13%)+0.10s (+ 1.80%)5.84s5.86sp=0.005 n=6
Bind Time2.11s (± 0.24%)2.31s (± 0.35%)🔻+0.19s (+ 9.15%)2.29s2.31sp=0.003 n=6
Check Time41.18s (± 0.06%)41.61s (± 0.10%)+0.43s (+ 1.03%)41.56s41.66sp=0.005 n=6
Emit Time4.18s (± 0.18%)4.19s (± 0.29%)~4.17s4.20sp=0.323 n=6
Total Time53.24s (± 0.06%)53.96s (± 0.09%)+0.72s (+ 1.35%)53.89s54.02sp=0.005 n=6
self-build-src-public-api - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols1,229,4981,230,001+503 (+ 0.04%)~~p=0.001 n=6
Types264,061264,188+127 (+ 0.05%)~~p=0.001 n=6
Memory used2,423,250k (± 0.00%)2,428,200k+4,950k (+ 0.20%)~~p=0.002 n=6
Parse Time4.94s (± 0.17%)5.00s (± 0.10%)+0.06s (+ 1.18%)5.00s5.01sp=0.004 n=6
Bind Time1.70s (± 0.24%)1.81s (± 0.23%)🔻+0.11s (+ 6.46%)1.81s1.82sp=0.003 n=6
Check Time35.37s (± 0.07%)35.60s (± 0.12%)+0.23s (+ 0.65%)35.53s35.66sp=0.005 n=6
Emit Time3.56s (± 0.15%)3.57s (± 0.18%)+0.01s (+ 0.37%)3.56s3.58sp=0.009 n=6
Total Time45.59s (± 0.07%)45.96s (± 0.09%)+0.37s (+ 0.82%)45.89s46.02sp=0.005 n=6
self-compiler - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols256,739256,875+136 (+ 0.05%)~~p=0.001 n=6
Types105,560105,630+70 (+ 0.07%)~~p=0.001 n=6
Memory used428,755k429,618k+863k (+ 0.20%)~~p=0.001 n=6
Parse Time3.16s (± 0.38%)3.15s (± 0.33%)~3.14s3.17sp=0.180 n=6
Bind Time1.46s (± 0.35%)1.50s+0.04s (+ 2.51%)~~p=0.002 n=6
Check Time18.12s (± 0.24%)18.19s (± 0.08%)~18.17s18.20sp=0.062 n=6
Emit Time1.63s (± 0.33%)1.65s (± 0.31%)+0.01s (+ 0.71%)1.64s1.65sp=0.013 n=6
Total Time24.39s (± 0.16%)24.49s (± 0.09%)+0.10s (+ 0.41%)24.46s24.51sp=0.007 n=6
ts-pre-modules - node (v18.15.0, x64)
Errors3535~~~p=1.000 n=6
Symbols225,018225,018~~~p=1.000 n=6
Types94,24594,245~~~p=1.000 n=6
Memory used370,111k370,356k+245k (+ 0.07%)~~p=0.001 n=6
Parse Time3.42s (± 0.40%)3.45s (± 0.57%)+0.03s (+ 0.88%)3.43s3.48sp=0.016 n=6
Bind Time1.73s (± 0.24%)1.78s (± 0.23%)+0.05s (+ 3.09%)1.78s1.79sp=0.003 n=6
Check Time19.89s (± 0.07%)19.88s (± 0.13%)~19.86s19.93sp=0.277 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time25.04s (± 0.10%)25.11s (± 0.11%)+0.07s (+ 0.29%)25.08s25.15sp=0.005 n=6
vscode - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols2,995,0212,995,025+4 (+ 0.00%)~~p=0.001 n=6
Types1,032,0701,032,083+13 (+ 0.00%)~~p=0.001 n=6
Memory used3,120,667k (± 0.00%)3,121,565k (± 0.00%)+897k (+ 0.03%)3,121,556k3,121,605kp=0.003 n=6
Parse Time14.39s (± 0.17%)14.52s (± 0.06%)+0.13s (+ 0.87%)14.50s14.52sp=0.004 n=6
Bind Time4.48s (± 0.14%)4.72s (± 0.18%)🔻+0.24s (+ 5.25%)4.71s4.73sp=0.004 n=6
Check Time77.44s (± 0.15%)77.50s (± 0.11%)~77.39s77.60sp=0.295 n=6
Emit Time26.01s (± 0.24%)25.98s (± 0.23%)~25.91s26.06sp=0.470 n=6
Total Time122.32s (± 0.12%)122.71s (± 0.09%)+0.39s (+ 0.32%)122.55s122.87sp=0.006 n=6
webpack - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols273,789273,789~~~p=1.000 n=6
Types111,669111,669~~~p=1.000 n=6
Memory used419,865k420,361k+496k (+ 0.12%)~~p=0.001 n=6
Parse Time3.81s (± 0.26%)3.95s (± 0.19%)+0.14s (+ 3.68%)3.94s3.96sp=0.004 n=6
Bind Time1.77s1.83s+0.06s (+ 3.39%)~~p=0.001 n=6
Check Time16.94s (± 0.03%)17.07s (± 0.07%)+0.13s (+ 0.79%)17.06s17.09sp=0.004 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time22.52s (± 0.06%)22.84s (± 0.05%)+0.33s (+ 1.46%)22.83s22.86sp=0.005 n=6
xstate-main - node (v18.15.0, x64)
Errors00~~~p=1.000 n=6
Symbols538,614538,614~~~p=1.000 n=6
Types176,536176,536~~~p=1.000 n=6
Memory used481,455k481,794k+339k (+ 0.07%)~~p=0.001 n=6
Parse Time3.23s (± 0.32%)3.23s (± 0.46%)~3.22s3.26sp=0.558 n=6
Bind Time1.48s1.51s (± 0.27%)+0.03s (+ 2.14%)1.51s1.52sp=0.002 n=6
Check Time18.00s (± 0.12%)18.01s (± 0.12%)~17.99s18.05sp=0.464 n=6
Emit Time0.00s0.00s~~~p=1.000 n=6
Total Time22.71s (± 0.09%)22.75s (± 0.14%)+0.04s (+ 0.19%)22.72s22.80sp=0.030 n=6
System info unknown
Hosts
  • node (v18.15.0, x64)
Scenarios
  • Compiler-Unions - node (v18.15.0, x64)
  • angular-1 - node (v18.15.0, x64)
  • mui-docs - node (v18.15.0, x64)
  • self-build-src - node (v18.15.0, x64)
  • self-build-src-public-api - node (v18.15.0, x64)
  • self-compiler - node (v18.15.0, x64)
  • ts-pre-modules - node (v18.15.0, x64)
  • vscode - node (v18.15.0, x64)
  • webpack - node (v18.15.0, x64)
  • xstate-main - node (v18.15.0, x64)
BenchmarkNameIterations
Currentpr6
Baselinebaseline6

Developer Information:

Download Benchmarks

@ahejlsberg

Copy link
Copy Markdown
MemberAuthor

Jake Bailey (@jakebailey) Asking for predictable seems to have very unpredictable effects. 😮

@ahejlsberg

Copy link
Copy Markdown
MemberAuthor

Jake Bailey (@jakebailey) The issue with switching to actual immediate modifiers is that we need an updated ESLint.

@jakebailey

Copy link
Copy Markdown
Member

Asking for predictable seems to have very unpredictable effects. 😮

The error bars are 3-4x smaller! 😄 But yes, don't use this feature, I'm still not sure if it's a good thing or not.

The issue with switching to actual immediate modifiers is that we need an updated ESLint.

Ah, right. Theoretically we can exclude src/lib from both linting and formatting temporarily. But, let me see if I can switch to the keyword locally and compare profiles before or after to see if there's some potential JSDoc win... (I assume you didn't commit that to a branch somewhere?)

@jakebailey

Copy link
Copy Markdown
Member

Even with the keyword, #59580 (comment) shows roughly the same perf regression in bind. Still not sure what it could be reading 5ae48a2 (#58729).

@dgreensp

David Greenspan (dgreensp) commented Sep 23, 2024

Copy link
Copy Markdown

I'm just a passer-by (who writes a lot of TypeScript), who got excited by the prospect of a new keyword that would improve CFA or soundness, but I'm not sure I understand the motivation here, relative to the magnitude of the change (new syntax).

I guess it started as an effort to improve soundness by considering that called functions might have side effects, and now it basically helps correct for overzealous CFA.

Here is another case (not related to this feature) where CFA thinks it knows everything and narrows the type annotation of a local variable:

functionfoo(a: number[],i: number){// I'm serious, Typescript, I'm saying this could be out-of-bounds!constn: number|undefined=a[i];constn2=n;// : number}

In both cases, you have to occasionally override CFA, e.g. in the example at the top of this thread, one could write:

declarefunctionmystery(cb: ()=>void): void;letx: string|number="OK"asstring|number;mystery(()=>{x=10;});if(x===10){// works}

In terms of the larger issue of side effects, I think it should at least be acknowledged that passing any closure to any function could lead to functions having side effects that affect local variables; it doesn't really depend on whether a callback is invoked "immediately" or "deferred."

For example:

constfoo=newFoo(()=>{/* ... set a local variable */});foo.execute();

Here, the callback is not called immediately, but it is called during the course of the function. The point is, the question of whether a callback might be called immediately or not by a function is only loosely connected to the question of whether a function call has side effects that might affect the analysis of local variables.

I think an annotation that says "this callback is called exactly once, synchronously" or "this callback is called at least once, synchronously" might even be more useful? It would serve a slightly different purpose. If this keyword opens the door to other keywords, I'm for it. There are a lot of keywords I would want.

@SimonSchick

Copy link
Copy Markdown

Is this going to make the 5.7 release? I see it is in the iteration plan and I'm curious what work is remaining here 👀

@jakebailey

Copy link
Copy Markdown
Member

No, 5.7 is cut, and its release candidate is already out. https://devblogs.microsoft.com/typescript/announcing-typescript-5-7-rc/

Something being in the iteration plan does not guarantee its completion / inclusion in a release.

LukeAbby added a commit to League-of-Foundry-Developers/foundry-vtt-types that referenced this pull request Mar 2, 2025
LukeAbby added a commit to League-of-Foundry-Developers/foundry-vtt-types that referenced this pull request Mar 2, 2025
@typescript-bot

Copy link
Copy Markdown
Contributor

With 6.0 out as the final release vehicle for this codebase, we're closing all PRs that don't fit the merge criteria for post-6.0 patches. If you think this was a mistake and this PR fits the post-6.0 patch criteria, please post to the 6.0 iteration issue with details (specifically, which PR and which patch criteria it satisfies).

Next steps for PRs:

  • For crash bugfixes or language service improvements, PRs are currently accepted at the typescript-go repo
  • Changes to type system behavior should wait until after 7.0, at which point mainline TypeScript development will resume in this repository with the Go codebase
  • Library file updates (lib.d.ts etc) continue to live in this repo or the DOM Generator repo as appropriate

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Author: TeamFor Uncommitted BugPR for untriaged, rejected, closed or missing bug

Projects

None yet

20 participants

@ahejlsberg@typescript-bot@fatcerberus@ethanresnick@Igorbek@gabritto@jakebailey@andrewbranch@g-plane@magic-akari@yume-chan@DanielRosenwasser@ilogico@whzx5byb@rbuckton@bluepnume@dgreensp@SimonSchick@sandersn@RyanCavanaugh