Auto-hébergé — le point fixe du bootstrap est vérifié à chaque exécution

Le langage qui se compile lui-même.

La silhouette de Kotlin sur une syntaxe famille C, compilé en natif, avec une destruction déterministe et sans ramasse-miettes — et sans vérificateur d'emprunts à convaincre. Trois moteurs qui doivent s'accorder sur chaque octet imprimé.

point.keal
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()}"
})

Le compilateur est écrit en Keal

Lexeur, parseur, vérificateur et backend C — tenus octet pour octet face à leurs oracles Rust, et reproduisant leur propre source.

Tout entre dans Any, Any ne sort nulle part

Inférence partout, rétrécissement qui tient à travers and, les retours anticipés, et même implies.

Six langages, un seul fichier

C, C++, Rust, Go, Java et Kotlin répondent tous depuis un unique programme Keal.

Mémoire déterministe, sans collecteur

Un objet meurt quand meurt sa dernière référence, à une frontière d'instruction qu'on peut désigner, et deinit s'y exécute. Pas de pause, pas de génération, pas d'annotation de durée de vie.

Un serveur, tous les éditeurs

keal lsp donne à VS Code, Neovim, Helix et Zed la même chose : les erreurs pendant qu'on tape, les types au survol, aller à la définition, renommer. Il réutilise le compilateur plutôt que de modéliser le langage deux fois.

Un fichier, six langages.

Les quatre natifs rencontrent Keal sur l'ABI C que ses binaires parlent déjà — pas de runtime, pas de couche de conversion. Java et Kotlin passent par un module passerelle, écrit en Keal.

CC++RustGoJavaKotlin

×84 en natif — avec les mêmes garanties.

L'interpréteur arborescent est la spécification. La VM à bytecode est le défaut. keal build compile via C11 vers un vrai exécutable. La suite exécute chaque programme sur les trois et exige une sortie identique à l'octet.

native
bytecode VM
84×
tree-walker
220×

fib(35) — le même programme, sur les trois moteurs.

Écrit en Keal

Trois programmes qui se servent du langage pour ce à quoi il sert, et rapportent ce qu'ils trouvent. Chacun a trouvé des défauts que la suite ne pouvait pas voir : une table qui bouclait après avoir été vidée deux fois, un record qui s'imprimait avec un test de pointeur sur une valeur qui n'en est pas une, un type que le backend natif ne savait pas compiler du tout.

kealeb

Un cadriciel web — routage, sessions, SQLite, pages vivantes.

keal-view

Un cadriciel graphique — rastériseur, TrueType, mise en page, widgets.

KealSql

Un langage de schémas et de requêtes PostgreSQL, compilé vers SQL.

Kealler

L'IDE — écrit en Keal, dessiné par keal-view.

Opérationnel en une minute.

shell
git clone https://github.com/geneacta/keal
cd keal
cargo build --release
./bootstrap.sh

Puis faites le tour — 30 minutes, chaque extrait s'exécute →