Was ist lox?

Lox Programmiersprache

Lox ist eine imperative, interpretierte Programmiersprache, die von Robert Nystrom für sein Buch "Crafting Interpreters" entwickelt wurde. Sie dient primär dazu, das Design und die Implementierung von Programmiersprachen zu lehren. Lox ist relativ einfach aufgebaut, bietet aber viele Funktionen, die in modernen Sprachen üblich sind.

Kernmerkmale:

  • Dynamisch typisiert: Der Typ einer Variable wird zur Laufzeit bestimmt. Siehe Dynamische%20Typisierung.
  • Interpretiert: Lox-Code wird nicht in Maschinencode kompiliert, sondern direkt von einem Interpreter ausgeführt. Siehe Interpreter.
  • Imperativ: Der Fokus liegt auf der sequenziellen Ausführung von Anweisungen, die den Programmzustand verändern. Siehe Imperative%20Programmierung.
  • Garbage Collection: Lox verfügt über automatische Speicherbereinigung (Garbage Collection), um Speicherlecks zu vermeiden. Siehe Garbage%20Collection.
  • Objektorientiert: Unterstützt Klassen und Instanzen. Siehe Objektorientierung.
  • Lexikalische Umgebung (Lexical Scoping): Variablen sind nur innerhalb des Blocks oder der Funktion sichtbar, in dem/der sie definiert wurden. Siehe Lexikalische%20Umgebung.
  • Funktionen sind First-Class Citizens: Funktionen können wie andere Variablen behandelt werden, d.h. sie können als Argumente an andere Funktionen übergeben oder von diesen zurückgegeben werden. Siehe First-Class%20Funktion.

Syntax-Beispiel (Rekursive Funktion):

fun fib(n) {
  if (n <= 1) {
    return n;
  }
  return fib(n - 1) + fib(n - 2);
}

print fib(10); // Ausgabe: 55

Anwendungsbereich:

Lox ist primär eine Lernsprache. Sie ist nicht für den Einsatz in Produktionsumgebungen gedacht. Sie dient dazu, die Konzepte des Parsens, der semantischen Analyse, der Codeerzeugung (im Falle eines Compilers) und der Laufzeitumgebung zu demonstrieren.

Implementierungen:

Das Buch "Crafting Interpreters" führt den Leser durch die Implementierung von Lox in zwei verschiedenen Varianten:

  • jlox: Implementiert in Java.
  • clox: Implementiert in C.