Bootstrap SX bytecode compiler to native OCaml
Transpile lib/compiler.sx → hosts/ocaml/lib/sx_compiler.ml (42 functions). The bytecode compiler now runs as native OCaml instead of interpreted SX, eliminating the 24s JIT warm-up for compiler functions. - bootstrap_compiler.py: transpiler script (like bootstrap.py for evaluator) - sx_compiler.ml: 39KB native compiler (compile, compile-module, etc.) - Bind compile/compile-module as native functions in setup_core_operations - Add mutable_list to sx_runtime.ml (used by compiler pool) - Add native parse function (wraps Sx_parser.parse_all) - compile-match delegated via ref (uses letrec, transpiler can't handle) - Compile all 23 bytecode modules successfully (was 0/23 due to WASM overflow) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -600,7 +600,8 @@ let rec handle_tool name args =
|
||||
let spec_dir = try Sys.getenv "SX_SPEC_DIR" with Not_found -> "spec" in
|
||||
Filename.dirname spec_dir
|
||||
in
|
||||
let cmd = Printf.sprintf "cd %s && node hosts/ocaml/browser/compile-modules.js shared/static/wasm 2>&1" project_dir in
|
||||
(* Use compile-modules.js which now delegates to native OCaml *)
|
||||
let cmd = Printf.sprintf "cd %s && node --input-type=commonjs hosts/ocaml/browser/compile-modules.js shared/static/wasm 2>&1" project_dir in
|
||||
let ic = Unix.open_process_in cmd in
|
||||
let lines = ref [] in
|
||||
(try while true do lines := input_line ic :: !lines done with End_of_file -> ());
|
||||
|
||||
@@ -578,6 +578,11 @@ let setup_type_constructors env =
|
||||
(* Already a value — return as-is *)
|
||||
v
|
||||
| _ -> raise (Eval_error "parse: expected string"));
|
||||
(* Native bytecode compiler — bootstrapped from lib/compiler.sx *)
|
||||
bind "compile" (fun args ->
|
||||
match args with [expr] -> Sx_compiler.compile expr | _ -> Nil);
|
||||
bind "compile-module" (fun args ->
|
||||
match args with [exprs] -> Sx_compiler.compile_module exprs | _ -> Nil);
|
||||
bind "parse-int" (fun args ->
|
||||
match args with
|
||||
| [String s] -> (try Number (float_of_int (int_of_string s)) with _ -> Nil)
|
||||
|
||||
Reference in New Issue
Block a user