\chapter{Zusammenfassung} 
\label{cha_ausblick}

In dieser Arbeit werden Mittel zur Systemstrukturierung, speziell zur
Manipulation von Sichtbarkeitsbereichen, und zur Anbindung von Werkzeugen an ein
persistentes Objektsystem unter Verwendung einer Compilerschnittstelle
untersucht.  Die enge Verzahnung dieser beiden Bereiche macht die Notwendigkeit
einer Entwicklungsumgebung zur effizienten Systemstrukturierung und
-konfiguration deutlich.  Anhand der konkreten Implementierung des {\tlmin}
Systems wird die Aufgabenteilung zwischen Entwicklungswerkzeug als
Anwendungsprogramm einerseits und Sprachkonstrukten als Bestandteil des
Compilers andererseits gezeigt.

Auf Sprachebene wird der Fokus auf die Behandlung von Sichtbarkeitsbereichen und
den damit in Zusammenhang stehenden Namensr"aumen gelegt.  Die identifizierten
Basisoperationen zur Manipulation von Sichtbarkeitsbereichen sind in {\tlmin}
implementiert.  Sie bilden die Grundlage f"ur h"ohere Strukturierungskonzepte
wie Module und Schnittstellen.  Umgebungen sind als reflektive Schnittstelle des
{\tlmin} Systems realisiert.  Beide Konzepte zusammen bilden die Grundlage f"ur
die beispielhaft implementierte Modulverwaltung, welche die mit Hilfe von
Syntaxerweiterungen und Basisprimitiven formulierten Module und Schnittstellen
in Umgebungen verwaltet.  Sie bedient sich weiterhin der ebenfalls reflektiv
bereitgestellten Compilerschnittstelle, um die Module und Schnittstellen zu
"ubersetzen und zu binden.

Beim Entwurf der Compilerschnittstelle wird darauf geachtet, da"s sie die
einzelnen Phasen des "Ubersetzungsvorganges abbildet.  Auf diese Weise k"onnen
die in einem Compiler "ublicher\-weise vorhandenen Zwischenrepr"asentationen,
die als Funktionsergebnis und -argumente auftreten, verkn"upft, ausgewertet und
persistent abgelegt werden.  Dazu z"ahlen z.B.\ der Syntaxbaum oder der
ausf"uhrbare Code.  Mit entsprechenden Werkzeugen kann auf diesen
Datenstrukturen gearbeitet werden.

Das Bindeglied zwischen Sprachkonstrukten und Compilerschnittstelle ist in den
Umgebungen zu sehen.  Sie bieten auf der einen Seite die M"oglichkeit,
Bezeichner bzw.\ Bindungen zusammenzufassen und auf beliebige Weise zu
strukturieren.  Sinnvoll erscheinen hier besonders baumartige Strukturen, die
"ahnlich einem Dateisystem Namen organisieren.  Auf der anderen Seite fassen
Umgebungen die Menge an Bezeichnern zusammen, die der Compiler f"ur die
"Ubersetzung eines Ausdrucks ben"otigt.  An dieser Stelle ist allerdings die
zu fragen, ob das gegenw"artig verwendete Modell, da"s der Compiler die
referenzierten Bezeichner nur in einer flachen Struktur wie einer einzelnen
Umgebung aufsuchen kann, ausreichend ist.  Bezeichner, die sich in mehreren
Umgebungshierarchien befinden, k"onnen in diesem Modell in ihrer Gesamtheit
bisher nicht dem "Ubersetzungsvorgang bereitgestellt werden.

\section{Kommerzielle Relevanz}
Ein Vorteil der vorgestellten Modelle und Konzepte liegt in der Tatsache, da"s
mit Hilfe der flexiblen M"oglichkeiten in bezug auf unterschiedliche
Strukturierungskonzepte eine sehr effiziente Anpassung der Programmiersprache an
die in der Entwurfsphase angewendete Methode vorgenommen werden kann.  In diesem
Zusammenhang ist unter effizient in erster Linie zu verstehen, da"s die Verluste
an Struktur, Verst"andnis, Wartbarkeit und "Anderungsfreundlichkeit gering
gehalten und damit die bereits in der Einleitung aufgef"uhrten Prinzipien
Abstraktion, Strukturierung, Hierarchisierung, Modularisierung, Lokalit"at und
Wiederverwendbarkeit in hohem Ma"se unterst"utzt werden.  Durch die Verwendung
von Basisprimitiven, die unter Zuhilfenahme von Syntaxerweiterungen und durch
Kombination zu neuen Konstrukten geformt werden k"onnen, bleibt die
Kompatibilit"at zu vorhandenem Code gew"ahrleistet.  Dies ist unter
Kostengesichtspunkten ein gro"ser Vorteil, da auch bei einem Wechsel der
Spezifikations- oder Entwurfsmethodik bereits geschriebener Code nicht nutzlos
ist.  Vielmehr ist die Integration alter Programme durch die Kompatibilit"at der
weiterhin benutzten Kernsprache gegeben.  Insbesondere die Integration, Pflege
und "Uberarbeitung bestehenden Codes stellt in der informationstechnologischen
Praxis einen Kostenfaktor dar. Hier gibt diese Arbeit Ans"atze zur Minderung
dieser Kostenbelastung.

Ein weiteres Ergebnis dieser Arbeit sind die Erkenntnisse aus der Untersuchung
der Strukturierungskonzepte von C++ und der Entwicklungsumgebung des SAP R/3
Systems bzw.\ der Sprache ABAP/4, bei der durch die hohe Integration dieses
Systems bedingten Verzahnung von Sprache und Umgebung auch die
Strukturierungskonzepte betrachtet werden.  Im Fall von C++ kann bemerkt werden,
da"s besonders durch die erzwungene Kompatibilit"at zum nicht
objekt\-orientierten Vorg"anger C eine Reihe semantisch nicht sauber definierter
Mechanismen in die Sprache Einzug gehalten haben bzw.\ nicht beseitigt wurden.
So beseitigt z.B.\ die Verwendung von Namensr"aumen auf Sprachebene ein
Strukturierungsproblem gro"ser Systeme nur unzureichend, da es sich lediglich um
ein Schema zur Benennung handelt, welches das System direkt unterst"utzt, jedoch
keine M"oglichkeit bietet, Bezeichner zu verstecken.  Gleichzeitig wird
deutlich, da"s der Zwang zur Kompatibilit"at zu C viele dieser M"angel
verursacht.  Daraus l"a"st sich abermals die Notwendigkeit und die Richtigkeit
des in dieser Arbeit gew"ahlten Ansatzes erkennen, da hier trotz Verwendung
neuer Konzepte alter Code kompatibel bleibt.  Gleichzeitig sichert das
Vorhandensein elementarer Operationen die M"oglichkeit, auch zuk"unftige
Strukturierungsmechanismen abzubilden.

In der Programmiersprache ABAP/4 tritt eine "ahnliche Problematikauf , wie im
letzten Absatz in Zusammenhang mit C++ besprochen.  Zahlreiche im Laufe
der Entwicklungszeit dieses Systems von einem Makroassembler zu einer
Programmiersprache der vierten Generation hinzugef"ugten Konzepte tragen zu
unklaren semantischen Konstrukten bei.  Doch sorgt auch hier der Druck, der
durch zahlreiche Altanwendungen ausge"ubt wird, daf"ur, da"s sich die Situation
weiter versch"arft.  Und so wird auch bei SAP "uber neue L"osungen, wie die
Erweiterung der Systemarchitektur um die M"oglichkeit, Java zu interpretieren,
nachgedacht.  Man begibt sich jedoch damit auf einen Pfad der potentiellen
Inkompatibilit"aten zu Altsystemen, und so werden weiterhin teure
Migrationspfade zu neuen Systemen notwendig bleiben.

\section{Implementierung}
Diese Arbeit wird durch einen praktischen Teil begleitet.  Er umfa"st die
Implementierung der in Kapitel \ref{cha_envtlmin} vorgestellten
Compilerschnittstellen und die prototypische Realisierung der darauf aufbauenden
Modulverwaltung als ein Beispiel f"ur ein Programmierwerkzeug.  Die
Modulverwaltung ist als Teil einer Entwicklungsumgebung zu sehen.

Kapitel \ref{cha_strukturierung_tlmin} beschreibt die in die Sprache {\tlmin}
eingebauten Strukturierungsmechanismen.  Davon wurden die folgenden Konstrukte
vollst"andig implementiert:

\begin{itemize}
\item abgeschlossener Sichtbarkeitsbereich

\item selektiv eingef"uhrte Bezeichner

\item Umgebungen

\end{itemize}

Anhang \ref{cha_implementierung} legt einige Details dieser Implementierung dar.
Daraus wird deutlich, da"s f"ur die Realisierung dieser auf
Programmiersprachenebene angesiedelten "Anderungen Komponenten auf mehreren
Schichten des {\tlmin} Systems betroffen sind.  Dazu geh"ort insbesondere der
Typ"uberpr"ufer, der dergestalt erweitert ist, da"s die auf
Sichtbarkeitsbereiche bezogenen Operationen semantisch "uberpr"uft und
anschlie"send auf vorhandene Elemente des attribuierten Syntaxbaums abgebildet
werden k"onnen.  Die Realisierung von Umgebungen erfordert neben der
Bereitstellung einer entsprechenden Programmierschnittstelle und deren
Implementierung die Modifikation der Zwischencode-Generierung, um die
Anforderungen besonders im Hinblick auf das Zusammenspiel mit den
Compilerschnittstellen zu erf"ullen.  Zu diesen Anforderungen z"ahlt z.B.\ die
schrittweise (Teil-) "Ubersetzung von Ausdr"ucken in Umgebungen.

\section{Ausblick}
In dieser Arbeit liegt der Schwerpunkt auf Strukturierungskonzepten und hier
besonders auf dem Aspekt der Sichtbarkeit von Namen.  Abschnitt
\ref{subsec_binden} hat angedeutet, da"s neben der Betrachtung dieser
statischen Aspekte auch dynamische Gesichtspunkte eine Rolle spielen.  So
w"are in nachfolgenden Arbeiten zu untersuchen, ob und welche Mechanismen zur
Unterst"utzung z.B.\ von Bindungskonzepten erforderlich sind.  Es existieren in
{\tlmin} bislang noch keine ausreichenden sprachlichen und systemtechnischen
Mittel, um z.B.\ alle Techniken der Objektorientierung wie dynamische
Methodensuche ({\itshape dynamic dispatch}) zu formulieren.  Auf dieser Ebene
ist weitere Arbeit zu leisten.  Vorstellbar ist ein "ahnliches Vorgehen wie in
dieser Arbeit, so da"s ausgehend von Basismechanismen h"ohere Konzepte
realisiert werden k"onnen.  Diese k"onnten in einem abschlie"senden Schritt mit
den Ergebnissen dieser Arbeit kombiniert werden.

Auf der Ebene der Entwicklungsumgebung m"ussen in der konkreten Implementierung
des {\tlmin} Systems inbesondere Werkzeuge zur Unterst"utzung der
Teamentwicklung bereitgestellt werden.  So mu"s es z.B.\ Werkzeuge zum Verwalten
von Softwareeinheiten zwischen in einem Netzwerk verteilten Objektsystemen
geben, wenn man davon ausgeht, da"s ein Objektsystem als Entwicklungsbereich
f"ur jeweils einen Entwickler fungiert.  Alternativ m"u"ste die vorliegende
Objektspeichertechnologie um die Eigenschaft der Multiuserf"ahigkeit erweitert
werden, wenn davon ausgegangen wird, da"s mehrere Entwicklungsbereiche in einem
Objektsystem und -speicher zusammengefa"st werden.  In dieser Arbeit wird nur
die sprachliche Grundlage f"ur die Teamentwicklung gelegt.  Auch die
Auswirkungen bei Einbeziehung mehrerer kooperierender Objektsysteme mu"s in
diesem Zusammenhang untersucht werden.  In diesem Bereich angesiedelte Arbeiten
sind \cite{ramme} und \cite{schroeder2}.

Auch bei dem dieser Arbeit zugrundegelegten {\tlmin} System und dessen
Entwicklungswerkzeugen bleibt eine Reihe weiterer Arbeiten zu leisten.  Die
Ausstattung mit Werkzeugen wie z.B.\ einem Debugger oder einem grafischen
Frontend kann mit Hilfe der Compilerschnittstelle in Kombination mit Umgebungen
erreicht werden.

