Einführung & Ausgangssituation

In diesem Abschnitt werden die Ausgangssituation sowie die darauf beruhenden Designentscheidungen beschrieben

Einführung

Bei der im alten Kalibri integrierten Skriptsprache handelt es sich um eine komplette Eigenentwicklung. Sie kombiniert Ideen aus verschiedenen anderen Sprachen, nimmt dabei aber nur die Nachteile mit und lässt die Vorteile gezielt stehen. Die Skriptsprache ist historisch gewachsen und weist deswegen eine außergewöhnliche Menge an problematischen Designentscheidungen auf. Die Syntax ist überaus komplex, aber gleichzeitig sehr fehleranfällig und schlecht dokumentiert.

Der dazugehörige Interpreter, welcher sich hauptsächlich in der Datei GPIB.CPP befindet, ist selbst für legacy Projekte in einem sehr schlechten Zustand. Der Code folgt keinerlei Best Practices. Im folgenden sind einige der Probleme aufgelistet:

  • Es fehlen quasi sämtliche Sanity Checks (Plausibilitätsprüfungen)
    • Es ist sehr einfach durch Fehler in Skripten diverse undefinierte Verhaltensweisen zu provozieren, bspw. Zugriff auf falsche Speicherregionen, Abstürze, etc.
    • Diese Problematik ist bekannt und bspw. als mehr als 300 Zeichen pro Programmzeile => tolle Abstürze und Spezialeffekte! dokumentiert
  • Ungültige Syntax wird oft einfach ignoriert, oder es passiert irgendwas
  • Es wird fast ausschließlich mit globalen Variablen gearbeitet
  • Die Abwesenheit jeglicher hilfreicher Kommentare macht das Arbeiten mit dem alten Interpreter äußerst herausfordernd
  • Der Code weist keinerlei Struktur, Modularisierung oder Kapselung auf (Klassischer “Spaghetti-Code”)
  • Die originale Formatierung ist nahezu unlesbar
  • etc…

Ausgangssituation

Trotz der Unzulänglichkeiten des alten Kalibri-Script wurde diese Technologie über viele Jahre erfolgreich eingesetzt. Deswegen existiert auch eine signifikante Menge an Skripten / Kalibriervorschriften. Diese alten Skripte müssen im neuen System so weit lauffähig wie möglich sein und dürfen dabei außer Fehlerkorrekturen keine Anpassungen benötigen. Diese Anforderung schließt inhärent ein, dass, abgesehen von offensichtlichen Fehlern bzw. undefiniertem Verhalten, das komplette Verhalten von Kalibri-Script so genau wie möglich nachgebildet werden muss.