joetjen.net
EN DE
Programmiersprache

Praxis

Praxis ist ein Clojure-artiger Lisp, der für die BEAM und für JavaScript kompiliert. Compiler, Laufzeit, Standardbibliothek und Werkzeuge sind in Praxis geschrieben und kompilieren sich selbst. Die Sprache ist in aktiver Entwicklung und noch nicht veröffentlicht.

In Entwicklung · v0.60

Was es ist

Praxis nimmt Clojures Syntax — Literale für Vektoren, Maps und Sets, Sequenzfunktionen, Threading — und setzt sie auf die Semantik von Erlang/OTP: unveränderliche Bindungen, mehrteilige Funktionen mit Guards, Pattern Matching überall, Prozesse, Supervision und Hot Code Reload. Es ist ein Lisp-1 und homoikonisch; Makros werden mit Syntax-Quote geschrieben.

Auf der BEAM wird jeder Namespace zu einem gewöhnlichen .beam-Modul, das Erlang und Elixir wie jedes andere aufrufen können. In JavaScript wird jeder Namespace zu einem ES-Modul für Node oder den Browser. Interop ist direkt: Ein Praxis-Record ist ein Elixir-Struct, ein Praxis-Protokoll ein Elixir-Protokoll.

Ein erster Eindruck

demo.prax
(ns demo "A few functions.")

(defn split "Divides `total` among `people`."
  [total people] :spec [integer integer -> number]
  (/ total people))

(defn classify
  ([n] :when (< n 0) :negative)
  ([0] :zero)
  ([_n] :positive))

(split 4260 3)                  ; => 1420
(split 4250 3)                  ; => 4250/3
(seq/map [-5 0 7] classify)     ; => (:negative :zero :positive)
(-> "  night market " string/trim string/upper-case)
                                ; => "NIGHT MARKET"

Division ist exakt — 4250/3 ist ein Bruch, keine gerundete Gleitkommazahl. :spec deklariert die Signatur, aus der Dialyzer-Specs, TypeScript-Deklarationen und Property-Tests entstehen. Die Standardbibliothek nimmt ihr Subjekt zuerst, deshalb ist -> die Pipeline.

Gestaltung

  • BEAM-Konformität zuerst: Wo ein anderes BEAM-Werkzeug den Unterschied bemerken könnte, tut Praxis, was die BEAM tut.
  • Wenige Special Forms. cond ist die einzige primitive Verzweigung; if, when, and, or, case und with sind Makros darüber.
  • Ein Name behält seinen Wert. Neu binden ist ein Compilerfehler, wie in Erlang.
  • Zahlen laufen nie über, Division ist exakt: große Ganzzahlen, Brüche und Dezimalzahlen gehören zur Sprache.
  • Eine Quelle, zwei Maschinen. Portabler Code läuft unverändert auf der BEAM, unter Node und im Browser — Prozesse eingeschlossen.
  • Werkzeuge sprechen mit Menschen und Maschinen. Jeder prx-Befehl kann in JSON antworten, und ein MCP-Server gehört zur Toolchain.

Der Name ist griechisch: πρᾶξις, das Tun — Handeln, das sein Ziel in sich selbst trägt, im Unterschied zum Erkennen (theoria) und Herstellen (poiesis). Praxis ist das kompilierte Geschwister von Logos, dem einbettbaren Lisp; beide teilen eine spezifizierte Grammatik, aber keinen Code.

Die Werkzeuge

WerkzeugAufgabe
praxisKompiliert Dateien und führt Skripte aus; praxis explain PRX0128 erklärt eine Meldung
prxDas Projektwerkzeug: Manifest, Lock-Datei, Abhängigkeiten aus Hex, Git oder Pfaden, Tasks, Releases, Plugins
preplDer interaktive Prompt, mit Live-Neudefinition und :h für Dokumentation
Pluginsprx test, fmt, lint, check (Dialyzer, gemeldet in Praxis-Begriffen), docs, release, ein Language Server, ein Debug-Adapter und ein MCP-Server
EditorenEine Tree-sitter-Grammatik und eine VS-Code-Erweiterung

In Praxis geschriebene Bibliotheken umfassen Ports von Cooper für Konfiguration, Dextrin für DXN-Daten, Ichor für Grammatiken, das Test-Framework Touchstone — und Webglue, ein Web-Framework.

Dateitypen

Die Endung sagt, für welche Maschinen eine Datei gedacht ist; ein Namespace kann außerdem angeben, was er braucht, etwa Prozesse oder blockierendes I/O, und eine Maschine, was sie bietet.

EndungFür
.praxjede Maschine
.praxenur die BEAM
.praxjJavaScript — Node und Browser
.praxn / .praxbnur Node / nur den Browser
.pxnDaten, etwa das Projektmanifest project.pxn

Wo es steht

Die aktuelle Version ist v0.60.0 (22. September 2026) — sechzig Releases seit dem ersten Commit am 20. August. Compiler, Laufzeit und Werkzeuge sind in Praxis geschrieben und bootstrappen sich selbst; übrig ist nur ein kleiner Seed-Compiler in Elixir. Die Sprache selbst ist seit v0.56.0 eingefroren: Ihre Formen stehen fest, während sich die Werkzeuge weiterbewegen. Gearbeitet wird jetzt an einem Buch — dem Tutorial — und danach an der Verteilung: Pakete veröffentlichen, ein Installer, und eine Stabilitätszusage auf dem Weg zu 1.0.