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

Slow compilation because of deep inheritance hierarchy. #48011

Closed
modulovalue opened this issue Dec 24, 2021 · 10 comments
Closed

Slow compilation because of deep inheritance hierarchy. #48011

modulovalue opened this issue Dec 24, 2021 · 10 comments
Labels
area-web Use area-web for Dart web related issues, including the DDC and dart2js compilers and JS interop. front-end-kernel web-dart2js

Comments

@modulovalue
Copy link
Contributor

This issue is about the compiler being slow when given a program with a deep inheritance hierarchy.

A: 1000 classes with a single parent

dart big_wide.dart 0.60s user 0.19s system 146% cpu 0.536 total

big_wide.dart
void main() {}

class Class0 {}

class Class1 implements Class0 {}

class Class2 implements Class0 {}

class Class3 implements Class0 {}

class Class4 implements Class0 {}

class Class5 implements Class0 {}

class Class6 implements Class0 {}

class Class7 implements Class0 {}

class Class8 implements Class0 {}

class Class9 implements Class0 {}

class Class10 implements Class0 {}

class Class11 implements Class0 {}

class Class12 implements Class0 {}

class Class13 implements Class0 {}

class Class14 implements Class0 {}

class Class15 implements Class0 {}

class Class16 implements Class0 {}

class Class17 implements Class0 {}

class Class18 implements Class0 {}

class Class19 implements Class0 {}

class Class20 implements Class0 {}

class Class21 implements Class0 {}

class Class22 implements Class0 {}

class Class23 implements Class0 {}

class Class24 implements Class0 {}

class Class25 implements Class0 {}

class Class26 implements Class0 {}

class Class27 implements Class0 {}

class Class28 implements Class0 {}

class Class29 implements Class0 {}

class Class30 implements Class0 {}

class Class31 implements Class0 {}

class Class32 implements Class0 {}

class Class33 implements Class0 {}

class Class34 implements Class0 {}

class Class35 implements Class0 {}

class Class36 implements Class0 {}

class Class37 implements Class0 {}

class Class38 implements Class0 {}

class Class39 implements Class0 {}

class Class40 implements Class0 {}

class Class41 implements Class0 {}

class Class42 implements Class0 {}

class Class43 implements Class0 {}

class Class44 implements Class0 {}

class Class45 implements Class0 {}

class Class46 implements Class0 {}

class Class47 implements Class0 {}

class Class48 implements Class0 {}

class Class49 implements Class0 {}

class Class50 implements Class0 {}

class Class51 implements Class0 {}

class Class52 implements Class0 {}

class Class53 implements Class0 {}

class Class54 implements Class0 {}

class Class55 implements Class0 {}

class Class56 implements Class0 {}

class Class57 implements Class0 {}

class Class58 implements Class0 {}

class Class59 implements Class0 {}

class Class60 implements Class0 {}

class Class61 implements Class0 {}

class Class62 implements Class0 {}

class Class63 implements Class0 {}

class Class64 implements Class0 {}

class Class65 implements Class0 {}

class Class66 implements Class0 {}

class Class67 implements Class0 {}

class Class68 implements Class0 {}

class Class69 implements Class0 {}

class Class70 implements Class0 {}

class Class71 implements Class0 {}

class Class72 implements Class0 {}

class Class73 implements Class0 {}

class Class74 implements Class0 {}

class Class75 implements Class0 {}

class Class76 implements Class0 {}

class Class77 implements Class0 {}

class Class78 implements Class0 {}

class Class79 implements Class0 {}

class Class80 implements Class0 {}

class Class81 implements Class0 {}

class Class82 implements Class0 {}

class Class83 implements Class0 {}

class Class84 implements Class0 {}

class Class85 implements Class0 {}

class Class86 implements Class0 {}

class Class87 implements Class0 {}

class Class88 implements Class0 {}

class Class89 implements Class0 {}

class Class90 implements Class0 {}

class Class91 implements Class0 {}

class Class92 implements Class0 {}

class Class93 implements Class0 {}

class Class94 implements Class0 {}

class Class95 implements Class0 {}

class Class96 implements Class0 {}

class Class97 implements Class0 {}

class Class98 implements Class0 {}

class Class99 implements Class0 {}

class Class100 implements Class0 {}

class Class101 implements Class0 {}

class Class102 implements Class0 {}

class Class103 implements Class0 {}

class Class104 implements Class0 {}

class Class105 implements Class0 {}

class Class106 implements Class0 {}

class Class107 implements Class0 {}

class Class108 implements Class0 {}

class Class109 implements Class0 {}

class Class110 implements Class0 {}

class Class111 implements Class0 {}

class Class112 implements Class0 {}

class Class113 implements Class0 {}

class Class114 implements Class0 {}

class Class115 implements Class0 {}

class Class116 implements Class0 {}

class Class117 implements Class0 {}

class Class118 implements Class0 {}

class Class119 implements Class0 {}

class Class120 implements Class0 {}

class Class121 implements Class0 {}

class Class122 implements Class0 {}

class Class123 implements Class0 {}

class Class124 implements Class0 {}

class Class125 implements Class0 {}

class Class126 implements Class0 {}

class Class127 implements Class0 {}

class Class128 implements Class0 {}

class Class129 implements Class0 {}

class Class130 implements Class0 {}

class Class131 implements Class0 {}

class Class132 implements Class0 {}

class Class133 implements Class0 {}

class Class134 implements Class0 {}

class Class135 implements Class0 {}

class Class136 implements Class0 {}

class Class137 implements Class0 {}

class Class138 implements Class0 {}

class Class139 implements Class0 {}

class Class140 implements Class0 {}

class Class141 implements Class0 {}

class Class142 implements Class0 {}

class Class143 implements Class0 {}

class Class144 implements Class0 {}

class Class145 implements Class0 {}

class Class146 implements Class0 {}

class Class147 implements Class0 {}

class Class148 implements Class0 {}

class Class149 implements Class0 {}

class Class150 implements Class0 {}

class Class151 implements Class0 {}

class Class152 implements Class0 {}

class Class153 implements Class0 {}

class Class154 implements Class0 {}

class Class155 implements Class0 {}

class Class156 implements Class0 {}

class Class157 implements Class0 {}

class Class158 implements Class0 {}

class Class159 implements Class0 {}

class Class160 implements Class0 {}

class Class161 implements Class0 {}

class Class162 implements Class0 {}

class Class163 implements Class0 {}

class Class164 implements Class0 {}

class Class165 implements Class0 {}

class Class166 implements Class0 {}

class Class167 implements Class0 {}

class Class168 implements Class0 {}

class Class169 implements Class0 {}

class Class170 implements Class0 {}

class Class171 implements Class0 {}

class Class172 implements Class0 {}

class Class173 implements Class0 {}

class Class174 implements Class0 {}

class Class175 implements Class0 {}

class Class176 implements Class0 {}

class Class177 implements Class0 {}

class Class178 implements Class0 {}

class Class179 implements Class0 {}

class Class180 implements Class0 {}

class Class181 implements Class0 {}

class Class182 implements Class0 {}

class Class183 implements Class0 {}

class Class184 implements Class0 {}

class Class185 implements Class0 {}

class Class186 implements Class0 {}

class Class187 implements Class0 {}

class Class188 implements Class0 {}

class Class189 implements Class0 {}

class Class190 implements Class0 {}

class Class191 implements Class0 {}

class Class192 implements Class0 {}

class Class193 implements Class0 {}

class Class194 implements Class0 {}

class Class195 implements Class0 {}

class Class196 implements Class0 {}

class Class197 implements Class0 {}

class Class198 implements Class0 {}

class Class199 implements Class0 {}

class Class200 implements Class0 {}

class Class201 implements Class0 {}

class Class202 implements Class0 {}

class Class203 implements Class0 {}

class Class204 implements Class0 {}

class Class205 implements Class0 {}

class Class206 implements Class0 {}

class Class207 implements Class0 {}

class Class208 implements Class0 {}

class Class209 implements Class0 {}

class Class210 implements Class0 {}

class Class211 implements Class0 {}

class Class212 implements Class0 {}

class Class213 implements Class0 {}

class Class214 implements Class0 {}

class Class215 implements Class0 {}

class Class216 implements Class0 {}

class Class217 implements Class0 {}

class Class218 implements Class0 {}

class Class219 implements Class0 {}

class Class220 implements Class0 {}

class Class221 implements Class0 {}

class Class222 implements Class0 {}

class Class223 implements Class0 {}

class Class224 implements Class0 {}

class Class225 implements Class0 {}

class Class226 implements Class0 {}

class Class227 implements Class0 {}

class Class228 implements Class0 {}

class Class229 implements Class0 {}

class Class230 implements Class0 {}

class Class231 implements Class0 {}

class Class232 implements Class0 {}

class Class233 implements Class0 {}

class Class234 implements Class0 {}

class Class235 implements Class0 {}

class Class236 implements Class0 {}

class Class237 implements Class0 {}

class Class238 implements Class0 {}

class Class239 implements Class0 {}

class Class240 implements Class0 {}

class Class241 implements Class0 {}

class Class242 implements Class0 {}

class Class243 implements Class0 {}

class Class244 implements Class0 {}

class Class245 implements Class0 {}

class Class246 implements Class0 {}

class Class247 implements Class0 {}

class Class248 implements Class0 {}

class Class249 implements Class0 {}

class Class250 implements Class0 {}

class Class251 implements Class0 {}

class Class252 implements Class0 {}

class Class253 implements Class0 {}

class Class254 implements Class0 {}

class Class255 implements Class0 {}

class Class256 implements Class0 {}

class Class257 implements Class0 {}

class Class258 implements Class0 {}

class Class259 implements Class0 {}

class Class260 implements Class0 {}

class Class261 implements Class0 {}

class Class262 implements Class0 {}

class Class263 implements Class0 {}

class Class264 implements Class0 {}

class Class265 implements Class0 {}

class Class266 implements Class0 {}

class Class267 implements Class0 {}

class Class268 implements Class0 {}

class Class269 implements Class0 {}

class Class270 implements Class0 {}

class Class271 implements Class0 {}

class Class272 implements Class0 {}

class Class273 implements Class0 {}

class Class274 implements Class0 {}

class Class275 implements Class0 {}

class Class276 implements Class0 {}

class Class277 implements Class0 {}

class Class278 implements Class0 {}

class Class279 implements Class0 {}

class Class280 implements Class0 {}

class Class281 implements Class0 {}

class Class282 implements Class0 {}

class Class283 implements Class0 {}

class Class284 implements Class0 {}

class Class285 implements Class0 {}

class Class286 implements Class0 {}

class Class287 implements Class0 {}

class Class288 implements Class0 {}

class Class289 implements Class0 {}

class Class290 implements Class0 {}

class Class291 implements Class0 {}

class Class292 implements Class0 {}

class Class293 implements Class0 {}

class Class294 implements Class0 {}

class Class295 implements Class0 {}

class Class296 implements Class0 {}

class Class297 implements Class0 {}

class Class298 implements Class0 {}

class Class299 implements Class0 {}

class Class300 implements Class0 {}

class Class301 implements Class0 {}

class Class302 implements Class0 {}

class Class303 implements Class0 {}

class Class304 implements Class0 {}

class Class305 implements Class0 {}

class Class306 implements Class0 {}

class Class307 implements Class0 {}

class Class308 implements Class0 {}

class Class309 implements Class0 {}

class Class310 implements Class0 {}

class Class311 implements Class0 {}

class Class312 implements Class0 {}

class Class313 implements Class0 {}

class Class314 implements Class0 {}

class Class315 implements Class0 {}

class Class316 implements Class0 {}

class Class317 implements Class0 {}

class Class318 implements Class0 {}

class Class319 implements Class0 {}

class Class320 implements Class0 {}

class Class321 implements Class0 {}

class Class322 implements Class0 {}

class Class323 implements Class0 {}

class Class324 implements Class0 {}

class Class325 implements Class0 {}

class Class326 implements Class0 {}

class Class327 implements Class0 {}

class Class328 implements Class0 {}

class Class329 implements Class0 {}

class Class330 implements Class0 {}

class Class331 implements Class0 {}

class Class332 implements Class0 {}

class Class333 implements Class0 {}

class Class334 implements Class0 {}

class Class335 implements Class0 {}

class Class336 implements Class0 {}

class Class337 implements Class0 {}

class Class338 implements Class0 {}

class Class339 implements Class0 {}

class Class340 implements Class0 {}

class Class341 implements Class0 {}

class Class342 implements Class0 {}

class Class343 implements Class0 {}

class Class344 implements Class0 {}

class Class345 implements Class0 {}

class Class346 implements Class0 {}

class Class347 implements Class0 {}

class Class348 implements Class0 {}

class Class349 implements Class0 {}

class Class350 implements Class0 {}

class Class351 implements Class0 {}

class Class352 implements Class0 {}

class Class353 implements Class0 {}

class Class354 implements Class0 {}

class Class355 implements Class0 {}

class Class356 implements Class0 {}

class Class357 implements Class0 {}

class Class358 implements Class0 {}

class Class359 implements Class0 {}

class Class360 implements Class0 {}

class Class361 implements Class0 {}

class Class362 implements Class0 {}

class Class363 implements Class0 {}

class Class364 implements Class0 {}

class Class365 implements Class0 {}

class Class366 implements Class0 {}

class Class367 implements Class0 {}

class Class368 implements Class0 {}

class Class369 implements Class0 {}

class Class370 implements Class0 {}

class Class371 implements Class0 {}

class Class372 implements Class0 {}

class Class373 implements Class0 {}

class Class374 implements Class0 {}

class Class375 implements Class0 {}

class Class376 implements Class0 {}

class Class377 implements Class0 {}

class Class378 implements Class0 {}

class Class379 implements Class0 {}

class Class380 implements Class0 {}

class Class381 implements Class0 {}

class Class382 implements Class0 {}

class Class383 implements Class0 {}

class Class384 implements Class0 {}

class Class385 implements Class0 {}

class Class386 implements Class0 {}

class Class387 implements Class0 {}

class Class388 implements Class0 {}

class Class389 implements Class0 {}

class Class390 implements Class0 {}

class Class391 implements Class0 {}

class Class392 implements Class0 {}

class Class393 implements Class0 {}

class Class394 implements Class0 {}

class Class395 implements Class0 {}

class Class396 implements Class0 {}

class Class397 implements Class0 {}

class Class398 implements Class0 {}

class Class399 implements Class0 {}

class Class400 implements Class0 {}

class Class401 implements Class0 {}

class Class402 implements Class0 {}

class Class403 implements Class0 {}

class Class404 implements Class0 {}

class Class405 implements Class0 {}

class Class406 implements Class0 {}

class Class407 implements Class0 {}

class Class408 implements Class0 {}

class Class409 implements Class0 {}

class Class410 implements Class0 {}

class Class411 implements Class0 {}

class Class412 implements Class0 {}

class Class413 implements Class0 {}

class Class414 implements Class0 {}

class Class415 implements Class0 {}

class Class416 implements Class0 {}

class Class417 implements Class0 {}

class Class418 implements Class0 {}

class Class419 implements Class0 {}

class Class420 implements Class0 {}

class Class421 implements Class0 {}

class Class422 implements Class0 {}

class Class423 implements Class0 {}

class Class424 implements Class0 {}

class Class425 implements Class0 {}

class Class426 implements Class0 {}

class Class427 implements Class0 {}

class Class428 implements Class0 {}

class Class429 implements Class0 {}

class Class430 implements Class0 {}

class Class431 implements Class0 {}

class Class432 implements Class0 {}

class Class433 implements Class0 {}

class Class434 implements Class0 {}

class Class435 implements Class0 {}

class Class436 implements Class0 {}

class Class437 implements Class0 {}

class Class438 implements Class0 {}

class Class439 implements Class0 {}

class Class440 implements Class0 {}

class Class441 implements Class0 {}

class Class442 implements Class0 {}

class Class443 implements Class0 {}

class Class444 implements Class0 {}

class Class445 implements Class0 {}

class Class446 implements Class0 {}

class Class447 implements Class0 {}

class Class448 implements Class0 {}

class Class449 implements Class0 {}

class Class450 implements Class0 {}

class Class451 implements Class0 {}

class Class452 implements Class0 {}

class Class453 implements Class0 {}

class Class454 implements Class0 {}

class Class455 implements Class0 {}

class Class456 implements Class0 {}

class Class457 implements Class0 {}

class Class458 implements Class0 {}

class Class459 implements Class0 {}

class Class460 implements Class0 {}

class Class461 implements Class0 {}

class Class462 implements Class0 {}

class Class463 implements Class0 {}

class Class464 implements Class0 {}

class Class465 implements Class0 {}

class Class466 implements Class0 {}

class Class467 implements Class0 {}

class Class468 implements Class0 {}

class Class469 implements Class0 {}

class Class470 implements Class0 {}

class Class471 implements Class0 {}

class Class472 implements Class0 {}

class Class473 implements Class0 {}

class Class474 implements Class0 {}

class Class475 implements Class0 {}

class Class476 implements Class0 {}

class Class477 implements Class0 {}

class Class478 implements Class0 {}

class Class479 implements Class0 {}

class Class480 implements Class0 {}

class Class481 implements Class0 {}

class Class482 implements Class0 {}

class Class483 implements Class0 {}

class Class484 implements Class0 {}

class Class485 implements Class0 {}

class Class486 implements Class0 {}

class Class487 implements Class0 {}

class Class488 implements Class0 {}

class Class489 implements Class0 {}

class Class490 implements Class0 {}

class Class491 implements Class0 {}

class Class492 implements Class0 {}

class Class493 implements Class0 {}

class Class494 implements Class0 {}

class Class495 implements Class0 {}

class Class496 implements Class0 {}

class Class497 implements Class0 {}

class Class498 implements Class0 {}

class Class499 implements Class0 {}

class Class500 implements Class0 {}

class Class501 implements Class0 {}

class Class502 implements Class0 {}

class Class503 implements Class0 {}

class Class504 implements Class0 {}

class Class505 implements Class0 {}

class Class506 implements Class0 {}

class Class507 implements Class0 {}

class Class508 implements Class0 {}

class Class509 implements Class0 {}

class Class510 implements Class0 {}

class Class511 implements Class0 {}

class Class512 implements Class0 {}

class Class513 implements Class0 {}

class Class514 implements Class0 {}

class Class515 implements Class0 {}

class Class516 implements Class0 {}

class Class517 implements Class0 {}

class Class518 implements Class0 {}

class Class519 implements Class0 {}

class Class520 implements Class0 {}

class Class521 implements Class0 {}

class Class522 implements Class0 {}

class Class523 implements Class0 {}

class Class524 implements Class0 {}

class Class525 implements Class0 {}

class Class526 implements Class0 {}

class Class527 implements Class0 {}

class Class528 implements Class0 {}

class Class529 implements Class0 {}

class Class530 implements Class0 {}

class Class531 implements Class0 {}

class Class532 implements Class0 {}

class Class533 implements Class0 {}

class Class534 implements Class0 {}

class Class535 implements Class0 {}

class Class536 implements Class0 {}

class Class537 implements Class0 {}

class Class538 implements Class0 {}

class Class539 implements Class0 {}

class Class540 implements Class0 {}

class Class541 implements Class0 {}

class Class542 implements Class0 {}

class Class543 implements Class0 {}

class Class544 implements Class0 {}

class Class545 implements Class0 {}

class Class546 implements Class0 {}

class Class547 implements Class0 {}

class Class548 implements Class0 {}

class Class549 implements Class0 {}

class Class550 implements Class0 {}

class Class551 implements Class0 {}

class Class552 implements Class0 {}

class Class553 implements Class0 {}

class Class554 implements Class0 {}

class Class555 implements Class0 {}

class Class556 implements Class0 {}

class Class557 implements Class0 {}

class Class558 implements Class0 {}

class Class559 implements Class0 {}

class Class560 implements Class0 {}

class Class561 implements Class0 {}

class Class562 implements Class0 {}

class Class563 implements Class0 {}

class Class564 implements Class0 {}

class Class565 implements Class0 {}

class Class566 implements Class0 {}

class Class567 implements Class0 {}

class Class568 implements Class0 {}

class Class569 implements Class0 {}

class Class570 implements Class0 {}

class Class571 implements Class0 {}

class Class572 implements Class0 {}

class Class573 implements Class0 {}

class Class574 implements Class0 {}

class Class575 implements Class0 {}

class Class576 implements Class0 {}

class Class577 implements Class0 {}

class Class578 implements Class0 {}

class Class579 implements Class0 {}

class Class580 implements Class0 {}

class Class581 implements Class0 {}

class Class582 implements Class0 {}

class Class583 implements Class0 {}

class Class584 implements Class0 {}

class Class585 implements Class0 {}

class Class586 implements Class0 {}

class Class587 implements Class0 {}

class Class588 implements Class0 {}

class Class589 implements Class0 {}

class Class590 implements Class0 {}

class Class591 implements Class0 {}

class Class592 implements Class0 {}

class Class593 implements Class0 {}

class Class594 implements Class0 {}

class Class595 implements Class0 {}

class Class596 implements Class0 {}

class Class597 implements Class0 {}

class Class598 implements Class0 {}

class Class599 implements Class0 {}

class Class600 implements Class0 {}

class Class601 implements Class0 {}

class Class602 implements Class0 {}

class Class603 implements Class0 {}

class Class604 implements Class0 {}

class Class605 implements Class0 {}

class Class606 implements Class0 {}

class Class607 implements Class0 {}

class Class608 implements Class0 {}

class Class609 implements Class0 {}

class Class610 implements Class0 {}

class Class611 implements Class0 {}

class Class612 implements Class0 {}

class Class613 implements Class0 {}

class Class614 implements Class0 {}

class Class615 implements Class0 {}

class Class616 implements Class0 {}

class Class617 implements Class0 {}

class Class618 implements Class0 {}

class Class619 implements Class0 {}

class Class620 implements Class0 {}

class Class621 implements Class0 {}

class Class622 implements Class0 {}

class Class623 implements Class0 {}

class Class624 implements Class0 {}

class Class625 implements Class0 {}

class Class626 implements Class0 {}

class Class627 implements Class0 {}

class Class628 implements Class0 {}

class Class629 implements Class0 {}

class Class630 implements Class0 {}

class Class631 implements Class0 {}

class Class632 implements Class0 {}

class Class633 implements Class0 {}

class Class634 implements Class0 {}

class Class635 implements Class0 {}

class Class636 implements Class0 {}

class Class637 implements Class0 {}

class Class638 implements Class0 {}

class Class639 implements Class0 {}

class Class640 implements Class0 {}

class Class641 implements Class0 {}

class Class642 implements Class0 {}

class Class643 implements Class0 {}

class Class644 implements Class0 {}

class Class645 implements Class0 {}

class Class646 implements Class0 {}

class Class647 implements Class0 {}

class Class648 implements Class0 {}

class Class649 implements Class0 {}

class Class650 implements Class0 {}

class Class651 implements Class0 {}

class Class652 implements Class0 {}

class Class653 implements Class0 {}

class Class654 implements Class0 {}

class Class655 implements Class0 {}

class Class656 implements Class0 {}

class Class657 implements Class0 {}

class Class658 implements Class0 {}

class Class659 implements Class0 {}

class Class660 implements Class0 {}

class Class661 implements Class0 {}

class Class662 implements Class0 {}

class Class663 implements Class0 {}

class Class664 implements Class0 {}

class Class665 implements Class0 {}

class Class666 implements Class0 {}

class Class667 implements Class0 {}

class Class668 implements Class0 {}

class Class669 implements Class0 {}

class Class670 implements Class0 {}

class Class671 implements Class0 {}

class Class672 implements Class0 {}

class Class673 implements Class0 {}

class Class674 implements Class0 {}

class Class675 implements Class0 {}

class Class676 implements Class0 {}

class Class677 implements Class0 {}

class Class678 implements Class0 {}

class Class679 implements Class0 {}

class Class680 implements Class0 {}

class Class681 implements Class0 {}

class Class682 implements Class0 {}

class Class683 implements Class0 {}

class Class684 implements Class0 {}

class Class685 implements Class0 {}

class Class686 implements Class0 {}

class Class687 implements Class0 {}

class Class688 implements Class0 {}

class Class689 implements Class0 {}

class Class690 implements Class0 {}

class Class691 implements Class0 {}

class Class692 implements Class0 {}

class Class693 implements Class0 {}

class Class694 implements Class0 {}

class Class695 implements Class0 {}

class Class696 implements Class0 {}

class Class697 implements Class0 {}

class Class698 implements Class0 {}

class Class699 implements Class0 {}

class Class700 implements Class0 {}

class Class701 implements Class0 {}

class Class702 implements Class0 {}

class Class703 implements Class0 {}

class Class704 implements Class0 {}

class Class705 implements Class0 {}

class Class706 implements Class0 {}

class Class707 implements Class0 {}

class Class708 implements Class0 {}

class Class709 implements Class0 {}

class Class710 implements Class0 {}

class Class711 implements Class0 {}

class Class712 implements Class0 {}

class Class713 implements Class0 {}

class Class714 implements Class0 {}

class Class715 implements Class0 {}

class Class716 implements Class0 {}

class Class717 implements Class0 {}

class Class718 implements Class0 {}

class Class719 implements Class0 {}

class Class720 implements Class0 {}

class Class721 implements Class0 {}

class Class722 implements Class0 {}

class Class723 implements Class0 {}

class Class724 implements Class0 {}

class Class725 implements Class0 {}

class Class726 implements Class0 {}

class Class727 implements Class0 {}

class Class728 implements Class0 {}

class Class729 implements Class0 {}

class Class730 implements Class0 {}

class Class731 implements Class0 {}

class Class732 implements Class0 {}

class Class733 implements Class0 {}

class Class734 implements Class0 {}

class Class735 implements Class0 {}

class Class736 implements Class0 {}

class Class737 implements Class0 {}

class Class738 implements Class0 {}

class Class739 implements Class0 {}

class Class740 implements Class0 {}

class Class741 implements Class0 {}

class Class742 implements Class0 {}

class Class743 implements Class0 {}

class Class744 implements Class0 {}

class Class745 implements Class0 {}

class Class746 implements Class0 {}

class Class747 implements Class0 {}

class Class748 implements Class0 {}

class Class749 implements Class0 {}

class Class750 implements Class0 {}

class Class751 implements Class0 {}

class Class752 implements Class0 {}

class Class753 implements Class0 {}

class Class754 implements Class0 {}

class Class755 implements Class0 {}

class Class756 implements Class0 {}

class Class757 implements Class0 {}

class Class758 implements Class0 {}

class Class759 implements Class0 {}

class Class760 implements Class0 {}

class Class761 implements Class0 {}

class Class762 implements Class0 {}

class Class763 implements Class0 {}

class Class764 implements Class0 {}

class Class765 implements Class0 {}

class Class766 implements Class0 {}

class Class767 implements Class0 {}

class Class768 implements Class0 {}

class Class769 implements Class0 {}

class Class770 implements Class0 {}

class Class771 implements Class0 {}

class Class772 implements Class0 {}

class Class773 implements Class0 {}

class Class774 implements Class0 {}

class Class775 implements Class0 {}

class Class776 implements Class0 {}

class Class777 implements Class0 {}

class Class778 implements Class0 {}

class Class779 implements Class0 {}

class Class780 implements Class0 {}

class Class781 implements Class0 {}

class Class782 implements Class0 {}

class Class783 implements Class0 {}

class Class784 implements Class0 {}

class Class785 implements Class0 {}

class Class786 implements Class0 {}

class Class787 implements Class0 {}

class Class788 implements Class0 {}

class Class789 implements Class0 {}

class Class790 implements Class0 {}

class Class791 implements Class0 {}

class Class792 implements Class0 {}

class Class793 implements Class0 {}

class Class794 implements Class0 {}

class Class795 implements Class0 {}

class Class796 implements Class0 {}

class Class797 implements Class0 {}

class Class798 implements Class0 {}

class Class799 implements Class0 {}

class Class800 implements Class0 {}

class Class801 implements Class0 {}

class Class802 implements Class0 {}

class Class803 implements Class0 {}

class Class804 implements Class0 {}

class Class805 implements Class0 {}

class Class806 implements Class0 {}

class Class807 implements Class0 {}

class Class808 implements Class0 {}

class Class809 implements Class0 {}

class Class810 implements Class0 {}

class Class811 implements Class0 {}

class Class812 implements Class0 {}

class Class813 implements Class0 {}

class Class814 implements Class0 {}

class Class815 implements Class0 {}

class Class816 implements Class0 {}

class Class817 implements Class0 {}

class Class818 implements Class0 {}

class Class819 implements Class0 {}

class Class820 implements Class0 {}

class Class821 implements Class0 {}

class Class822 implements Class0 {}

class Class823 implements Class0 {}

class Class824 implements Class0 {}

class Class825 implements Class0 {}

class Class826 implements Class0 {}

class Class827 implements Class0 {}

class Class828 implements Class0 {}

class Class829 implements Class0 {}

class Class830 implements Class0 {}

class Class831 implements Class0 {}

class Class832 implements Class0 {}

class Class833 implements Class0 {}

class Class834 implements Class0 {}

class Class835 implements Class0 {}

class Class836 implements Class0 {}

class Class837 implements Class0 {}

class Class838 implements Class0 {}

class Class839 implements Class0 {}

class Class840 implements Class0 {}

class Class841 implements Class0 {}

class Class842 implements Class0 {}

class Class843 implements Class0 {}

class Class844 implements Class0 {}

class Class845 implements Class0 {}

class Class846 implements Class0 {}

class Class847 implements Class0 {}

class Class848 implements Class0 {}

class Class849 implements Class0 {}

class Class850 implements Class0 {}

class Class851 implements Class0 {}

class Class852 implements Class0 {}

class Class853 implements Class0 {}

class Class854 implements Class0 {}

class Class855 implements Class0 {}

class Class856 implements Class0 {}

class Class857 implements Class0 {}

class Class858 implements Class0 {}

class Class859 implements Class0 {}

class Class860 implements Class0 {}

class Class861 implements Class0 {}

class Class862 implements Class0 {}

class Class863 implements Class0 {}

class Class864 implements Class0 {}

class Class865 implements Class0 {}

class Class866 implements Class0 {}

class Class867 implements Class0 {}

class Class868 implements Class0 {}

class Class869 implements Class0 {}

class Class870 implements Class0 {}

class Class871 implements Class0 {}

class Class872 implements Class0 {}

class Class873 implements Class0 {}

class Class874 implements Class0 {}

class Class875 implements Class0 {}

class Class876 implements Class0 {}

class Class877 implements Class0 {}

class Class878 implements Class0 {}

class Class879 implements Class0 {}

class Class880 implements Class0 {}

class Class881 implements Class0 {}

class Class882 implements Class0 {}

class Class883 implements Class0 {}

class Class884 implements Class0 {}

class Class885 implements Class0 {}

class Class886 implements Class0 {}

class Class887 implements Class0 {}

class Class888 implements Class0 {}

class Class889 implements Class0 {}

class Class890 implements Class0 {}

class Class891 implements Class0 {}

class Class892 implements Class0 {}

class Class893 implements Class0 {}

class Class894 implements Class0 {}

class Class895 implements Class0 {}

class Class896 implements Class0 {}

class Class897 implements Class0 {}

class Class898 implements Class0 {}

class Class899 implements Class0 {}

class Class900 implements Class0 {}

class Class901 implements Class0 {}

class Class902 implements Class0 {}

class Class903 implements Class0 {}

class Class904 implements Class0 {}

class Class905 implements Class0 {}

class Class906 implements Class0 {}

class Class907 implements Class0 {}

class Class908 implements Class0 {}

class Class909 implements Class0 {}

class Class910 implements Class0 {}

class Class911 implements Class0 {}

class Class912 implements Class0 {}

class Class913 implements Class0 {}

class Class914 implements Class0 {}

class Class915 implements Class0 {}

class Class916 implements Class0 {}

class Class917 implements Class0 {}

class Class918 implements Class0 {}

class Class919 implements Class0 {}

class Class920 implements Class0 {}

class Class921 implements Class0 {}

class Class922 implements Class0 {}

class Class923 implements Class0 {}

class Class924 implements Class0 {}

class Class925 implements Class0 {}

class Class926 implements Class0 {}

class Class927 implements Class0 {}

class Class928 implements Class0 {}

class Class929 implements Class0 {}

class Class930 implements Class0 {}

class Class931 implements Class0 {}

class Class932 implements Class0 {}

class Class933 implements Class0 {}

class Class934 implements Class0 {}

class Class935 implements Class0 {}

class Class936 implements Class0 {}

class Class937 implements Class0 {}

class Class938 implements Class0 {}

class Class939 implements Class0 {}

class Class940 implements Class0 {}

class Class941 implements Class0 {}

class Class942 implements Class0 {}

class Class943 implements Class0 {}

class Class944 implements Class0 {}

class Class945 implements Class0 {}

class Class946 implements Class0 {}

class Class947 implements Class0 {}

class Class948 implements Class0 {}

class Class949 implements Class0 {}

class Class950 implements Class0 {}

class Class951 implements Class0 {}

class Class952 implements Class0 {}

class Class953 implements Class0 {}

class Class954 implements Class0 {}

class Class955 implements Class0 {}

class Class956 implements Class0 {}

class Class957 implements Class0 {}

class Class958 implements Class0 {}

class Class959 implements Class0 {}

class Class960 implements Class0 {}

class Class961 implements Class0 {}

class Class962 implements Class0 {}

class Class963 implements Class0 {}

class Class964 implements Class0 {}

class Class965 implements Class0 {}

class Class966 implements Class0 {}

class Class967 implements Class0 {}

class Class968 implements Class0 {}

class Class969 implements Class0 {}

class Class970 implements Class0 {}

class Class971 implements Class0 {}

class Class972 implements Class0 {}

class Class973 implements Class0 {}

class Class974 implements Class0 {}

class Class975 implements Class0 {}

class Class976 implements Class0 {}

class Class977 implements Class0 {}

class Class978 implements Class0 {}

class Class979 implements Class0 {}

class Class980 implements Class0 {}

class Class981 implements Class0 {}

class Class982 implements Class0 {}

class Class983 implements Class0 {}

class Class984 implements Class0 {}

class Class985 implements Class0 {}

class Class986 implements Class0 {}

class Class987 implements Class0 {}

class Class988 implements Class0 {}

class Class989 implements Class0 {}

class Class990 implements Class0 {}

class Class991 implements Class0 {}

class Class992 implements Class0 {}

class Class993 implements Class0 {}

class Class994 implements Class0 {}

class Class995 implements Class0 {}

class Class996 implements Class0 {}

class Class997 implements Class0 {}

class Class998 implements Class0 {}

class Class999 implements Class0 {}

B: 1000 classes with no parent

dart big_disconnected.dart 0.51s user 0.17s system 141% cpu 0.480 total

big_disconnected.dart
void main() {}

class Class0 {}

class Class1 {}

class Class2 {}

class Class3 {}

class Class4 {}

class Class5 {}

class Class6 {}

class Class7 {}

class Class8 {}

class Class9 {}

class Class10 {}

class Class11 {}

class Class12 {}

class Class13 {}

class Class14 {}

class Class15 {}

class Class16 {}

class Class17 {}

class Class18 {}

class Class19 {}

class Class20 {}

class Class21 {}

class Class22 {}

class Class23 {}

class Class24 {}

class Class25 {}

class Class26 {}

class Class27 {}

class Class28 {}

class Class29 {}

class Class30 {}

class Class31 {}

class Class32 {}

class Class33 {}

class Class34 {}

class Class35 {}

class Class36 {}

class Class37 {}

class Class38 {}

class Class39 {}

class Class40 {}

class Class41 {}

class Class42 {}

class Class43 {}

class Class44 {}

class Class45 {}

class Class46 {}

class Class47 {}

class Class48 {}

class Class49 {}

class Class50 {}

class Class51 {}

class Class52 {}

class Class53 {}

class Class54 {}

class Class55 {}

class Class56 {}

class Class57 {}

class Class58 {}

class Class59 {}

class Class60 {}

class Class61 {}

class Class62 {}

class Class63 {}

class Class64 {}

class Class65 {}

class Class66 {}

class Class67 {}

class Class68 {}

class Class69 {}

class Class70 {}

class Class71 {}

class Class72 {}

class Class73 {}

class Class74 {}

class Class75 {}

class Class76 {}

class Class77 {}

class Class78 {}

class Class79 {}

class Class80 {}

class Class81 {}

class Class82 {}

class Class83 {}

class Class84 {}

class Class85 {}

class Class86 {}

class Class87 {}

class Class88 {}

class Class89 {}

class Class90 {}

class Class91 {}

class Class92 {}

class Class93 {}

class Class94 {}

class Class95 {}

class Class96 {}

class Class97 {}

class Class98 {}

class Class99 {}

class Class100 {}

class Class101 {}

class Class102 {}

class Class103 {}

class Class104 {}

class Class105 {}

class Class106 {}

class Class107 {}

class Class108 {}

class Class109 {}

class Class110 {}

class Class111 {}

class Class112 {}

class Class113 {}

class Class114 {}

class Class115 {}

class Class116 {}

class Class117 {}

class Class118 {}

class Class119 {}

class Class120 {}

class Class121 {}

class Class122 {}

class Class123 {}

class Class124 {}

class Class125 {}

class Class126 {}

class Class127 {}

class Class128 {}

class Class129 {}

class Class130 {}

class Class131 {}

class Class132 {}

class Class133 {}

class Class134 {}

class Class135 {}

class Class136 {}

class Class137 {}

class Class138 {}

class Class139 {}

class Class140 {}

class Class141 {}

class Class142 {}

class Class143 {}

class Class144 {}

class Class145 {}

class Class146 {}

class Class147 {}

class Class148 {}

class Class149 {}

class Class150 {}

class Class151 {}

class Class152 {}

class Class153 {}

class Class154 {}

class Class155 {}

class Class156 {}

class Class157 {}

class Class158 {}

class Class159 {}

class Class160 {}

class Class161 {}

class Class162 {}

class Class163 {}

class Class164 {}

class Class165 {}

class Class166 {}

class Class167 {}

class Class168 {}

class Class169 {}

class Class170 {}

class Class171 {}

class Class172 {}

class Class173 {}

class Class174 {}

class Class175 {}

class Class176 {}

class Class177 {}

class Class178 {}

class Class179 {}

class Class180 {}

class Class181 {}

class Class182 {}

class Class183 {}

class Class184 {}

class Class185 {}

class Class186 {}

class Class187 {}

class Class188 {}

class Class189 {}

class Class190 {}

class Class191 {}

class Class192 {}

class Class193 {}

class Class194 {}

class Class195 {}

class Class196 {}

class Class197 {}

class Class198 {}

class Class199 {}

class Class200 {}

class Class201 {}

class Class202 {}

class Class203 {}

class Class204 {}

class Class205 {}

class Class206 {}

class Class207 {}

class Class208 {}

class Class209 {}

class Class210 {}

class Class211 {}

class Class212 {}

class Class213 {}

class Class214 {}

class Class215 {}

class Class216 {}

class Class217 {}

class Class218 {}

class Class219 {}

class Class220 {}

class Class221 {}

class Class222 {}

class Class223 {}

class Class224 {}

class Class225 {}

class Class226 {}

class Class227 {}

class Class228 {}

class Class229 {}

class Class230 {}

class Class231 {}

class Class232 {}

class Class233 {}

class Class234 {}

class Class235 {}

class Class236 {}

class Class237 {}

class Class238 {}

class Class239 {}

class Class240 {}

class Class241 {}

class Class242 {}

class Class243 {}

class Class244 {}

class Class245 {}

class Class246 {}

class Class247 {}

class Class248 {}

class Class249 {}

class Class250 {}

class Class251 {}

class Class252 {}

class Class253 {}

class Class254 {}

class Class255 {}

class Class256 {}

class Class257 {}

class Class258 {}

class Class259 {}

class Class260 {}

class Class261 {}

class Class262 {}

class Class263 {}

class Class264 {}

class Class265 {}

class Class266 {}

class Class267 {}

class Class268 {}

class Class269 {}

class Class270 {}

class Class271 {}

class Class272 {}

class Class273 {}

class Class274 {}

class Class275 {}

class Class276 {}

class Class277 {}

class Class278 {}

class Class279 {}

class Class280 {}

class Class281 {}

class Class282 {}

class Class283 {}

class Class284 {}

class Class285 {}

class Class286 {}

class Class287 {}

class Class288 {}

class Class289 {}

class Class290 {}

class Class291 {}

class Class292 {}

class Class293 {}

class Class294 {}

class Class295 {}

class Class296 {}

class Class297 {}

class Class298 {}

class Class299 {}

class Class300 {}

class Class301 {}

class Class302 {}

class Class303 {}

class Class304 {}

class Class305 {}

class Class306 {}

class Class307 {}

class Class308 {}

class Class309 {}

class Class310 {}

class Class311 {}

class Class312 {}

class Class313 {}

class Class314 {}

class Class315 {}

class Class316 {}

class Class317 {}

class Class318 {}

class Class319 {}

class Class320 {}

class Class321 {}

class Class322 {}

class Class323 {}

class Class324 {}

class Class325 {}

class Class326 {}

class Class327 {}

class Class328 {}

class Class329 {}

class Class330 {}

class Class331 {}

class Class332 {}

class Class333 {}

class Class334 {}

class Class335 {}

class Class336 {}

class Class337 {}

class Class338 {}

class Class339 {}

class Class340 {}

class Class341 {}

class Class342 {}

class Class343 {}

class Class344 {}

class Class345 {}

class Class346 {}

class Class347 {}

class Class348 {}

class Class349 {}

class Class350 {}

class Class351 {}

class Class352 {}

class Class353 {}

class Class354 {}

class Class355 {}

class Class356 {}

class Class357 {}

class Class358 {}

class Class359 {}

class Class360 {}

class Class361 {}

class Class362 {}

class Class363 {}

class Class364 {}

class Class365 {}

class Class366 {}

class Class367 {}

class Class368 {}

class Class369 {}

class Class370 {}

class Class371 {}

class Class372 {}

class Class373 {}

class Class374 {}

class Class375 {}

class Class376 {}

class Class377 {}

class Class378 {}

class Class379 {}

class Class380 {}

class Class381 {}

class Class382 {}

class Class383 {}

class Class384 {}

class Class385 {}

class Class386 {}

class Class387 {}

class Class388 {}

class Class389 {}

class Class390 {}

class Class391 {}

class Class392 {}

class Class393 {}

class Class394 {}

class Class395 {}

class Class396 {}

class Class397 {}

class Class398 {}

class Class399 {}

class Class400 {}

class Class401 {}

class Class402 {}

class Class403 {}

class Class404 {}

class Class405 {}

class Class406 {}

class Class407 {}

class Class408 {}

class Class409 {}

class Class410 {}

class Class411 {}

class Class412 {}

class Class413 {}

class Class414 {}

class Class415 {}

class Class416 {}

class Class417 {}

class Class418 {}

class Class419 {}

class Class420 {}

class Class421 {}

class Class422 {}

class Class423 {}

class Class424 {}

class Class425 {}

class Class426 {}

class Class427 {}

class Class428 {}

class Class429 {}

class Class430 {}

class Class431 {}

class Class432 {}

class Class433 {}

class Class434 {}

class Class435 {}

class Class436 {}

class Class437 {}

class Class438 {}

class Class439 {}

class Class440 {}

class Class441 {}

class Class442 {}

class Class443 {}

class Class444 {}

class Class445 {}

class Class446 {}

class Class447 {}

class Class448 {}

class Class449 {}

class Class450 {}

class Class451 {}

class Class452 {}

class Class453 {}

class Class454 {}

class Class455 {}

class Class456 {}

class Class457 {}

class Class458 {}

class Class459 {}

class Class460 {}

class Class461 {}

class Class462 {}

class Class463 {}

class Class464 {}

class Class465 {}

class Class466 {}

class Class467 {}

class Class468 {}

class Class469 {}

class Class470 {}

class Class471 {}

class Class472 {}

class Class473 {}

class Class474 {}

class Class475 {}

class Class476 {}

class Class477 {}

class Class478 {}

class Class479 {}

class Class480 {}

class Class481 {}

class Class482 {}

class Class483 {}

class Class484 {}

class Class485 {}

class Class486 {}

class Class487 {}

class Class488 {}

class Class489 {}

class Class490 {}

class Class491 {}

class Class492 {}

class Class493 {}

class Class494 {}

class Class495 {}

class Class496 {}

class Class497 {}

class Class498 {}

class Class499 {}

class Class500 {}

class Class501 {}

class Class502 {}

class Class503 {}

class Class504 {}

class Class505 {}

class Class506 {}

class Class507 {}

class Class508 {}

class Class509 {}

class Class510 {}

class Class511 {}

class Class512 {}

class Class513 {}

class Class514 {}

class Class515 {}

class Class516 {}

class Class517 {}

class Class518 {}

class Class519 {}

class Class520 {}

class Class521 {}

class Class522 {}

class Class523 {}

class Class524 {}

class Class525 {}

class Class526 {}

class Class527 {}

class Class528 {}

class Class529 {}

class Class530 {}

class Class531 {}

class Class532 {}

class Class533 {}

class Class534 {}

class Class535 {}

class Class536 {}

class Class537 {}

class Class538 {}

class Class539 {}

class Class540 {}

class Class541 {}

class Class542 {}

class Class543 {}

class Class544 {}

class Class545 {}

class Class546 {}

class Class547 {}

class Class548 {}

class Class549 {}

class Class550 {}

class Class551 {}

class Class552 {}

class Class553 {}

class Class554 {}

class Class555 {}

class Class556 {}

class Class557 {}

class Class558 {}

class Class559 {}

class Class560 {}

class Class561 {}

class Class562 {}

class Class563 {}

class Class564 {}

class Class565 {}

class Class566 {}

class Class567 {}

class Class568 {}

class Class569 {}

class Class570 {}

class Class571 {}

class Class572 {}

class Class573 {}

class Class574 {}

class Class575 {}

class Class576 {}

class Class577 {}

class Class578 {}

class Class579 {}

class Class580 {}

class Class581 {}

class Class582 {}

class Class583 {}

class Class584 {}

class Class585 {}

class Class586 {}

class Class587 {}

class Class588 {}

class Class589 {}

class Class590 {}

class Class591 {}

class Class592 {}

class Class593 {}

class Class594 {}

class Class595 {}

class Class596 {}

class Class597 {}

class Class598 {}

class Class599 {}

class Class600 {}

class Class601 {}

class Class602 {}

class Class603 {}

class Class604 {}

class Class605 {}

class Class606 {}

class Class607 {}

class Class608 {}

class Class609 {}

class Class610 {}

class Class611 {}

class Class612 {}

class Class613 {}

class Class614 {}

class Class615 {}

class Class616 {}

class Class617 {}

class Class618 {}

class Class619 {}

class Class620 {}

class Class621 {}

class Class622 {}

class Class623 {}

class Class624 {}

class Class625 {}

class Class626 {}

class Class627 {}

class Class628 {}

class Class629 {}

class Class630 {}

class Class631 {}

class Class632 {}

class Class633 {}

class Class634 {}

class Class635 {}

class Class636 {}

class Class637 {}

class Class638 {}

class Class639 {}

class Class640 {}

class Class641 {}

class Class642 {}

class Class643 {}

class Class644 {}

class Class645 {}

class Class646 {}

class Class647 {}

class Class648 {}

class Class649 {}

class Class650 {}

class Class651 {}

class Class652 {}

class Class653 {}

class Class654 {}

class Class655 {}

class Class656 {}

class Class657 {}

class Class658 {}

class Class659 {}

class Class660 {}

class Class661 {}

class Class662 {}

class Class663 {}

class Class664 {}

class Class665 {}

class Class666 {}

class Class667 {}

class Class668 {}

class Class669 {}

class Class670 {}

class Class671 {}

class Class672 {}

class Class673 {}

class Class674 {}

class Class675 {}

class Class676 {}

class Class677 {}

class Class678 {}

class Class679 {}

class Class680 {}

class Class681 {}

class Class682 {}

class Class683 {}

class Class684 {}

class Class685 {}

class Class686 {}

class Class687 {}

class Class688 {}

class Class689 {}

class Class690 {}

class Class691 {}

class Class692 {}

class Class693 {}

class Class694 {}

class Class695 {}

class Class696 {}

class Class697 {}

class Class698 {}

class Class699 {}

class Class700 {}

class Class701 {}

class Class702 {}

class Class703 {}

class Class704 {}

class Class705 {}

class Class706 {}

class Class707 {}

class Class708 {}

class Class709 {}

class Class710 {}

class Class711 {}

class Class712 {}

class Class713 {}

class Class714 {}

class Class715 {}

class Class716 {}

class Class717 {}

class Class718 {}

class Class719 {}

class Class720 {}

class Class721 {}

class Class722 {}

class Class723 {}

class Class724 {}

class Class725 {}

class Class726 {}

class Class727 {}

class Class728 {}

class Class729 {}

class Class730 {}

class Class731 {}

class Class732 {}

class Class733 {}

class Class734 {}

class Class735 {}

class Class736 {}

class Class737 {}

class Class738 {}

class Class739 {}

class Class740 {}

class Class741 {}

class Class742 {}

class Class743 {}

class Class744 {}

class Class745 {}

class Class746 {}

class Class747 {}

class Class748 {}

class Class749 {}

class Class750 {}

class Class751 {}

class Class752 {}

class Class753 {}

class Class754 {}

class Class755 {}

class Class756 {}

class Class757 {}

class Class758 {}

class Class759 {}

class Class760 {}

class Class761 {}

class Class762 {}

class Class763 {}

class Class764 {}

class Class765 {}

class Class766 {}

class Class767 {}

class Class768 {}

class Class769 {}

class Class770 {}

class Class771 {}

class Class772 {}

class Class773 {}

class Class774 {}

class Class775 {}

class Class776 {}

class Class777 {}

class Class778 {}

class Class779 {}

class Class780 {}

class Class781 {}

class Class782 {}

class Class783 {}

class Class784 {}

class Class785 {}

class Class786 {}

class Class787 {}

class Class788 {}

class Class789 {}

class Class790 {}

class Class791 {}

class Class792 {}

class Class793 {}

class Class794 {}

class Class795 {}

class Class796 {}

class Class797 {}

class Class798 {}

class Class799 {}

class Class800 {}

class Class801 {}

class Class802 {}

class Class803 {}

class Class804 {}

class Class805 {}

class Class806 {}

class Class807 {}

class Class808 {}

class Class809 {}

class Class810 {}

class Class811 {}

class Class812 {}

class Class813 {}

class Class814 {}

class Class815 {}

class Class816 {}

class Class817 {}

class Class818 {}

class Class819 {}

class Class820 {}

class Class821 {}

class Class822 {}

class Class823 {}

class Class824 {}

class Class825 {}

class Class826 {}

class Class827 {}

class Class828 {}

class Class829 {}

class Class830 {}

class Class831 {}

class Class832 {}

class Class833 {}

class Class834 {}

class Class835 {}

class Class836 {}

class Class837 {}

class Class838 {}

class Class839 {}

class Class840 {}

class Class841 {}

class Class842 {}

class Class843 {}

class Class844 {}

class Class845 {}

class Class846 {}

class Class847 {}

class Class848 {}

class Class849 {}

class Class850 {}

class Class851 {}

class Class852 {}

class Class853 {}

class Class854 {}

class Class855 {}

class Class856 {}

class Class857 {}

class Class858 {}

class Class859 {}

class Class860 {}

class Class861 {}

class Class862 {}

class Class863 {}

class Class864 {}

class Class865 {}

class Class866 {}

class Class867 {}

class Class868 {}

class Class869 {}

class Class870 {}

class Class871 {}

class Class872 {}

class Class873 {}

class Class874 {}

class Class875 {}

class Class876 {}

class Class877 {}

class Class878 {}

class Class879 {}

class Class880 {}

class Class881 {}

class Class882 {}

class Class883 {}

class Class884 {}

class Class885 {}

class Class886 {}

class Class887 {}

class Class888 {}

class Class889 {}

class Class890 {}

class Class891 {}

class Class892 {}

class Class893 {}

class Class894 {}

class Class895 {}

class Class896 {}

class Class897 {}

class Class898 {}

class Class899 {}

class Class900 {}

class Class901 {}

class Class902 {}

class Class903 {}

class Class904 {}

class Class905 {}

class Class906 {}

class Class907 {}

class Class908 {}

class Class909 {}

class Class910 {}

class Class911 {}

class Class912 {}

class Class913 {}

class Class914 {}

class Class915 {}

class Class916 {}

class Class917 {}

class Class918 {}

class Class919 {}

class Class920 {}

class Class921 {}

class Class922 {}

class Class923 {}

class Class924 {}

class Class925 {}

class Class926 {}

class Class927 {}

class Class928 {}

class Class929 {}

class Class930 {}

class Class931 {}

class Class932 {}

class Class933 {}

class Class934 {}

class Class935 {}

class Class936 {}

class Class937 {}

class Class938 {}

class Class939 {}

class Class940 {}

class Class941 {}

class Class942 {}

class Class943 {}

class Class944 {}

class Class945 {}

class Class946 {}

class Class947 {}

class Class948 {}

class Class949 {}

class Class950 {}

class Class951 {}

class Class952 {}

class Class953 {}

class Class954 {}

class Class955 {}

class Class956 {}

class Class957 {}

class Class958 {}

class Class959 {}

class Class960 {}

class Class961 {}

class Class962 {}

class Class963 {}

class Class964 {}

class Class965 {}

class Class966 {}

class Class967 {}

class Class968 {}

class Class969 {}

class Class970 {}

class Class971 {}

class Class972 {}

class Class973 {}

class Class974 {}

class Class975 {}

class Class976 {}

class Class977 {}

class Class978 {}

class Class979 {}

class Class980 {}

class Class981 {}

class Class982 {}

class Class983 {}

class Class984 {}

class Class985 {}

class Class986 {}

class Class987 {}

class Class988 {}

class Class989 {}

class Class990 {}

class Class991 {}

class Class992 {}

class Class993 {}

class Class994 {}

class Class995 {}

class Class996 {}

class Class997 {}

class Class998 {}

class Class999 {}

C: 1000 classes linked-list-style

dart big_deep.dart 6.21s user 0.21s system 104% cpu 6.156 total

big_deep.dart
void main() {}

class Class0 {}

class Class1 implements Class0 {}

class Class2 implements Class1 {}

class Class3 implements Class2 {}

class Class4 implements Class3 {}

class Class5 implements Class4 {}

class Class6 implements Class5 {}

class Class7 implements Class6 {}

class Class8 implements Class7 {}

class Class9 implements Class8 {}

class Class10 implements Class9 {}

class Class11 implements Class10 {}

class Class12 implements Class11 {}

class Class13 implements Class12 {}

class Class14 implements Class13 {}

class Class15 implements Class14 {}

class Class16 implements Class15 {}

class Class17 implements Class16 {}

class Class18 implements Class17 {}

class Class19 implements Class18 {}

class Class20 implements Class19 {}

class Class21 implements Class20 {}

class Class22 implements Class21 {}

class Class23 implements Class22 {}

class Class24 implements Class23 {}

class Class25 implements Class24 {}

class Class26 implements Class25 {}

class Class27 implements Class26 {}

class Class28 implements Class27 {}

class Class29 implements Class28 {}

class Class30 implements Class29 {}

class Class31 implements Class30 {}

class Class32 implements Class31 {}

class Class33 implements Class32 {}

class Class34 implements Class33 {}

class Class35 implements Class34 {}

class Class36 implements Class35 {}

class Class37 implements Class36 {}

class Class38 implements Class37 {}

class Class39 implements Class38 {}

class Class40 implements Class39 {}

class Class41 implements Class40 {}

class Class42 implements Class41 {}

class Class43 implements Class42 {}

class Class44 implements Class43 {}

class Class45 implements Class44 {}

class Class46 implements Class45 {}

class Class47 implements Class46 {}

class Class48 implements Class47 {}

class Class49 implements Class48 {}

class Class50 implements Class49 {}

class Class51 implements Class50 {}

class Class52 implements Class51 {}

class Class53 implements Class52 {}

class Class54 implements Class53 {}

class Class55 implements Class54 {}

class Class56 implements Class55 {}

class Class57 implements Class56 {}

class Class58 implements Class57 {}

class Class59 implements Class58 {}

class Class60 implements Class59 {}

class Class61 implements Class60 {}

class Class62 implements Class61 {}

class Class63 implements Class62 {}

class Class64 implements Class63 {}

class Class65 implements Class64 {}

class Class66 implements Class65 {}

class Class67 implements Class66 {}

class Class68 implements Class67 {}

class Class69 implements Class68 {}

class Class70 implements Class69 {}

class Class71 implements Class70 {}

class Class72 implements Class71 {}

class Class73 implements Class72 {}

class Class74 implements Class73 {}

class Class75 implements Class74 {}

class Class76 implements Class75 {}

class Class77 implements Class76 {}

class Class78 implements Class77 {}

class Class79 implements Class78 {}

class Class80 implements Class79 {}

class Class81 implements Class80 {}

class Class82 implements Class81 {}

class Class83 implements Class82 {}

class Class84 implements Class83 {}

class Class85 implements Class84 {}

class Class86 implements Class85 {}

class Class87 implements Class86 {}

class Class88 implements Class87 {}

class Class89 implements Class88 {}

class Class90 implements Class89 {}

class Class91 implements Class90 {}

class Class92 implements Class91 {}

class Class93 implements Class92 {}

class Class94 implements Class93 {}

class Class95 implements Class94 {}

class Class96 implements Class95 {}

class Class97 implements Class96 {}

class Class98 implements Class97 {}

class Class99 implements Class98 {}

class Class100 implements Class99 {}

class Class101 implements Class100 {}

class Class102 implements Class101 {}

class Class103 implements Class102 {}

class Class104 implements Class103 {}

class Class105 implements Class104 {}

class Class106 implements Class105 {}

class Class107 implements Class106 {}

class Class108 implements Class107 {}

class Class109 implements Class108 {}

class Class110 implements Class109 {}

class Class111 implements Class110 {}

class Class112 implements Class111 {}

class Class113 implements Class112 {}

class Class114 implements Class113 {}

class Class115 implements Class114 {}

class Class116 implements Class115 {}

class Class117 implements Class116 {}

class Class118 implements Class117 {}

class Class119 implements Class118 {}

class Class120 implements Class119 {}

class Class121 implements Class120 {}

class Class122 implements Class121 {}

class Class123 implements Class122 {}

class Class124 implements Class123 {}

class Class125 implements Class124 {}

class Class126 implements Class125 {}

class Class127 implements Class126 {}

class Class128 implements Class127 {}

class Class129 implements Class128 {}

class Class130 implements Class129 {}

class Class131 implements Class130 {}

class Class132 implements Class131 {}

class Class133 implements Class132 {}

class Class134 implements Class133 {}

class Class135 implements Class134 {}

class Class136 implements Class135 {}

class Class137 implements Class136 {}

class Class138 implements Class137 {}

class Class139 implements Class138 {}

class Class140 implements Class139 {}

class Class141 implements Class140 {}

class Class142 implements Class141 {}

class Class143 implements Class142 {}

class Class144 implements Class143 {}

class Class145 implements Class144 {}

class Class146 implements Class145 {}

class Class147 implements Class146 {}

class Class148 implements Class147 {}

class Class149 implements Class148 {}

class Class150 implements Class149 {}

class Class151 implements Class150 {}

class Class152 implements Class151 {}

class Class153 implements Class152 {}

class Class154 implements Class153 {}

class Class155 implements Class154 {}

class Class156 implements Class155 {}

class Class157 implements Class156 {}

class Class158 implements Class157 {}

class Class159 implements Class158 {}

class Class160 implements Class159 {}

class Class161 implements Class160 {}

class Class162 implements Class161 {}

class Class163 implements Class162 {}

class Class164 implements Class163 {}

class Class165 implements Class164 {}

class Class166 implements Class165 {}

class Class167 implements Class166 {}

class Class168 implements Class167 {}

class Class169 implements Class168 {}

class Class170 implements Class169 {}

class Class171 implements Class170 {}

class Class172 implements Class171 {}

class Class173 implements Class172 {}

class Class174 implements Class173 {}

class Class175 implements Class174 {}

class Class176 implements Class175 {}

class Class177 implements Class176 {}

class Class178 implements Class177 {}

class Class179 implements Class178 {}

class Class180 implements Class179 {}

class Class181 implements Class180 {}

class Class182 implements Class181 {}

class Class183 implements Class182 {}

class Class184 implements Class183 {}

class Class185 implements Class184 {}

class Class186 implements Class185 {}

class Class187 implements Class186 {}

class Class188 implements Class187 {}

class Class189 implements Class188 {}

class Class190 implements Class189 {}

class Class191 implements Class190 {}

class Class192 implements Class191 {}

class Class193 implements Class192 {}

class Class194 implements Class193 {}

class Class195 implements Class194 {}

class Class196 implements Class195 {}

class Class197 implements Class196 {}

class Class198 implements Class197 {}

class Class199 implements Class198 {}

class Class200 implements Class199 {}

class Class201 implements Class200 {}

class Class202 implements Class201 {}

class Class203 implements Class202 {}

class Class204 implements Class203 {}

class Class205 implements Class204 {}

class Class206 implements Class205 {}

class Class207 implements Class206 {}

class Class208 implements Class207 {}

class Class209 implements Class208 {}

class Class210 implements Class209 {}

class Class211 implements Class210 {}

class Class212 implements Class211 {}

class Class213 implements Class212 {}

class Class214 implements Class213 {}

class Class215 implements Class214 {}

class Class216 implements Class215 {}

class Class217 implements Class216 {}

class Class218 implements Class217 {}

class Class219 implements Class218 {}

class Class220 implements Class219 {}

class Class221 implements Class220 {}

class Class222 implements Class221 {}

class Class223 implements Class222 {}

class Class224 implements Class223 {}

class Class225 implements Class224 {}

class Class226 implements Class225 {}

class Class227 implements Class226 {}

class Class228 implements Class227 {}

class Class229 implements Class228 {}

class Class230 implements Class229 {}

class Class231 implements Class230 {}

class Class232 implements Class231 {}

class Class233 implements Class232 {}

class Class234 implements Class233 {}

class Class235 implements Class234 {}

class Class236 implements Class235 {}

class Class237 implements Class236 {}

class Class238 implements Class237 {}

class Class239 implements Class238 {}

class Class240 implements Class239 {}

class Class241 implements Class240 {}

class Class242 implements Class241 {}

class Class243 implements Class242 {}

class Class244 implements Class243 {}

class Class245 implements Class244 {}

class Class246 implements Class245 {}

class Class247 implements Class246 {}

class Class248 implements Class247 {}

class Class249 implements Class248 {}

class Class250 implements Class249 {}

class Class251 implements Class250 {}

class Class252 implements Class251 {}

class Class253 implements Class252 {}

class Class254 implements Class253 {}

class Class255 implements Class254 {}

class Class256 implements Class255 {}

class Class257 implements Class256 {}

class Class258 implements Class257 {}

class Class259 implements Class258 {}

class Class260 implements Class259 {}

class Class261 implements Class260 {}

class Class262 implements Class261 {}

class Class263 implements Class262 {}

class Class264 implements Class263 {}

class Class265 implements Class264 {}

class Class266 implements Class265 {}

class Class267 implements Class266 {}

class Class268 implements Class267 {}

class Class269 implements Class268 {}

class Class270 implements Class269 {}

class Class271 implements Class270 {}

class Class272 implements Class271 {}

class Class273 implements Class272 {}

class Class274 implements Class273 {}

class Class275 implements Class274 {}

class Class276 implements Class275 {}

class Class277 implements Class276 {}

class Class278 implements Class277 {}

class Class279 implements Class278 {}

class Class280 implements Class279 {}

class Class281 implements Class280 {}

class Class282 implements Class281 {}

class Class283 implements Class282 {}

class Class284 implements Class283 {}

class Class285 implements Class284 {}

class Class286 implements Class285 {}

class Class287 implements Class286 {}

class Class288 implements Class287 {}

class Class289 implements Class288 {}

class Class290 implements Class289 {}

class Class291 implements Class290 {}

class Class292 implements Class291 {}

class Class293 implements Class292 {}

class Class294 implements Class293 {}

class Class295 implements Class294 {}

class Class296 implements Class295 {}

class Class297 implements Class296 {}

class Class298 implements Class297 {}

class Class299 implements Class298 {}

class Class300 implements Class299 {}

class Class301 implements Class300 {}

class Class302 implements Class301 {}

class Class303 implements Class302 {}

class Class304 implements Class303 {}

class Class305 implements Class304 {}

class Class306 implements Class305 {}

class Class307 implements Class306 {}

class Class308 implements Class307 {}

class Class309 implements Class308 {}

class Class310 implements Class309 {}

class Class311 implements Class310 {}

class Class312 implements Class311 {}

class Class313 implements Class312 {}

class Class314 implements Class313 {}

class Class315 implements Class314 {}

class Class316 implements Class315 {}

class Class317 implements Class316 {}

class Class318 implements Class317 {}

class Class319 implements Class318 {}

class Class320 implements Class319 {}

class Class321 implements Class320 {}

class Class322 implements Class321 {}

class Class323 implements Class322 {}

class Class324 implements Class323 {}

class Class325 implements Class324 {}

class Class326 implements Class325 {}

class Class327 implements Class326 {}

class Class328 implements Class327 {}

class Class329 implements Class328 {}

class Class330 implements Class329 {}

class Class331 implements Class330 {}

class Class332 implements Class331 {}

class Class333 implements Class332 {}

class Class334 implements Class333 {}

class Class335 implements Class334 {}

class Class336 implements Class335 {}

class Class337 implements Class336 {}

class Class338 implements Class337 {}

class Class339 implements Class338 {}

class Class340 implements Class339 {}

class Class341 implements Class340 {}

class Class342 implements Class341 {}

class Class343 implements Class342 {}

class Class344 implements Class343 {}

class Class345 implements Class344 {}

class Class346 implements Class345 {}

class Class347 implements Class346 {}

class Class348 implements Class347 {}

class Class349 implements Class348 {}

class Class350 implements Class349 {}

class Class351 implements Class350 {}

class Class352 implements Class351 {}

class Class353 implements Class352 {}

class Class354 implements Class353 {}

class Class355 implements Class354 {}

class Class356 implements Class355 {}

class Class357 implements Class356 {}

class Class358 implements Class357 {}

class Class359 implements Class358 {}

class Class360 implements Class359 {}

class Class361 implements Class360 {}

class Class362 implements Class361 {}

class Class363 implements Class362 {}

class Class364 implements Class363 {}

class Class365 implements Class364 {}

class Class366 implements Class365 {}

class Class367 implements Class366 {}

class Class368 implements Class367 {}

class Class369 implements Class368 {}

class Class370 implements Class369 {}

class Class371 implements Class370 {}

class Class372 implements Class371 {}

class Class373 implements Class372 {}

class Class374 implements Class373 {}

class Class375 implements Class374 {}

class Class376 implements Class375 {}

class Class377 implements Class376 {}

class Class378 implements Class377 {}

class Class379 implements Class378 {}

class Class380 implements Class379 {}

class Class381 implements Class380 {}

class Class382 implements Class381 {}

class Class383 implements Class382 {}

class Class384 implements Class383 {}

class Class385 implements Class384 {}

class Class386 implements Class385 {}

class Class387 implements Class386 {}

class Class388 implements Class387 {}

class Class389 implements Class388 {}

class Class390 implements Class389 {}

class Class391 implements Class390 {}

class Class392 implements Class391 {}

class Class393 implements Class392 {}

class Class394 implements Class393 {}

class Class395 implements Class394 {}

class Class396 implements Class395 {}

class Class397 implements Class396 {}

class Class398 implements Class397 {}

class Class399 implements Class398 {}

class Class400 implements Class399 {}

class Class401 implements Class400 {}

class Class402 implements Class401 {}

class Class403 implements Class402 {}

class Class404 implements Class403 {}

class Class405 implements Class404 {}

class Class406 implements Class405 {}

class Class407 implements Class406 {}

class Class408 implements Class407 {}

class Class409 implements Class408 {}

class Class410 implements Class409 {}

class Class411 implements Class410 {}

class Class412 implements Class411 {}

class Class413 implements Class412 {}

class Class414 implements Class413 {}

class Class415 implements Class414 {}

class Class416 implements Class415 {}

class Class417 implements Class416 {}

class Class418 implements Class417 {}

class Class419 implements Class418 {}

class Class420 implements Class419 {}

class Class421 implements Class420 {}

class Class422 implements Class421 {}

class Class423 implements Class422 {}

class Class424 implements Class423 {}

class Class425 implements Class424 {}

class Class426 implements Class425 {}

class Class427 implements Class426 {}

class Class428 implements Class427 {}

class Class429 implements Class428 {}

class Class430 implements Class429 {}

class Class431 implements Class430 {}

class Class432 implements Class431 {}

class Class433 implements Class432 {}

class Class434 implements Class433 {}

class Class435 implements Class434 {}

class Class436 implements Class435 {}

class Class437 implements Class436 {}

class Class438 implements Class437 {}

class Class439 implements Class438 {}

class Class440 implements Class439 {}

class Class441 implements Class440 {}

class Class442 implements Class441 {}

class Class443 implements Class442 {}

class Class444 implements Class443 {}

class Class445 implements Class444 {}

class Class446 implements Class445 {}

class Class447 implements Class446 {}

class Class448 implements Class447 {}

class Class449 implements Class448 {}

class Class450 implements Class449 {}

class Class451 implements Class450 {}

class Class452 implements Class451 {}

class Class453 implements Class452 {}

class Class454 implements Class453 {}

class Class455 implements Class454 {}

class Class456 implements Class455 {}

class Class457 implements Class456 {}

class Class458 implements Class457 {}

class Class459 implements Class458 {}

class Class460 implements Class459 {}

class Class461 implements Class460 {}

class Class462 implements Class461 {}

class Class463 implements Class462 {}

class Class464 implements Class463 {}

class Class465 implements Class464 {}

class Class466 implements Class465 {}

class Class467 implements Class466 {}

class Class468 implements Class467 {}

class Class469 implements Class468 {}

class Class470 implements Class469 {}

class Class471 implements Class470 {}

class Class472 implements Class471 {}

class Class473 implements Class472 {}

class Class474 implements Class473 {}

class Class475 implements Class474 {}

class Class476 implements Class475 {}

class Class477 implements Class476 {}

class Class478 implements Class477 {}

class Class479 implements Class478 {}

class Class480 implements Class479 {}

class Class481 implements Class480 {}

class Class482 implements Class481 {}

class Class483 implements Class482 {}

class Class484 implements Class483 {}

class Class485 implements Class484 {}

class Class486 implements Class485 {}

class Class487 implements Class486 {}

class Class488 implements Class487 {}

class Class489 implements Class488 {}

class Class490 implements Class489 {}

class Class491 implements Class490 {}

class Class492 implements Class491 {}

class Class493 implements Class492 {}

class Class494 implements Class493 {}

class Class495 implements Class494 {}

class Class496 implements Class495 {}

class Class497 implements Class496 {}

class Class498 implements Class497 {}

class Class499 implements Class498 {}

class Class500 implements Class499 {}

class Class501 implements Class500 {}

class Class502 implements Class501 {}

class Class503 implements Class502 {}

class Class504 implements Class503 {}

class Class505 implements Class504 {}

class Class506 implements Class505 {}

class Class507 implements Class506 {}

class Class508 implements Class507 {}

class Class509 implements Class508 {}

class Class510 implements Class509 {}

class Class511 implements Class510 {}

class Class512 implements Class511 {}

class Class513 implements Class512 {}

class Class514 implements Class513 {}

class Class515 implements Class514 {}

class Class516 implements Class515 {}

class Class517 implements Class516 {}

class Class518 implements Class517 {}

class Class519 implements Class518 {}

class Class520 implements Class519 {}

class Class521 implements Class520 {}

class Class522 implements Class521 {}

class Class523 implements Class522 {}

class Class524 implements Class523 {}

class Class525 implements Class524 {}

class Class526 implements Class525 {}

class Class527 implements Class526 {}

class Class528 implements Class527 {}

class Class529 implements Class528 {}

class Class530 implements Class529 {}

class Class531 implements Class530 {}

class Class532 implements Class531 {}

class Class533 implements Class532 {}

class Class534 implements Class533 {}

class Class535 implements Class534 {}

class Class536 implements Class535 {}

class Class537 implements Class536 {}

class Class538 implements Class537 {}

class Class539 implements Class538 {}

class Class540 implements Class539 {}

class Class541 implements Class540 {}

class Class542 implements Class541 {}

class Class543 implements Class542 {}

class Class544 implements Class543 {}

class Class545 implements Class544 {}

class Class546 implements Class545 {}

class Class547 implements Class546 {}

class Class548 implements Class547 {}

class Class549 implements Class548 {}

class Class550 implements Class549 {}

class Class551 implements Class550 {}

class Class552 implements Class551 {}

class Class553 implements Class552 {}

class Class554 implements Class553 {}

class Class555 implements Class554 {}

class Class556 implements Class555 {}

class Class557 implements Class556 {}

class Class558 implements Class557 {}

class Class559 implements Class558 {}

class Class560 implements Class559 {}

class Class561 implements Class560 {}

class Class562 implements Class561 {}

class Class563 implements Class562 {}

class Class564 implements Class563 {}

class Class565 implements Class564 {}

class Class566 implements Class565 {}

class Class567 implements Class566 {}

class Class568 implements Class567 {}

class Class569 implements Class568 {}

class Class570 implements Class569 {}

class Class571 implements Class570 {}

class Class572 implements Class571 {}

class Class573 implements Class572 {}

class Class574 implements Class573 {}

class Class575 implements Class574 {}

class Class576 implements Class575 {}

class Class577 implements Class576 {}

class Class578 implements Class577 {}

class Class579 implements Class578 {}

class Class580 implements Class579 {}

class Class581 implements Class580 {}

class Class582 implements Class581 {}

class Class583 implements Class582 {}

class Class584 implements Class583 {}

class Class585 implements Class584 {}

class Class586 implements Class585 {}

class Class587 implements Class586 {}

class Class588 implements Class587 {}

class Class589 implements Class588 {}

class Class590 implements Class589 {}

class Class591 implements Class590 {}

class Class592 implements Class591 {}

class Class593 implements Class592 {}

class Class594 implements Class593 {}

class Class595 implements Class594 {}

class Class596 implements Class595 {}

class Class597 implements Class596 {}

class Class598 implements Class597 {}

class Class599 implements Class598 {}

class Class600 implements Class599 {}

class Class601 implements Class600 {}

class Class602 implements Class601 {}

class Class603 implements Class602 {}

class Class604 implements Class603 {}

class Class605 implements Class604 {}

class Class606 implements Class605 {}

class Class607 implements Class606 {}

class Class608 implements Class607 {}

class Class609 implements Class608 {}

class Class610 implements Class609 {}

class Class611 implements Class610 {}

class Class612 implements Class611 {}

class Class613 implements Class612 {}

class Class614 implements Class613 {}

class Class615 implements Class614 {}

class Class616 implements Class615 {}

class Class617 implements Class616 {}

class Class618 implements Class617 {}

class Class619 implements Class618 {}

class Class620 implements Class619 {}

class Class621 implements Class620 {}

class Class622 implements Class621 {}

class Class623 implements Class622 {}

class Class624 implements Class623 {}

class Class625 implements Class624 {}

class Class626 implements Class625 {}

class Class627 implements Class626 {}

class Class628 implements Class627 {}

class Class629 implements Class628 {}

class Class630 implements Class629 {}

class Class631 implements Class630 {}

class Class632 implements Class631 {}

class Class633 implements Class632 {}

class Class634 implements Class633 {}

class Class635 implements Class634 {}

class Class636 implements Class635 {}

class Class637 implements Class636 {}

class Class638 implements Class637 {}

class Class639 implements Class638 {}

class Class640 implements Class639 {}

class Class641 implements Class640 {}

class Class642 implements Class641 {}

class Class643 implements Class642 {}

class Class644 implements Class643 {}

class Class645 implements Class644 {}

class Class646 implements Class645 {}

class Class647 implements Class646 {}

class Class648 implements Class647 {}

class Class649 implements Class648 {}

class Class650 implements Class649 {}

class Class651 implements Class650 {}

class Class652 implements Class651 {}

class Class653 implements Class652 {}

class Class654 implements Class653 {}

class Class655 implements Class654 {}

class Class656 implements Class655 {}

class Class657 implements Class656 {}

class Class658 implements Class657 {}

class Class659 implements Class658 {}

class Class660 implements Class659 {}

class Class661 implements Class660 {}

class Class662 implements Class661 {}

class Class663 implements Class662 {}

class Class664 implements Class663 {}

class Class665 implements Class664 {}

class Class666 implements Class665 {}

class Class667 implements Class666 {}

class Class668 implements Class667 {}

class Class669 implements Class668 {}

class Class670 implements Class669 {}

class Class671 implements Class670 {}

class Class672 implements Class671 {}

class Class673 implements Class672 {}

class Class674 implements Class673 {}

class Class675 implements Class674 {}

class Class676 implements Class675 {}

class Class677 implements Class676 {}

class Class678 implements Class677 {}

class Class679 implements Class678 {}

class Class680 implements Class679 {}

class Class681 implements Class680 {}

class Class682 implements Class681 {}

class Class683 implements Class682 {}

class Class684 implements Class683 {}

class Class685 implements Class684 {}

class Class686 implements Class685 {}

class Class687 implements Class686 {}

class Class688 implements Class687 {}

class Class689 implements Class688 {}

class Class690 implements Class689 {}

class Class691 implements Class690 {}

class Class692 implements Class691 {}

class Class693 implements Class692 {}

class Class694 implements Class693 {}

class Class695 implements Class694 {}

class Class696 implements Class695 {}

class Class697 implements Class696 {}

class Class698 implements Class697 {}

class Class699 implements Class698 {}

class Class700 implements Class699 {}

class Class701 implements Class700 {}

class Class702 implements Class701 {}

class Class703 implements Class702 {}

class Class704 implements Class703 {}

class Class705 implements Class704 {}

class Class706 implements Class705 {}

class Class707 implements Class706 {}

class Class708 implements Class707 {}

class Class709 implements Class708 {}

class Class710 implements Class709 {}

class Class711 implements Class710 {}

class Class712 implements Class711 {}

class Class713 implements Class712 {}

class Class714 implements Class713 {}

class Class715 implements Class714 {}

class Class716 implements Class715 {}

class Class717 implements Class716 {}

class Class718 implements Class717 {}

class Class719 implements Class718 {}

class Class720 implements Class719 {}

class Class721 implements Class720 {}

class Class722 implements Class721 {}

class Class723 implements Class722 {}

class Class724 implements Class723 {}

class Class725 implements Class724 {}

class Class726 implements Class725 {}

class Class727 implements Class726 {}

class Class728 implements Class727 {}

class Class729 implements Class728 {}

class Class730 implements Class729 {}

class Class731 implements Class730 {}

class Class732 implements Class731 {}

class Class733 implements Class732 {}

class Class734 implements Class733 {}

class Class735 implements Class734 {}

class Class736 implements Class735 {}

class Class737 implements Class736 {}

class Class738 implements Class737 {}

class Class739 implements Class738 {}

class Class740 implements Class739 {}

class Class741 implements Class740 {}

class Class742 implements Class741 {}

class Class743 implements Class742 {}

class Class744 implements Class743 {}

class Class745 implements Class744 {}

class Class746 implements Class745 {}

class Class747 implements Class746 {}

class Class748 implements Class747 {}

class Class749 implements Class748 {}

class Class750 implements Class749 {}

class Class751 implements Class750 {}

class Class752 implements Class751 {}

class Class753 implements Class752 {}

class Class754 implements Class753 {}

class Class755 implements Class754 {}

class Class756 implements Class755 {}

class Class757 implements Class756 {}

class Class758 implements Class757 {}

class Class759 implements Class758 {}

class Class760 implements Class759 {}

class Class761 implements Class760 {}

class Class762 implements Class761 {}

class Class763 implements Class762 {}

class Class764 implements Class763 {}

class Class765 implements Class764 {}

class Class766 implements Class765 {}

class Class767 implements Class766 {}

class Class768 implements Class767 {}

class Class769 implements Class768 {}

class Class770 implements Class769 {}

class Class771 implements Class770 {}

class Class772 implements Class771 {}

class Class773 implements Class772 {}

class Class774 implements Class773 {}

class Class775 implements Class774 {}

class Class776 implements Class775 {}

class Class777 implements Class776 {}

class Class778 implements Class777 {}

class Class779 implements Class778 {}

class Class780 implements Class779 {}

class Class781 implements Class780 {}

class Class782 implements Class781 {}

class Class783 implements Class782 {}

class Class784 implements Class783 {}

class Class785 implements Class784 {}

class Class786 implements Class785 {}

class Class787 implements Class786 {}

class Class788 implements Class787 {}

class Class789 implements Class788 {}

class Class790 implements Class789 {}

class Class791 implements Class790 {}

class Class792 implements Class791 {}

class Class793 implements Class792 {}

class Class794 implements Class793 {}

class Class795 implements Class794 {}

class Class796 implements Class795 {}

class Class797 implements Class796 {}

class Class798 implements Class797 {}

class Class799 implements Class798 {}

class Class800 implements Class799 {}

class Class801 implements Class800 {}

class Class802 implements Class801 {}

class Class803 implements Class802 {}

class Class804 implements Class803 {}

class Class805 implements Class804 {}

class Class806 implements Class805 {}

class Class807 implements Class806 {}

class Class808 implements Class807 {}

class Class809 implements Class808 {}

class Class810 implements Class809 {}

class Class811 implements Class810 {}

class Class812 implements Class811 {}

class Class813 implements Class812 {}

class Class814 implements Class813 {}

class Class815 implements Class814 {}

class Class816 implements Class815 {}

class Class817 implements Class816 {}

class Class818 implements Class817 {}

class Class819 implements Class818 {}

class Class820 implements Class819 {}

class Class821 implements Class820 {}

class Class822 implements Class821 {}

class Class823 implements Class822 {}

class Class824 implements Class823 {}

class Class825 implements Class824 {}

class Class826 implements Class825 {}

class Class827 implements Class826 {}

class Class828 implements Class827 {}

class Class829 implements Class828 {}

class Class830 implements Class829 {}

class Class831 implements Class830 {}

class Class832 implements Class831 {}

class Class833 implements Class832 {}

class Class834 implements Class833 {}

class Class835 implements Class834 {}

class Class836 implements Class835 {}

class Class837 implements Class836 {}

class Class838 implements Class837 {}

class Class839 implements Class838 {}

class Class840 implements Class839 {}

class Class841 implements Class840 {}

class Class842 implements Class841 {}

class Class843 implements Class842 {}

class Class844 implements Class843 {}

class Class845 implements Class844 {}

class Class846 implements Class845 {}

class Class847 implements Class846 {}

class Class848 implements Class847 {}

class Class849 implements Class848 {}

class Class850 implements Class849 {}

class Class851 implements Class850 {}

class Class852 implements Class851 {}

class Class853 implements Class852 {}

class Class854 implements Class853 {}

class Class855 implements Class854 {}

class Class856 implements Class855 {}

class Class857 implements Class856 {}

class Class858 implements Class857 {}

class Class859 implements Class858 {}

class Class860 implements Class859 {}

class Class861 implements Class860 {}

class Class862 implements Class861 {}

class Class863 implements Class862 {}

class Class864 implements Class863 {}

class Class865 implements Class864 {}

class Class866 implements Class865 {}

class Class867 implements Class866 {}

class Class868 implements Class867 {}

class Class869 implements Class868 {}

class Class870 implements Class869 {}

class Class871 implements Class870 {}

class Class872 implements Class871 {}

class Class873 implements Class872 {}

class Class874 implements Class873 {}

class Class875 implements Class874 {}

class Class876 implements Class875 {}

class Class877 implements Class876 {}

class Class878 implements Class877 {}

class Class879 implements Class878 {}

class Class880 implements Class879 {}

class Class881 implements Class880 {}

class Class882 implements Class881 {}

class Class883 implements Class882 {}

class Class884 implements Class883 {}

class Class885 implements Class884 {}

class Class886 implements Class885 {}

class Class887 implements Class886 {}

class Class888 implements Class887 {}

class Class889 implements Class888 {}

class Class890 implements Class889 {}

class Class891 implements Class890 {}

class Class892 implements Class891 {}

class Class893 implements Class892 {}

class Class894 implements Class893 {}

class Class895 implements Class894 {}

class Class896 implements Class895 {}

class Class897 implements Class896 {}

class Class898 implements Class897 {}

class Class899 implements Class898 {}

class Class900 implements Class899 {}

class Class901 implements Class900 {}

class Class902 implements Class901 {}

class Class903 implements Class902 {}

class Class904 implements Class903 {}

class Class905 implements Class904 {}

class Class906 implements Class905 {}

class Class907 implements Class906 {}

class Class908 implements Class907 {}

class Class909 implements Class908 {}

class Class910 implements Class909 {}

class Class911 implements Class910 {}

class Class912 implements Class911 {}

class Class913 implements Class912 {}

class Class914 implements Class913 {}

class Class915 implements Class914 {}

class Class916 implements Class915 {}

class Class917 implements Class916 {}

class Class918 implements Class917 {}

class Class919 implements Class918 {}

class Class920 implements Class919 {}

class Class921 implements Class920 {}

class Class922 implements Class921 {}

class Class923 implements Class922 {}

class Class924 implements Class923 {}

class Class925 implements Class924 {}

class Class926 implements Class925 {}

class Class927 implements Class926 {}

class Class928 implements Class927 {}

class Class929 implements Class928 {}

class Class930 implements Class929 {}

class Class931 implements Class930 {}

class Class932 implements Class931 {}

class Class933 implements Class932 {}

class Class934 implements Class933 {}

class Class935 implements Class934 {}

class Class936 implements Class935 {}

class Class937 implements Class936 {}

class Class938 implements Class937 {}

class Class939 implements Class938 {}

class Class940 implements Class939 {}

class Class941 implements Class940 {}

class Class942 implements Class941 {}

class Class943 implements Class942 {}

class Class944 implements Class943 {}

class Class945 implements Class944 {}

class Class946 implements Class945 {}

class Class947 implements Class946 {}

class Class948 implements Class947 {}

class Class949 implements Class948 {}

class Class950 implements Class949 {}

class Class951 implements Class950 {}

class Class952 implements Class951 {}

class Class953 implements Class952 {}

class Class954 implements Class953 {}

class Class955 implements Class954 {}

class Class956 implements Class955 {}

class Class957 implements Class956 {}

class Class958 implements Class957 {}

class Class959 implements Class958 {}

class Class960 implements Class959 {}

class Class961 implements Class960 {}

class Class962 implements Class961 {}

class Class963 implements Class962 {}

class Class964 implements Class963 {}

class Class965 implements Class964 {}

class Class966 implements Class965 {}

class Class967 implements Class966 {}

class Class968 implements Class967 {}

class Class969 implements Class968 {}

class Class970 implements Class969 {}

class Class971 implements Class970 {}

class Class972 implements Class971 {}

class Class973 implements Class972 {}

class Class974 implements Class973 {}

class Class975 implements Class974 {}

class Class976 implements Class975 {}

class Class977 implements Class976 {}

class Class978 implements Class977 {}

class Class979 implements Class978 {}

class Class980 implements Class979 {}

class Class981 implements Class980 {}

class Class982 implements Class981 {}

class Class983 implements Class982 {}

class Class984 implements Class983 {}

class Class985 implements Class984 {}

class Class986 implements Class985 {}

class Class987 implements Class986 {}

class Class988 implements Class987 {}

class Class989 implements Class988 {}

class Class990 implements Class989 {}

class Class991 implements Class990 {}

class Class992 implements Class991 {}

class Class993 implements Class992 {}

class Class994 implements Class993 {}

class Class995 implements Class994 {}

class Class996 implements Class995 {}

class Class997 implements Class996 {}

class Class998 implements Class997 {}

class Class999 implements Class998 {}

D: big_deep.dart via dart2js

dart2js big_deep.dart --verbose 14.97s user 0.55s system 107% cpu 14.387 total
Info: Kernel load complete
Info: Resolved 463 elements.
Info: Resolved 0 native elements used, 15 native elements dead.
Info: Performing global type inference
Info: Added 463 elements in inferencing graph.
Info: Inferred 9114 types.
Info: Compiling methods
Info: Compiled 4 methods.
Info: Compiled 0 native classes, 0 native classes omitted.
Info: Emitting JavaScript
Info: Timings:
    kernel loader:                                    6.286s (45.0%)
    Front end:                                        0.086s  (0.6%)
    Front end > closures:                             0.016s  (0.1%)
    Front end > worldImpact:                          0.063s  (0.5%)
    Type inference:                                   0.085s  (0.6%)
    Deferred Loading:                                 0.000s  (0.0%)
    Deferred Loading > prepare:                       0.000s  (0.0%)
    Deferred Loading > apply set transitions:         0.000s  (0.0%)
    Enqueue:                                          0.051s  (0.4%)
    Enqueue > resolution.staticUse:                   0.023s  (0.2%)
    Enqueue > resolution.typeUse:                     0.024s  (0.2%)
    Enqueue > resolution.dynamicUse:                  0.002s  (0.0%)
    Enqueue > codegen.staticUse:                      0.000s  (0.0%)
    Enqueue > codegen.constantUse:                    0.000s  (0.0%)
    Enqueue > codegen.typeUse:                        0.000s  (0.0%)
    self:                                             7.433s (53.2%)
   *self > impl.run:                                  0.007s  (0.1%)
    self > run:                                       0.111s  (0.8%)
    self > compileFromKernel:                         0.000s  (0.0%)
    self > computeClosedWorld:                        7.274s (52.0%)
    self > processQueue:                              0.003s  (0.0%)
    self > emptyQueue:                                0.001s  (0.0%)
    self > applyImpact:                               0.031s  (0.2%)
    self > work.run:                                  0.002s  (0.0%)
    SSA builder:                                      0.001s  (0.0%)
    SSA optimizer:                                    0.001s  (0.0%)
    SSA optimizer > SsaInstructionSimplifier:         0.000s  (0.0%)
    SSA optimizer > SsaTypeconversionInserter:        0.000s  (0.0%)
    SSA optimizer > SsaRedundantPhiEliminator:        0.000s  (0.0%)
    SSA optimizer > SsaDeadPhiEliminator:             0.000s  (0.0%)
    SSA optimizer > SsaTypePropagator:                0.000s  (0.0%)
    SSA optimizer > SsaDeadCodeEliminator:            0.000s  (0.0%)
    SSA optimizer > SsaGlobalValueNumberer:           0.000s  (0.0%)
    SSA optimizer > SsaCodeMotion:                    0.000s  (0.0%)
    SSA optimizer > SsaLoadElimination:               0.000s  (0.0%)
    SSA optimizer > SSA value range builder:          0.000s  (0.0%)
    SSA optimizer > SsaSimplifyInterceptors:          0.000s  (0.0%)
    SSA optimizer > SsaFinalizeInterceptors:          0.000s  (0.0%)
    SSA code generator:                               0.001s  (0.0%)
    SSA code generator > SsaInstructionSelection:     0.000s  (0.0%)
    SSA code generator > SsaTypeKnownRemover:         0.000s  (0.0%)
    SSA code generator > SsaTrustedCheckRemover:      0.000s  (0.0%)
    SSA code generator > SsaAssignmentChaining:       0.000s  (0.0%)
    SSA code generator > SsaInstructionMerger:        0.000s  (0.0%)
    SSA code generator > SsaConditionMerger:          0.000s  (0.0%)
    SSA code generator > SsaShareRegionConstants:     0.000s  (0.0%)
    SSA code generator > SsaLiveIntervalBuilder:      0.000s  (0.0%)
    SSA code generator > SsaVariableAllocator:        0.000s  (0.0%)
    Code emitter:                                     0.022s  (0.2%)
    Code emitter > finalize rti:                      0.000s  (0.0%)
    Code emitter > build program:                     0.001s  (0.0%)
    Code emitter > emit program:                      0.004s  (0.0%)
    Code emitter > emit prefragments:                 0.000s  (0.0%)
    Code emitter > write fragments:                   0.004s  (0.0%)
    Code emitter > source-maps:                       0.001s  (0.0%)
    Code emitter > emit buffers:                      0.009s  (0.1%)
    Diagnostic handler:                               0.001s  (0.0%)
    Total compile-time 13.981s; setup 0.000s; async 0.000s; unaccounted 0.008s (0.06%)
Compiled 9,467,989 characters Dart to 12,110 characters JavaScript in 14.1 seconds
Info: 12,110 characters JavaScript in out.js
Dart file big_deep.dart compiled to JavaScript: out.js  
  1. Notice how C takes 6 seconds while A and B take half a second each.
  2. Notice how D takes twice as long as C.
Dart SDK version: 2.15.0-82.0.dev (dev) (Sat Sep 4 03:33:09 2021 -0700) on "macos_x64"
Dart-to-JavaScript compiler (dart2js) version: 2.16.0-80.1.beta
@rakudrama rakudrama added area-web Use area-web for Dart web related issues, including the DDC and dart2js compilers and JS interop. front-end-kernel web-dart2js labels Dec 24, 2021
@rakudrama
Copy link
Member

Such deep hierarchies are unusual outside of language tests.
Can you elaborate on the practical impact of slow compilation of deep hierarchies in your development of applications using Dart?

@modulovalue
Copy link
Contributor Author

I am trying to use autogenerated DSLs, one of which is generated from a specification for Ansi Escape Codes. Importing it adds a second of overhead to each execution of dart ....

I'm experiencing the same overhead with multiple other DSLs which prevents me from using them without having to worry about compilation time overhead.

Such deep hierarchies are unusual outside of language tests.

Yes, I believe you're right. This is just one example that seems to reproduce one of my bottlenecks, but I'm not entirely sure. Do you know of any other flags that would provide more detail for these two measurements?

kernel loader:                                    6.286s (45.0%)
self > computeClosedWorld:                        7.274s (52.0%)  

@modulovalue
Copy link
Contributor Author

modulovalue commented Jan 4, 2022

Running C on earlier dart releases:

6.40s user 0.18s system 103% cpu 6.361 total
on
Dart SDK version: 2.15.0-82.0.dev (dev) (Sat Sep 4 03:33:09 2021 -0700) on "macos_x64"

0.93s user 0.18s system 168% cpu 0.656 total
on
Dart VM version: 2.0.0 (Fri Aug 3 10:53:23 2018 +0200) on "macos_x64"

0.14s user 0.04s system 116% cpu 0.153 total
on
Dart VM version: 1.24.3 (Wed Dec 13 23:26:59 2017) on "macos_x64"

@mraleph
Copy link
Member

mraleph commented Jan 4, 2022

Some algorithms in the CFE might have quadratic complexity (with respect to the depth of the hierarchy) /cc @johnniwinther

IIRC Dart 1 VM was very lazy at parsing and finalising classes so unless you actually instantiate the class you are paying very little for the declaration itself.

I am trying to use autogenerated DSLs, one of which is generated from a specification for Ansi Escape Codes. Importing it adds a second of overhead to each execution of dart ....

I'd say ever since Dart 2 we landed in a very unfortunately spot with fidelity of the dart ... CLI on largeish programs. There is a lot of repeated parsing overhead whenever you run a program with large number of dependencies which makes working on such programs painful.

Sadly we have never found time to sit down and address this somehow. (e.g. building persistent modular / incremental compilation into the CLI)

@johnniwinther
Copy link
Member

We recently discovered (and removed) a quadratic implementation for checking the class hierarchy for cycles (https://dart-review.googlesource.com/c/sdk/+/221820). I believe that big_deep.dart doesn't hit the worst case scenario in this case, though, since the hierarchy is written in order of the hierarchy depth. So we might have another problematic algorithm.

copybara-service bot pushed a commit that referenced this issue Jan 10, 2022
...for many implements.

#48011

Change-Id: Id654864a2929981f5771fe491fa811d123daabcd
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/226684
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
@jensjoha
Copy link
Contributor

This should be fixed in the CFE. I don't know if there's anything to be done on the dart2js side?

@rakudrama
Copy link
Member

dart2js still has a slow phase:

...
Info: Timings:
    kernel loader:                                    0.423s  (6.3%)
...
    self:                                             6.157s (91.3%)
   *self > impl.run:                                  0.002s  (0.0%)
    self > run:                                       0.080s  (1.2%)
    self > compileFromKernel:                         0.000s  (0.0%)
    self > computeClosedWorld:                        6.040s (89.6%)
    self > processQueue:                              0.002s  (0.0%)
    self > emptyQueue:                                0.001s  (0.0%)
    self > applyImpact:                               0.028s  (0.4%)
    self > work.run:                                  0.001s  (0.0%)
...
    Total compile-time 6.742s; setup 0.000s; async 0.000s; unaccounted 0.003s (0.04%)
Compiled 9,508,086 characters Dart to 12,132 characters JavaScript in 6.81 seconds
Info: Compiling file:///usr/local/google/home/sra/play1/big_deep.dart (2.17.0-edge.fccc5fc4d57ce372b290200062eafada82e7169a)
Info: Kernel load complete
Info: Resolved 463 elements.
Info: Resolved 0 native elements used, 15 native elements dead.
Info: Performing global type inference
Info: Added 463 elements in inferencing graph.
Info: Inferred 9114 types.
Info: Compiling methods
Info: Compiled 4 methods.
Info: Compiled 0 native classes, 0 native classes omitted.
Info: Emitting JavaScript
Info: Timings:
    kernel loader:                                    0.423s  (6.3%)
    Front end:                                        0.060s  (0.9%)
    Front end > closures:                             0.016s  (0.2%)
    Front end > worldImpact:                          0.040s  (0.6%)
    Type inference:                                   0.054s  (0.8%)
    Deferred Loading:                                 0.000s  (0.0%)
    Deferred Loading > prepare:                       0.000s  (0.0%)
    Deferred Loading > apply set transitions:         0.000s  (0.0%)
    Enqueue:                                          0.032s  (0.5%)
    Enqueue > resolution.staticUse:                   0.017s  (0.3%)
    Enqueue > resolution.typeUse:                     0.012s  (0.2%)
    Enqueue > resolution.dynamicUse:                  0.002s  (0.0%)
    Enqueue > codegen.staticUse:                      0.000s  (0.0%)
    Enqueue > codegen.constantUse:                    0.000s  (0.0%)
    Enqueue > codegen.typeUse:                        0.000s  (0.0%)
    self:                                             6.157s (91.3%)
   *self > impl.run:                                  0.002s  (0.0%)
    self > run:                                       0.080s  (1.2%)
    self > compileFromKernel:                         0.000s  (0.0%)
    self > computeClosedWorld:                        6.040s (89.6%)
    self > processQueue:                              0.002s  (0.0%)
    self > emptyQueue:                                0.001s  (0.0%)
    self > applyImpact:                               0.028s  (0.4%)
    self > work.run:                                  0.001s  (0.0%)
    SSA builder:                                      0.000s  (0.0%)
    SSA optimizer:                                    0.000s  (0.0%)
    SSA optimizer > SsaInstructionSimplifier:         0.000s  (0.0%)
    SSA optimizer > SsaTypeconversionInserter:        0.000s  (0.0%)
    SSA optimizer > SsaRedundantPhiEliminator:        0.000s  (0.0%)
    SSA optimizer > SsaDeadPhiEliminator:             0.000s  (0.0%)
    SSA optimizer > SsaTypePropagator:                0.000s  (0.0%)
    SSA optimizer > SsaDeadCodeEliminator:            0.000s  (0.0%)
    SSA optimizer > SsaGlobalValueNumberer:           0.000s  (0.0%)
    SSA optimizer > SsaCodeMotion:                    0.000s  (0.0%)
    SSA optimizer > SsaLoadElimination:               0.000s  (0.0%)
    SSA optimizer > SSA value range builder:          0.000s  (0.0%)
    SSA optimizer > SsaSimplifyInterceptors:          0.000s  (0.0%)
    SSA optimizer > SsaFinalizeInterceptors:          0.000s  (0.0%)
    SSA code generator:                               0.000s  (0.0%)
    SSA code generator > SsaInstructionSelection:     0.000s  (0.0%)
    SSA code generator > SsaTypeKnownRemover:         0.000s  (0.0%)
    SSA code generator > SsaTrustedCheckRemover:      0.000s  (0.0%)
    SSA code generator > SsaAssignmentChaining:       0.000s  (0.0%)
    SSA code generator > SsaInstructionMerger:        0.000s  (0.0%)
    SSA code generator > SsaConditionMerger:          0.000s  (0.0%)
    SSA code generator > SsaShareRegionConstants:     0.000s  (0.0%)
    SSA code generator > SsaLiveIntervalBuilder:      0.000s  (0.0%)
    SSA code generator > SsaVariableAllocator:        0.000s  (0.0%)
    Code emitter:                                     0.006s  (0.1%)
    Code emitter > finalize rti:                      0.000s  (0.0%)
    Code emitter > build program:                     0.000s  (0.0%)
    Code emitter > emit program:                      0.002s  (0.0%)
    Code emitter > emit prefragments:                 0.000s  (0.0%)
    Code emitter > write fragments:                   0.002s  (0.0%)
    Code emitter > source-maps:                       0.000s  (0.0%)
    Code emitter > emit buffers:                      0.000s  (0.0%)
    Diagnostic handler:                               0.000s  (0.0%)
    Total compile-time 6.742s; setup 0.000s; async 0.000s; unaccounted 0.003s (0.04%)
Compiled 9,508,086 characters Dart to 12,132 characters JavaScript in 6.81 seconds

@modulovalue
Copy link
Contributor Author

I'm happy to confirm that with 2.17.0-28.0.dev

  • C went down from ~6s to ~1s.
  • D went down from ~15s to ~7s.

I'm also seeing a consistent ~10% improvement in compilation time (for the vm) on some other code that motivated this issue.

Thank you @jensjoha & @johnniwinther!

@modulovalue
Copy link
Contributor Author

The kernel loader phase i.e. the generateKernelInternal routine does not emit any statistics, but it can.

CompilerOptions options = new CompilerOptions()
..target = target
..additionalDills = additionalDills
..librariesSpecificationUri = librariesSpecificationUri
..packagesFileUri = packagesFileUri
..explicitExperimentalFlags = explicitExperimentalFlags
..verify = verify
..invocationModes = invocationModes
..verbosity = verbosity;

A verbose flag must be set, it defaults to false. Here's what will be reported with verbose set to true:

generateKernelInternal metrics for big_deep.dart
(2.17.0-28.0.dev)
...
0:00:00.028206: Started building UriTranslator in 28ms.
0:00:00.030423: Read libraries file in 0ms.
0:00:00.039736: Read packages file in 9ms.
0:00:00.246412: Indexed 34 libraries (0 bytes) in 206.639ms, that is,
       0.000 bytes/ms, and
       6.078 ms/libraries.
0:00:00.398796: Built outlines for 1 compilation units (38775 bytes) in 149.751ms, that is,
     258.930 bytes/ms, and
     149.751 ms/compilation unit.
0:00:00.488468: Resolved parts in 88ms.
0:00:00.489443: Applied patches in 0ms.
0:00:00.501054: Computed library scopes in 11ms.
0:00:00.512008: Resolved 1000 types in 10ms.
0:00:00.513258: Computed variances of 0 type variables in 1ms.
0:00:00.522575: Computed default types for 0 type variables in 9ms.
0:00:00.569976: Checked class hierarchy in 47ms.
0:00:00.574477: Resolved 0 type-variable bounds in 4ms.
0:00:00.599506: Built component in 24ms.
0:00:00.602306: Installed Object as implicit superclass in 2ms.
0:00:00.623830: Installed synthetic constructors in 21ms.
0:00:00.627118: Resolved 0 constructors in 3ms.
0:00:00.629624: Linked component in 2ms.
0:00:00.640369: Computed core types in 10ms.
0:00:00.906075: Built class hierarchy in 265ms.
0:00:00.928471: Checked supertypes in 22ms.
0:00:01.002499: Built class hierarchy members in 73ms.
0:00:01.052802: Computed class hierarchy in 50ms.
0:00:01.055052: Computed show and hide elements in 2ms.
0:00:01.059105: Performed top level inference in 4ms.
0:00:01.059627: Checked 0 overrides in 0ms.
0:00:01.061524: Finished initializing formals in 1ms.
0:00:01.062077: Computed 0 combined member signatures in 0ms.
0:00:01.062631: Updated 0 classes in kernel hierarchy in 0ms.
0:00:01.105762: Added noSuchMethod forwarders in 43ms.
0:00:01.106519: Checked mixin declaration applications in 0ms.
0:00:01.113913: Build outline expressions in 7ms.
0:00:01.127179: Checked type arguments of supers against the bounds in 13ms.
0:00:01.128166: Checked redirecting factories in 0ms.
0:00:01.128578: Cloned default values of formals in 0ms.
0:00:01.138485: Building component in 9ms.
0:00:01.200752: Built bodies for 1 compilation units (38775 bytes) in 62.226ms, that is,
     623.132 bytes/ms, and
      62.226 ms/compilation unit.
0:00:01.201266: Cloned default values of formals in 0ms.
0:00:01.201880: Finished deferred load tearoffs 0 in 0ms.
0:00:01.203526: Finished forwarders for 0 procedures in 1ms.
0:00:01.204587: Finished 0 native methods in 1ms.
0:00:01.205045: Finished 0 patch methods in 0ms.
0:00:01.211799: Finished constructors in 6ms.
0:00:01.255051: Evaluated constants in 43ms.
0:00:01.255415: Added constant coverage in 0ms.
0:00:01.320970: Lowering transformations performed in 65ms.
0:00:01.322398: Mixin transformations performed in 1ms.
0:00:01.322976: Generated component in 0ms.
...

@modulovalue
Copy link
Contributor Author

I'm closing this issue because it is stale. The issue presented here was fixed for the DartVM target. Note: incremental compilation using either the -r flag or packages like fire helps here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-web Use area-web for Dart web related issues, including the DDC and dart2js compilers and JS interop. front-end-kernel web-dart2js
Projects
None yet
Development

No branches or pull requests

5 participants