Files
rose-ash/hosts/ocaml/lib
giles 1f466186f9
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 46s
JIT: Phase 2 (LRU eviction) + Phase 3 (manual reset)
sx_types.ml:
  - Add l_uid field on lambda (unique identity for cache tracking)
  - Add lambda_uid_counter + next_lambda_uid () minted on construction
  - Add jit_budget (default 5000) and jit_evicted_count counter
  - Add jit_cache_queue : (int * value) Queue.t — FIFO of compiled lambdas
  - jit_cache_size () helper for stats

sx_vm.ml:
  - On successful JIT compile, push (uid, Lambda l) onto jit_cache_queue
  - While queue length exceeds jit_budget, pop head (oldest entry) and
    clear that lambda's l_compiled slot — evicted entries fall through
    to cek_call_or_suspend on next call (correct, just slower)
  - Guard JIT trigger by !jit_budget > 0 (budget=0 disables JIT entirely)

sx_primitives.ml:
  Phase 2:
    - jit-set-budget! N — change cache budget at runtime
    - jit-stats includes budget, cache-size, evicted
  Phase 3:
    - jit-reset-cache! — clear all compiled VmClosures (hot paths re-JIT
      on next threshold crossing)
    - jit-reset-counters! also resets evicted counter

run_tests.ml:
  - Update test-fixture lambda construction to include l_uid

Effect: cache size bounded regardless of input pattern. The HS test harness
compiles ~3000 distinct one-shot lambdas, but tiered compilation (Phase 1)
keeps most below threshold so they never enter the cache. Steady-state count
stays in single digits for typical workloads. When a misbehaving caller
saturates the cache (eval-hs in a tight loop, REPL-style host), LRU
eviction caps memory at jit_budget compiled closures × ~1KB each.

Verification: 4771 passed, 1111 failed in run_tests — identical to
pre-Phase-2 baseline. No regressions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 22:22:37 +00:00
..