2026-09-30: Compiler improvements

Published: 2026-09-30

In the last few days I've done an insane amount of compiler optimization!

Menai improvements

The last few days have seen a huge number of compiler improvements, renaming activities that make operations much more regular, and algorithmic improvements in core libraries.

I've also added a lot more core libraries and thus benchmark tests.

I'm not capturing all the details, but this would have been months of work only a couple of years ago!

BMP-DECODE
────────────────────────────────────────────────────────
Case                            mean (ms)       min (ms)
────────────────────────────────────────────────────────
truecolour-64x64                    0.313          0.287
truecolour-128x128                  1.305          1.238
truecolour-topdown-128x128          1.261          1.231
truecolour-alpha-128x128            1.547          1.467
padded-65x64                        0.308          0.290
────────────────────────────────────────────────────────


BMP-ENCODE
────────────────────────────────────────────────────────
Case                            mean (ms)       min (ms)
────────────────────────────────────────────────────────
truecolour-64x64                    0.825          0.785
truecolour-128x128                  7.308          7.233
truecolour-topdown-128x128          7.335          7.278
truecolour-alpha-128x128           10.247         10.017
padded-65x64                        0.876          0.870
────────────────────────────────────────────────────────


CALENDAR
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
short_5d                          0.024          0.020
month_20d                         0.078          0.076
quarter_60d                       0.237          0.228
year_250d                         0.945          0.934
months_600d                       1.613          1.565
──────────────────────────────────────────────────────


DEFLATE-COMPRESS
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
text-4k                           1.654          1.586
text-32k                          9.888          9.390
incremental-16k                  13.623         13.451
runs-32k                         81.074         79.513
──────────────────────────────────────────────────────


DEFLATE-DECOMPRESS
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
text-4k                           0.392          0.380
text-32k                          0.668          0.651
incremental-16k                   1.051          1.036
stored-8k                         0.204          0.200
runs-32k                          2.175          2.067
──────────────────────────────────────────────────────


JSON-DECODE
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
object                            0.015          0.013
flat_array                        0.088          0.086
flat_object                       0.078          0.076
mixed_nested                      0.176          0.175
string_heavy                      0.058          0.056
numbers_array                     0.018          0.017
unicode_strings                   0.008          0.007
long_string                       0.062          0.060
deep_array                        0.198          0.194
──────────────────────────────────────────────────────


JSON-ENCODE
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
object                            0.013          0.011
flat_array                        0.014          0.012
flat_object                       0.033          0.031
mixed_nested                      0.064          0.062
string_heavy                      0.090          0.089
numbers_array                     0.010          0.008
unicode_strings                   0.004          0.003
long_string                       0.266          0.261
──────────────────────────────────────────────────────


PNG-DECODE
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
greyscale-64x64                   2.635          2.607
greyscale-alpha-64x64            14.580         14.493
palette-128x128                   6.559          6.527
truecolour-128x128               83.660         83.294
truecolour-alpha-128x128        112.938        112.520
truecolour-192x192              192.312        191.653
──────────────────────────────────────────────────────


PNG-ENCODE
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
truecolour-48x48                110.428        106.965
truecolour-96x96               1675.086       1662.443
truecolour-alpha-96x96         2972.688       2946.524
──────────────────────────────────────────────────────


RUBIKS_LIST
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
1-move                            0.067          0.063
2-move                            0.067          0.063
3-move                            0.150          0.147
4-move                            1.569          1.560
5-move                            5.256          5.247
6-move                           33.713         33.674
7-move                           75.116         74.820
──────────────────────────────────────────────────────


RUBIKS_VECTOR
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
1-move                            0.061          0.057
2-move                            0.059          0.056
3-move                            0.135          0.131
4-move                            1.402          1.396
5-move                            4.755          4.739
6-move                           30.623         30.565
7-move                           67.987         67.732
──────────────────────────────────────────────────────


SORT
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
n=10                              0.006          0.004
n=50                              0.033          0.029
n=100                             0.069          0.068
n=250                             0.204          0.202
n=500                             0.456          0.451
n=1000                            1.026          1.021
n=2500                            2.958          2.941
n=5000                            6.481          6.458
n=10000                          14.206         14.150
──────────────────────────────────────────────────────


SUDOKU_LIST
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
Easy (36 givens)                 15.364         15.179
Medium (30 givens)                0.225          0.217
Hard (25 givens)               3280.335       3280.335
Expert (23 givens)              188.421        188.421
──────────────────────────────────────────────────────


SUDOKU_VECTOR
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
Easy (36 givens)                 11.159         11.118
Medium (30 givens)                0.164          0.160
Hard (25 givens)               2456.489       2456.489
Expert (23 givens)              139.414        139.414
──────────────────────────────────────────────────────


ZIP-CREATE
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
single-deflate                    0.902          0.885
single-stored                     0.024          0.020
mixed-16                          6.399          6.371
many-128                         84.992         84.744
large-256k                       77.974         76.739
──────────────────────────────────────────────────────


ZIP-ENTRIES
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
single-deflate                    0.005          0.003
single-stored                     0.004          0.003
mixed-16                          0.017          0.014
many-128                          0.108          0.093
large-256k                        0.003          0.003
──────────────────────────────────────────────────────


ZIP-EXTRACT
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
single-deflate                    0.293          0.283
single-stored                     0.204          0.197
mixed-16                          0.914          0.900
many-128                         10.104         10.073
large-256k                        3.285          3.221
──────────────────────────────────────────────────────


ZLIB-COMPRESS
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
text-4k                           1.883          1.864
text-32k                         11.422         11.386
incremental-16k                  14.731         14.591
runs-32k                         86.213         85.184
──────────────────────────────────────────────────────


ZLIB-DECOMPRESS
──────────────────────────────────────────────────────
Case                          mean (ms)       min (ms)
──────────────────────────────────────────────────────
text-4k                           0.613          0.596
text-32k                          2.446          2.390
incremental-16k                   1.923          1.909
runs-32k                          3.984          3.959
──────────────────────────────────────────────────────