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

Cache propagating variance flags in the relationship cache #32225

Merged

Conversation

weswigham
Copy link
Member

A sequel to #31688.

Fixes #32209

This allows Unreliable and Unmeasurable variances to propagate even for those types which are not references and do not have alias symbols. The downside is that the exact nuance of which type parameter position within the type is unreliable/unmeasurable is lost (but that isn't really recoverable for non-alias-symbol/type-reference types anyway).

@weswigham
Copy link
Member Author

The whole shebang of extra tests:
@typescript-bot test this
@typescript-bot run dt
@typescript-bot user test this
@typescript-bot perf test

@typescript-bot
Copy link
Collaborator

typescript-bot commented Jul 2, 2019

Heya @weswigham, I've started to run the community code test suite on this PR at c4f96b6. You can monitor the build here. It should now contribute to this PR's status checks.

@typescript-bot
Copy link
Collaborator

typescript-bot commented Jul 2, 2019

Heya @weswigham, I've started to run the perf test suite on this PR at c4f96b6. You can monitor the build here. It should now contribute to this PR's status checks.

Update: The results are in!

@typescript-bot
Copy link
Collaborator

typescript-bot commented Jul 2, 2019

Heya @weswigham, I've started to run the parallelized Definitely Typed test suite on this PR at c4f96b6. You can monitor the build here. It should now contribute to this PR's status checks.

@typescript-bot
Copy link
Collaborator

typescript-bot commented Jul 2, 2019

Heya @weswigham, I've started to run the extended test suite on this PR at c4f96b6. You can monitor the build here. It should now contribute to this PR's status checks.

@typescript-bot
Copy link
Collaborator

@weswigham
The results of the perf run you requested are in!

Here they are:

Comparison Report - master..32225

Metric master 32225 Delta Best Worst
Angular - node (v12.1.0, x64)
Memory used 315,988k (± 0.02%) 316,043k (± 0.02%) +55k (+ 0.02%) 315,925k 316,231k
Parse Time 1.38s (± 0.56%) 1.38s (± 0.51%) -0.00s (- 0.00%) 1.36s 1.39s
Bind Time 0.73s (± 0.61%) 0.73s (± 0.76%) -0.00s (- 0.55%) 0.72s 0.74s
Check Time 4.12s (± 0.46%) 4.13s (± 0.62%) +0.01s (+ 0.15%) 4.08s 4.18s
Emit Time 5.20s (± 0.72%) 5.23s (± 1.02%) +0.03s (+ 0.63%) 5.15s 5.39s
Total Time 11.44s (± 0.37%) 11.47s (± 0.63%) +0.03s (+ 0.31%) 11.36s 11.65s
Monaco - node (v12.1.0, x64)
Memory used 345,623k (± 0.01%) 345,566k (± 0.01%) -58k (- 0.02%) 345,493k 345,639k
Parse Time 1.18s (± 0.62%) 1.18s (± 0.68%) -0.00s (- 0.00%) 1.16s 1.20s
Bind Time 0.67s (± 0.99%) 0.67s (± 0.77%) -0.00s (- 0.30%) 0.66s 0.69s
Check Time 4.22s (± 0.52%) 4.19s (± 0.68%) -0.03s (- 0.66%) 4.15s 4.26s
Emit Time 2.85s (± 0.53%) 2.84s (± 0.60%) -0.01s (- 0.32%) 2.81s 2.88s
Total Time 8.92s (± 0.38%) 8.87s (± 0.35%) -0.04s (- 0.47%) 8.80s 8.92s
TFS - node (v12.1.0, x64)
Memory used 301,147k (± 0.01%) 301,157k (± 0.02%) +9k (+ 0.00%) 301,022k 301,260k
Parse Time 0.90s (± 0.49%) 0.92s (± 0.75%) +0.01s (+ 1.44%) 0.90s 0.93s
Bind Time 0.62s (± 1.13%) 0.62s (± 0.99%) 0.00s ( 0.00%) 0.61s 0.64s
Check Time 3.77s (± 0.47%) 3.77s (± 0.34%) -0.01s (- 0.16%) 3.74s 3.80s
Emit Time 2.94s (± 1.33%) 2.95s (± 0.60%) +0.01s (+ 0.34%) 2.92s 2.99s
Total Time 8.23s (± 0.63%) 8.25s (± 0.32%) +0.02s (+ 0.26%) 8.20s 8.31s
Angular - node (v8.9.0, x64)
Memory used 334,325k (± 0.02%) 334,352k (± 0.02%) +27k (+ 0.01%) 334,280k 334,499k
Parse Time 1.78s (± 0.41%) 1.78s (± 0.92%) +0.00s (+ 0.11%) 1.76s 1.84s
Bind Time 0.79s (± 0.98%) 0.80s (± 1.04%) +0.01s (+ 0.63%) 0.78s 0.82s
Check Time 4.87s (± 1.54%) 4.91s (± 1.22%) +0.04s (+ 0.86%) 4.74s 4.99s
Emit Time 5.97s (± 2.23%) 6.01s (± 1.88%) +0.04s (+ 0.62%) 5.72s 6.33s
Total Time 13.41s (± 0.77%) 13.50s (± 0.73%) +0.08s (+ 0.63%) 13.24s 13.71s
Monaco - node (v8.9.0, x64)
Memory used 362,806k (± 0.02%) 362,778k (± 0.01%) -28k (- 0.01%) 362,701k 362,910k
Parse Time 1.44s (± 0.56%) 1.43s (± 0.40%) -0.01s (- 0.56%) 1.42s 1.44s
Bind Time 0.90s (± 1.84%) 0.89s (± 2.38%) -0.01s (- 1.11%) 0.86s 0.94s
Check Time 5.08s (± 1.90%) 5.08s (± 1.62%) -0.00s (- 0.02%) 4.91s 5.20s
Emit Time 3.27s (± 6.40%) 3.16s (± 6.69%) -0.10s (- 3.21%) 2.91s 3.54s
Total Time 10.69s (± 1.31%) 10.56s (± 1.45%) -0.13s (- 1.17%) 10.32s 10.84s
TFS - node (v8.9.0, x64)
Memory used 316,831k (± 0.01%) 316,776k (± 0.01%) -55k (- 0.02%) 316,688k 316,846k
Parse Time 1.13s (± 0.55%) 1.13s (± 0.73%) +0.00s (+ 0.35%) 1.12s 1.16s
Bind Time 0.66s (± 0.55%) 0.66s (± 0.55%) 0.00s ( 0.00%) 0.66s 0.67s
Check Time 4.37s (± 0.67%) 4.38s (± 0.34%) +0.02s (+ 0.37%) 4.34s 4.41s
Emit Time 3.20s (± 0.67%) 3.21s (± 0.49%) +0.01s (+ 0.31%) 3.18s 3.26s
Total Time 9.36s (± 0.37%) 9.39s (± 0.18%) +0.03s (+ 0.32%) 9.36s 9.43s
Angular - node (v8.9.0, x86)
Memory used 189,329k (± 0.02%) 189,505k (± 0.02%) +176k (+ 0.09%) 189,418k 189,589k
Parse Time 1.73s (± 0.43%) 1.74s (± 0.84%) +0.01s (+ 0.46%) 1.71s 1.76s
Bind Time 0.93s (± 0.81%) 0.93s (± 0.73%) -0.00s (- 0.00%) 0.92s 0.95s
Check Time 4.50s (± 0.68%) 4.49s (± 0.56%) -0.00s (- 0.11%) 4.43s 4.54s
Emit Time 5.75s (± 1.02%) 5.79s (± 1.79%) +0.03s (+ 0.54%) 5.62s 6.08s
Total Time 12.90s (± 0.62%) 12.94s (± 0.82%) +0.04s (+ 0.29%) 12.75s 13.22s
Monaco - node (v8.9.0, x86)
Memory used 202,458k (± 0.02%) 202,470k (± 0.02%) +12k (+ 0.01%) 202,378k 202,554k
Parse Time 1.49s (± 0.52%) 1.49s (± 0.27%) +0.00s (+ 0.13%) 1.48s 1.50s
Bind Time 0.72s (± 1.25%) 0.71s (± 1.25%) -0.00s (- 0.14%) 0.70s 0.73s
Check Time 4.79s (± 0.58%) 4.78s (± 0.46%) -0.01s (- 0.19%) 4.74s 4.83s
Emit Time 3.17s (± 0.50%) 3.16s (± 0.26%) -0.01s (- 0.35%) 3.14s 3.18s
Total Time 10.16s (± 0.36%) 10.15s (± 0.27%) -0.02s (- 0.16%) 10.10s 10.20s
TFS - node (v8.9.0, x86)
Memory used 177,824k (± 0.01%) 177,791k (± 0.02%) -33k (- 0.02%) 177,700k 177,874k
Parse Time 1.19s (± 0.86%) 1.19s (± 0.73%) -0.00s (- 0.25%) 1.17s 1.21s
Bind Time 0.63s (± 1.03%) 0.63s (± 0.53%) +0.00s (+ 0.32%) 0.62s 0.64s
Check Time 4.19s (± 1.06%) 4.20s (± 0.97%) +0.00s (+ 0.05%) 4.12s 4.27s
Emit Time 2.86s (± 1.00%) 2.84s (± 0.83%) -0.02s (- 0.80%) 2.78s 2.90s
Total Time 8.88s (± 0.76%) 8.85s (± 0.58%) -0.02s (- 0.24%) 8.76s 8.99s
Angular - node (v9.0.0, x64)
Memory used 333,981k (± 0.02%) 334,069k (± 0.01%) +89k (+ 0.03%) 333,991k 334,172k
Parse Time 1.62s (± 0.54%) 1.62s (± 0.43%) +0.00s (+ 0.06%) 1.60s 1.63s
Bind Time 0.74s (± 0.90%) 0.75s (± 0.92%) +0.00s (+ 0.27%) 0.74s 0.77s
Check Time 4.48s (± 0.42%) 4.47s (± 1.13%) -0.01s (- 0.29%) 4.37s 4.65s
Emit Time 5.85s (± 1.78%) 5.81s (± 2.46%) -0.04s (- 0.70%) 5.39s 6.06s
Total Time 12.69s (± 0.90%) 12.64s (± 0.92%) -0.05s (- 0.39%) 12.41s 12.86s
Monaco - node (v9.0.0, x64)
Memory used 362,534k (± 0.04%) 362,573k (± 0.04%) +39k (+ 0.01%) 362,329k 362,872k
Parse Time 1.28s (± 0.31%) 1.29s (± 0.53%) +0.01s (+ 0.47%) 1.27s 1.30s
Bind Time 0.85s (± 0.40%) 0.85s (± 0.56%) +0.01s (+ 0.71%) 0.84s 0.86s
Check Time 4.83s (± 0.51%) 4.85s (± 0.48%) +0.02s (+ 0.31%) 4.80s 4.89s
Emit Time 3.36s (± 0.41%) 3.37s (± 0.53%) +0.01s (+ 0.45%) 3.35s 3.43s
Total Time 10.31s (± 0.35%) 10.35s (± 0.41%) +0.04s (+ 0.42%) 10.27s 10.46s
TFS - node (v9.0.0, x64)
Memory used 316,566k (± 0.02%) 316,588k (± 0.01%) +21k (+ 0.01%) 316,501k 316,650k
Parse Time 1.01s (± 0.40%) 1.01s (± 0.51%) +0.00s (+ 0.20%) 1.00s 1.02s
Bind Time 0.61s (± 0.56%) 0.62s (± 0.96%) +0.00s (+ 0.49%) 0.60s 0.63s
Check Time 4.30s (± 1.42%) 4.33s (± 1.79%) +0.03s (+ 0.70%) 4.25s 4.56s
Emit Time 3.17s (± 2.21%) 3.12s (± 2.47%) -0.04s (- 1.30%) 2.91s 3.22s
Total Time 9.09s (± 0.37%) 9.09s (± 0.24%) -0.00s (- 0.05%) 9.03s 9.14s
Angular - node (v9.0.0, x86)
Memory used 189,528k (± 0.03%) 189,591k (± 0.03%) +63k (+ 0.03%) 189,482k 189,753k
Parse Time 1.54s (± 0.76%) 1.53s (± 0.39%) -0.01s (- 0.39%) 1.52s 1.55s
Bind Time 0.87s (± 0.68%) 0.87s (± 0.76%) -0.00s (- 0.46%) 0.86s 0.89s
Check Time 4.18s (± 0.52%) 4.18s (± 0.39%) +0.00s (+ 0.07%) 4.13s 4.22s
Emit Time 5.46s (± 1.00%) 5.43s (± 0.63%) -0.03s (- 0.55%) 5.35s 5.51s
Total Time 12.06s (± 0.58%) 12.02s (± 0.33%) -0.04s (- 0.31%) 11.95s 12.10s
Monaco - node (v9.0.0, x86)
Memory used 202,461k (± 0.01%) 202,493k (± 0.02%) +32k (+ 0.02%) 202,395k 202,641k
Parse Time 1.31s (± 0.63%) 1.30s (± 0.61%) -0.00s (- 0.31%) 1.29s 1.32s
Bind Time 0.64s (± 0.74%) 0.64s (± 0.52%) -0.00s (- 0.47%) 0.63s 0.65s
Check Time 4.62s (± 0.36%) 4.63s (± 0.58%) +0.01s (+ 0.17%) 4.58s 4.68s
Emit Time 3.10s (± 0.57%) 3.11s (± 0.57%) +0.01s (+ 0.45%) 3.08s 3.15s
Total Time 9.67s (± 0.27%) 9.68s (± 0.33%) +0.01s (+ 0.13%) 9.61s 9.76s
TFS - node (v9.0.0, x86)
Memory used 177,843k (± 0.02%) 177,874k (± 0.01%) +31k (+ 0.02%) 177,839k 177,955k
Parse Time 1.02s (± 0.67%) 1.03s (± 1.55%) +0.01s (+ 0.88%) 1.01s 1.09s
Bind Time 0.57s (± 0.59%) 0.57s (± 0.78%) -0.00s (- 0.17%) 0.56s 0.58s
Check Time 4.03s (± 0.78%) 4.03s (± 0.61%) 0.00s ( 0.00%) 3.97s 4.10s
Emit Time 2.77s (± 0.51%) 2.78s (± 0.76%) +0.00s (+ 0.11%) 2.73s 2.83s
Total Time 8.41s (± 0.38%) 8.42s (± 0.36%) +0.01s (+ 0.12%) 8.33s 8.46s
System
Machine Namets-ci-ubuntu
Platformlinux 4.4.0-142-generic
Architecturex64
Available Memory16 GB
Available Memory1 GB
CPUs4 × Intel(R) Core(TM) i7-4770 CPU @ 3.40GHz
Hosts
  • node (v12.1.0, x64)
  • node (v8.9.0, x64)
  • node (v8.9.0, x86)
  • node (v9.0.0, x64)
  • node (v9.0.0, x86)
Scenarios
  • Angular - node (v12.1.0, x64)
  • Angular - node (v8.9.0, x64)
  • Angular - node (v8.9.0, x86)
  • Angular - node (v9.0.0, x64)
  • Angular - node (v9.0.0, x86)
  • Monaco - node (v12.1.0, x64)
  • Monaco - node (v8.9.0, x64)
  • Monaco - node (v8.9.0, x86)
  • Monaco - node (v9.0.0, x64)
  • Monaco - node (v9.0.0, x86)
  • TFS - node (v12.1.0, x64)
  • TFS - node (v8.9.0, x64)
  • TFS - node (v8.9.0, x86)
  • TFS - node (v9.0.0, x64)
  • TFS - node (v9.0.0, x86)
Benchmark Name Iterations
Current 32225 10
Baseline master 10

@typescript-bot
Copy link
Collaborator

The user suite test run you requested has finished and failed. I've opened a PR with the baseline diff from master.

@fatcerberus
Copy link

I'm getting really curious, could somebody explain to exactly me why TypeScript needs to measure variance? I've never understood that. A type parameter is either co-, contra-, in- or bivariant: I don't understand what there is to quantify. Especially since structural typing (in theory) should mean the variance is implicit in the structure, right?

@weswigham
Copy link
Member Author

Especially since structural typing (in theory) should mean the variance is implicit in the structure, right?

It is - we measure the variance so we can avoid comparing the parts of the type we know are identical and just compare the type parameters as is appropriate for the structure they are contained within.

@weswigham
Copy link
Member Author

RWC and user suite failures are with diffs identical to master, so every extended test suite is clean. ❤️

@weswigham weswigham force-pushed the cache-propegating-variance-flags branch from c4f96b6 to 0a555c7 Compare August 19, 2019 18:26
@weswigham weswigham merged commit 00a43d7 into microsoft:master Sep 23, 2019
@weswigham weswigham deleted the cache-propegating-variance-flags branch September 23, 2019 23:55
@WearyMonkey
Copy link

Hooray! Thank you @weswigham

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.

Inconsistent type errors depending on order of statements
5 participants