Kotlin's shape over a C-family syntax, compiled to native code, with deterministic destruction and no garbage collector — and no borrow checker to argue with. Three engines that have to agree on every byte they print.
class Point(val x: Float, val y: Float) {
func length(): Float { sqrt(this.x * this.x + this.y * this.y) }
func toString(): String { "(${this.x}, ${this.y})" }
}
func firstLong(points: List<Point>, min: Float): Point? {
for (p in points) {
if (p.length() > min) { return p }
}
return null
}
val found = firstLong([Point(1.0, 1.0), Point(3.0, 4.0)], 2.0)
println(when {
found == null -> "nothing long enough"
else -> "${found} has length ${found.length()}"
})Lexer, parser, checker and C backend — each held byte-for-byte against its Rust oracle, and reproducing its own source.
Inference everywhere, narrowing that survives and, early returns, even implies.
C, C++, Rust, Go, Java and Kotlin all answer from a single Keal program.
An object dies when its last reference does, at a statement boundary you can point at, and deinit runs there. No pause, no generation, no lifetime annotation.
keal lsp gives VS Code, Neovim, Helix and Zed the same thing: errors as you type, hover types, go to definition, rename. It reuses the compiler rather than modelling the language twice.
The four native ones meet Keal on the C ABI its binaries already speak — no runtime, no conversion layer. Java and Kotlin go through a gateway module, written in Keal.
The tree-walking interpreter is the specification. The bytecode VM is the default. keal build compiles through C11 to a real executable. The suite runs every program on all three and demands byte-identical output.
fib(35) — the same program, on all three engines.
Three programs that use the language for what it is for, and report what they find. Each has found defects the suite could not: a map that looped after being emptied twice, a record that printed itself with a pointer test for a value that is not one, a type the native backend could not compile at all.
A web framework — routing, sessions, SQLite, live pages.
A GUI framework — rasteriser, TrueType, layout, widgets.
A language for PostgreSQL schemas and queries, compiled to SQL.
The IDE — written in Keal, drawn by keal-view.
git clone https://github.com/geneacta/keal cd keal cargo build --release ./bootstrap.sh