Loading…
Thumbnail Image

Zur Kontextanalyse einer algebraischen Programmiersprache

Maeder, Christian

Algebraische Spezifikationen wurden theoretisch gut untersucht, doch für verschiedene Entwürfe von konkreten Spezifikations- oder Programmiersprachen erwies sich die Notation von Instanzen für parametrisierte Strukturen als umständlich. Inzwischen hat sich dafür eine Listennotation durchgesetzt, bei der aktuelle und formale Parameter per Position zugeordnet werden. In einigen Sprachen wurden explizite Instanziierungen reduziert, indem parametrisierte Namen generisch importiert werden können und die Kontextanalyse die fehlende Information aus dem Anwendungskontext inferiert. Der Sprachentwurf orientiert sich insoweit an Analysealgorithmen. Der Entwurf von ML mit streng getypten polymorphen Funktionen höherer Ordnung wurde geprägt durch den Hindley-Milner-Algorithmus W zur Typinferenz. Der ursprüngliche Entwurf von PASCAL war durch die effiziente One-Pass-Technik auf so genannte lineare Sichtbarkeit beschränkt. Diese gilt immer noch für fast alle algebraischen Sprachen (PVS, LPG und CASL), aber nicht für moderne Programmiersprachen wie JAVA (objektorientiert) oder HASKELL (funktional). Der Entwurf von OPAL ist daher herausragend: Deklarationen können in beliebiger Reihenfolge notiert werden und sind im ganzen Modul sichtbar; unabhängig davon ist die Reihenfolge formaler Parameter. Für die algebraische Typanalyse werden in dieser Arbeit die klassische polymorphe Typinferenz und Überlagerungsauflösung zu einem Algorithmus Wo verschmolzen. Es stellt sich heraus, dass dieselbe Art der Analyse für die Identifikation von überlagerten und generischen Namen benötigt wird. Dafür müssen einfache Typterme zu Namenstermen verallgemeinert werden; die Namen stehen für deklarierte Typen und Funktionen, die sowohl die Parametersignatur als auch die Gesamtsignatur einer Struktur etablieren. Durch den hier entwickelten Algorithmus I für die Namensidentifikation entsteht eine Parallele zur Typanalyse, die über die aus HASKELL bekannte Analogie für die Konstruktorapplikation von Typen und Ausdrücken hinausgeht. Instanziierung ist Applikation und zwar insbesondere für Funktionsparameter. Dadurch werden die klassische ML-Polymorphie und Funktionen höherer Ordnung zu Teilaspekten der universelleren Generizität durch Parametrisierung. Den Kern der Namensidentifikation I bilden die um Funktionen erweiterten Namensterme. Die konsequente Gleichberechtigung von Typen und Funktionen unterstützt Funktionsparameter, die andere Funktionsparameter enthalten können; diese sind beispielsweise für die Zusicherung von Eigenschaften geeignet. Der induktive Aufbau der Namen erlaubt die inkrementelle Konstruktion eines Namensraums unabhängig von der textuellen Reihenfolge. Für einen erweiterten und unverändert schlanken Sprachentwurf werden implizite Parameter vorgeschlagen, die Parameterlisten verkürzen, sowie sich wechselseitig importierende Strukturen und polymorphe Rekursion.