Operatives, not macros
Build unless, and?, or a tracer that prints source before it runs —
by choosing what to eval, when, and where.
A Kernel programming language for the CLR — where combiners and environments are first-class, and I run on .NET.
Scheme gave us lambdas. Kernel goes further: the operative vau receives
unevaluated operand trees and the caller’s environment. New syntax is just
library code — no macro expander required.
Build unless, and?, or a tracer that prints source before it runs —
by choosing what to eval, when, and where.
Environments are values. Import bindings, redirect evaluation, or script remote-eval across modules without leaving the language.
Call into .NET with ., new, and .get. Hybrid compile to
Expression trees; full Kernel semantics kept via a trampolined CPS runtime.
Define control forms that short-circuit — something a plain lambda cannot do without thunks.
vau invents unless
(define unless
(vau (test & body) env
(if (eval env test)
#inert
(eval env (cons sequence body)))))
(unless #f
(. System.Console WriteLine "fires only when test is false"))
delimited continuations
(reset
(begin
(shift (lambda (k) (cons 1 (k (#inert)))))
(shift (lambda (k) (cons 2 (k (#inert)))))
()))
; ⇒ (1 2)
The name’s Iron prefix means I run on .NET. The site lives at
ironkernel.org
(the .net TLD was already taken — fitting irony for a CLR language).