From 90cd0f8f6f19b107ab563491ed72b85860344f00 Mon Sep 17 00:00:00 2001 From: giles Date: Thu, 14 May 2026 07:55:08 +0000 Subject: [PATCH] =?UTF-8?q?plans:=20kernel-on-sx=20=E2=80=94=20log=20quoti?= =?UTF-8?q?ng.sx=20extraction=20+=20evaluator.sx=20decline?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updates Phase 7 status: - env.sx ✓ extracted (three live consumers: Kernel, Tcl, Smalltalk, with Scheme also using it directly) - class-chain.sx ✓ extracted (bonus — not on the original six-file list but surfaced by the same chiselling discipline; Smalltalk + CLOS consumers) - quoting.sx ✓ extracted (Kernel + Scheme consumers) - evaluator.sx DECLINED — too thin to be its own kit; the shared content is protocol/API surface, not algorithm. Documented in-plan, no file created. - combiner.sx, short-circuit.sx — still need fexpr-having second consumers - hygiene.sx — still awaits Scheme Phase 6c (research-grade scope-set work) Three kits live, one declined, three still gated. --- plans/kernel-on-sx.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/plans/kernel-on-sx.md b/plans/kernel-on-sx.md index 6d3bf487..304a353a 100644 --- a/plans/kernel-on-sx.md +++ b/plans/kernel-on-sx.md @@ -87,10 +87,13 @@ The whole interesting thing: there are no special forms hardcoded in the evaluat - [x] Bridge to SX's hygienic macro story; extends proposed `lib/guest/reflective/` with `$let` and `$define-in!` hygiene primitives. - [x] Tests: write an operative that introduces a binding and verify it doesn't shadow caller's same-named bindings. -### Phase 7 — Propose `lib/guest/reflective/` *[env.sx EXTRACTED 2026-05-12; other five still pending]* +### Phase 7 — Propose `lib/guest/reflective/` *[env.sx + quoting.sx EXTRACTED; class-chain.sx also extracted; evaluator.sx declined]* - [x] Identified reusable env-reification + dispatch primitives across Phases 2–6. Consolidated API surface below as four candidate files: `env.sx`, `combiner.sx`, `evaluator.sx`, `hygiene.sx`. -- [x] Second consumer found for **`env.sx`**: Tcl's `uplevel`/`upvar` machinery (`lib/tcl/runtime.sx`). Same scope-chain semantics, divergent only in mutable-vs-functional update — bridged via adapter-cfg pattern from `lib/guest/match.sx`. Extraction landed on branch `lib/tcl/uplevel` (see `plans/lib-guest-reflective.md`). -- [ ] Second consumers still needed for `combiner.sx`, `evaluator.sx`, `hygiene.sx`, `quoting.sx`, `short-circuit.sx` — all five wait for a language with operative/applicative semantics (Scheme, CL fexpr extension, Maru). +- [x] Second consumer found for **`env.sx`**: Tcl's `uplevel`/`upvar` machinery (`lib/tcl/runtime.sx`). Bridged via adapter-cfg pattern. Extraction on branch `lib/tcl/uplevel`. Third consumer: Smalltalk frame, then Scheme. (Three live consumers.) +- [x] Bonus: **`class-chain.sx`** extracted from Smalltalk + CLOS method dispatch (not on the original six-file list, but the same chiselling discipline surfaced it). Branch `lib/guest/method-chain`. +- [x] Second consumer found for **`quoting.sx`**: Scheme's `scm-quasi-walk` (`lib/scheme/eval.sx`). Algorithm identical to Kernel's `knl-quasi-walk`; only the unquote keyword name and host evaluator differ. Bridged via adapter cfg with `:unquote-name`/`:unquote-splicing-name`/`:eval`. Extraction on branch `lib/guest/quoting`. +- [x] **`evaluator.sx` extraction declined.** The genuinely shared content between Kernel's `(get-current-environment, make-environment, eval)` triple and Scheme's `(interaction-environment, null-environment/scheme-report-environment, eval)` is *protocol/API surface*, not algorithm. Each consumer has language-specific binding semantics. The only common helper would be a closure-capturing `make-self-returning-env-fn` (~5 lines), too thin for its own kit. The protocol itself stays documented below but does not become a `lib/guest/reflective/evaluator.sx` file. +- [ ] Second consumers still needed for `combiner.sx`, `hygiene.sx`, `short-circuit.sx`. `combiner.sx` and `short-circuit.sx` require a fexpr-having language (Maru, Klisp, CL-fexpr extension) — Scheme is not a fit. `hygiene.sx` is the deferred research-grade scope-set work; Scheme's Phase 6c would be the second consumer when it lands. **Phase 7 status (updated 2026-05-12):** `env.sx` has been extracted and is live at `lib/guest/reflective/env.sx` on branch `lib/tcl/uplevel`. Both consumers (Kernel and Tcl) pass their full test suites unchanged (Kernel 322/322, Tcl 427/427). The remaining five candidate files stay documented-only until their respective second consumers materialise. Candidate second consumers in priority order: Candidate second consumers in priority order: