CEK frames were already records (cek_frame in sx_types.ml), so the actual hot-path bottleneck was prim_call "=" [...] in step_continue/step_eval dispatch: each step did a Hashtbl lookup + 2x list cons + pattern match just to compare frame-type strings. Added a short-circuit fast path in prim_call (sx_runtime.ml) for the hot operators: =, <, >, <=, >=, empty?, first, rest, len. These bypass the primitives Hashtbl entirely and dispatch directly on value shape. Inlined _fast_eq for scalar/string equality, which dominates frame-type dispatch comparisons. Added bin/bench_cek.exe with five tight-loop benchmarks (fib, loop, map, reduce, let-heavy). Median of 7 runs: fib(18) 2789ms -> 941ms (-66%) loop(5000) 2018ms -> 620ms (-69%) map sq xs(1000) 108ms -> 48ms (-56%) reduce + ys(2000) 72ms -> 10ms (-86%) let-heavy(2000) 491ms -> 271ms (-45%) Tests: 4545/4545 passing baseline preserved (1339 pre-existing failures unchanged). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
12 lines
238 B
Plaintext
12 lines
238 B
Plaintext
(executables
|
|
(names run_tests debug_set sx_server integration_tests bench_cek)
|
|
(libraries sx unix threads.posix otfm yojson))
|
|
|
|
(executable
|
|
(name mcp_tree)
|
|
(libraries sx unix yojson str))
|
|
|
|
(executable
|
|
(name test_cst)
|
|
(libraries sx))
|