ludic/tools
Orkuncakilkaya 12fdc0717e a program's states made on first injection, and the ECS stores started at 8 slots
Maroon Lake's launcher watcher - a process that only spawns the game and waits - held 58 MB, 48 MB of
it MALLOC_SMALL. Measured with malloc stack logging it was not the state defaults but L_grow: every
program sized every property type's per-entity store to MAX_ENT (1024) slots at start, 1,583 stores,
entities or none. And every state record was made with its defaults in L_init_globals before Boot.

- emit_lazy.ludic: a program's (not the runtime's) state global is left out of L_init_globals, and
  every read of it calls @S_<global>(), which makes it on first call from its own initializer - after
  every registry and plain global, so a default may read them (the init-order crash cannot come back
  through a state). What a getter makes is declared (@lp_fdecl): a state first touched in play is made
  once and not judged as a frame's keep. A function value's trampoline calls the getter too.
- L_grow starts the stores at ECS_FIRST (8) and doubles as entities come, as it always did past MAX_ENT.

The watcher (with the game's watch step moved before the systems' defs): 57 MB -> 11 MB; the only
state it makes is UiState (14 KB). What is left: AppKit's window, opened by rt_init before main for any
windowed program (~4 MB), and the runtime's font, image and 2D inits (~1.2 MB).

Goldens: the arena, fence, value and json goldens; the 36 ui examples; 30 of the 32 ECS test cases
(sprite_render and sprite_atlas time out under a plain runner with the toolchain before this too).
Package tests: ludic.base, save, settings, i18n.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 14:14:05 +03:00
..
ci fix(ci): supply _NSGetExecutablePath on Linux, so the seed links and CI publishes 2026-09-13 03:32:18 +03:00
docgen refactor(cli)!: split the contributor tool out of the ludic CLI 2026-09-05 23:15:12 +03:00
editors feat(jetbrains): a Ludic tool window for the package (plugin 1.6.0) 2026-09-17 12:16:22 +03:00
git-hooks build(git-hooks): enforce Conventional Commits via a hook + CI, record history decision 2026-08-30 23:30:45 +03:00
lab feat(ludic.lab): the visual lab as a package - a scene on a plate, never a world 2026-09-25 07:48:43 +03:00
ludic-cli a program's states made on first injection, and the ECS stores started at 8 slots 2026-09-29 14:14:05 +03:00
ludic-tools wip(0.S2): migrate - a var nothing writes becomes a let; a state is keyed by its module, directory or program, so every program's plan agrees; paths normalized; program states named SceneDemoState / scene_demo_st; the LSP reads state, mut and entry/handler parameters 2026-09-25 15:31:34 +03:00
ludic-web Baseline: Ludic compiler + toolchain, Phase 1 syntax fixes complete 2026-08-27 15:15:35 +03:00
migrate feat(lang): functions are values (L2), and render3d takes its scene as callbacks 2026-09-24 00:27:26 +03:00
native feat(pkg): windows-x64 builds of ludic.physics (Jolt v5.6.0) and ludic.nativeecho, built on the PC by their native/build.sh 2026-09-27 13:29:55 +03:00
atlas.ludic refactor(x): per-process scratch dirs, Ludic ports of the LSP test and Forgejo release 2026-09-05 01:12:26 +03:00
test-grammar.js refactor(x): per-process scratch dirs, Ludic ports of the LSP test and Forgejo release 2026-09-05 01:12:26 +03:00