IronKernel

A Kernel programming language for the CLR — where combiners and environments are first-class, and I run on .NET.

Why Kernel?

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.

Operatives, not macros

Build unless, and?, or a tracer that prints source before it runs — by choosing what to eval, when, and where.

First-class environments

Environments are values. Import bindings, redirect evaluation, or script remote-eval across modules without leaving the language.

Lives on the CLR

Call into .NET with ., new, and .get. Hybrid compile to Expression trees; full Kernel semantics kept via a trampolined CPS runtime.

Taste of the language

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)

Continue in the guided tour →

ironkernel.org

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).