Python at 1.75x CPython, own parser only, and v0.0.21
Native dict, set and instance storage, direct calls and inlined attribute access take Python to about 1.75x CPython 3.13 with the JIT; a hello-world starts in 20 ms; the compiler reads Zipp's own syntax tree and emits the same bytecode every run.
Most of a zipp py hello-world's 85 ms went into compiling the 0.7 MB Python runtime in every process. 9ad9c7bb caches compiled code per user, keyed on the executable, the source and every ZIPP_* setting, so a warm hello-world takes about 20 ms (CPython: 15-20). Embedding a precompiled snapshot in the WebAssembly module was measured and rejected, since it would more than double the runtime's share of the download; the browser calls prewarmPython() when idle instead, and the first run takes about 20 ms instead of 220.
50e490b0 moves dicts and sets into a native compact table modelled on CPython 3.13's, 65184f04 drops the per-call traceback handler for an ip-to-line table, 74a41f5a adds PyCall, and 4b068438 gives instances hidden-class layouts, which f954857c lets compiled loops read and write inline: attr_read_write from 19.8 to 3.5 ms, and the suite from about 1.85× to 1.75× CPython's time. One regression was caught on the way: a recycled string slot could satisfy a stale attribute cache, so in torch's backward pass p._pg came back as another tensor's list (444ba261). b287409c prints CPython's traceback layout, and 38 of 44 traceback programs match CPython byte for byte.
cb3c5bb4 compiles Python from zipp-pyparse's arena tree directly, byte-identical over 61,885 programs, and deletes the RustPython parser fork. e0af009e found seven compiler loops that walked a hash set in whatever order the process produced; across 53,673 files the old compiler varied on 139-151 per run and the new one on none. 9df6e2fd kept the complex power corpus independent of the platform's libm after a last-bit difference on Linux, and v0.0.21 shipped the same day, with torch as a separate WebAssembly package beside the complete engine.