You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Repin opencascade.js to the real-raw_destructor fork; 5% growth step; docs
The repeat-run ratchet was never the growth ladder: upstream
opencascade.js's generator emitted a NO-OP raw_destructor<T> for every
class with a 2-arg operator delete (DEFINE_STANDARD_ALLOC ⇒ ~all of OCCT),
so .delete() on method-returned embind values never freed — the mesher
extraction alone leaked ~0.6-0.9 KB/node/run (the 85-100 MB/run ratchet)
and pysrc=real evaluation carried ~40 MB more. Root-caused at the heap-byte
level (probe-free4/5/6, probe-stride: ctor objects reused their chunk,
method returns never did), fixed in the fork (3767f28), plus
-sMEMORY_GROWTH_GEOMETRIC_STEP=0.05 (6eeb02f).
pyodide+real heat_exchanger: single run 238.5 → 175.9 MB (eval-end 95.8 →
55.1), repeat ratchet 85-105 → 18-24 MB/run; JS-mode cached-scene repeats
now dead flat; lite legs 137.8 / ~24.6 per-run; eval times unchanged.
Gates on the final build: mesh payload hashes identical on 5 corpus models
(mesh-sig.mjs), starter screenshot correct, fast specs 16/16, full suite
101 passed, harness pyodide+real 217/2/2/1 (per-script identical to the
committed results.json except docs-rst/tips/b04 MISMATCH→PASS — the
documented complete-tie traversal flap moving PASS-ward under changed
pointer-hash enumeration), micropython default 216/2/3/1 (strict subset of
the documented band), Brython control exactly 206/10/5/1.
Ownership audit before enabling real frees (probe-own.mjs): embind COPIES
class-type const-ref returns, so every existing delete-site deletes an
owned copy; Handle.get() raws remain non-owning and are never deleted.
Records: runtime-comparison.md §13, experiments/heavy-memory/STATE.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
0 commit comments