\chapter{Einleitung}

Im Kern jedes Softwareentwurfs  steht die Modellierung 
von Probleml"osungen und deren Abbildung auf
konkrete Mechanismen eines Informationssystems. 
Modellierung und Abbildung k"onnen dabei je nach Mechanismus
mehr oder weniger  konzeptuell voneinander
getrennt sein. Als einer der Vorz"uge eines
objektorientierten Ansatzes gilt, da\3
ein objekt\-orientiertes \mbox{Modell} direkt auf
Elemente objektorientierter Programmiersprachen
abgebildet werden kann. Modellierungs-  und Abbildungsmechanismus 
besitzen  den gleichen syntaktischen und semantischen Stamm,
so da\3 Modell und Implementation stark gekoppelt sind.
Der Grad der  Vereinheitlichung von Modell und
Abbildung wird von der Ausdrucksm"achtigkeit der Programmier\-sprache 
und ihrer N"ahe zur reinen Objektorientierung  beeinflu\3t.

Rein objektorientierte Sprachen kommen allerdings in der
Praxis  seltener zum Einsatz als hybride Sprachen mit
imperativen und objektorientierten Elementen, denn
ihre Ausf"uhrungsgeschwindigkeit unterliegt 
einem aus der Wissensrepr"asentation bekannten 
\glqq{\em tradeoff between the expressiveness of
a representational language and its computational
tractability}\grqq \cite{LevesqueBrachman85}.
Die Ausdrucksm"achtigkeit rein objektorientierter Sprachen wird
erkauft durch eine schwache Performanz, die den Anspr"uchen
realer Anwendungen oft nicht gen"ugt.

Fortschritte in Optimierungstechniken haben den Leistungsr"uckstand
rein objekt\-orientierter Sprachen 
in der j"ungeren Zeit entschieden verringert; so wird 
f"ur die Sprache SELF berichtet\cite{Hoelzle94},
da\3 SELF-Programme die halbe Ausf"uhrungsgeschwindigkeit von C++,
einer der schnellsten hybriden objektorientierten Sprachen, erreichen.
 
Bemerkenswert ist dabei  die Tatsache, da\3 die Optimierungstechniken
im SELF-"Ubersetzer
den  rein objektorientierten Charakter von SELF  "uber Optimierungen
hinaus erhalten. 
F"ur die neu entwickelte, rein objektorientierte Sprache TooL\footnote{Tycoon
object-oriented Language} 
wurde im Rahmen der vorliegenden Diplomarbeit ein Optimierungsverfahren
entwickelt, das ebenfalls  unter Wahrung der rein objektorientierten
Natur zu 
zwei- bis dreifach k"urzeren Ausf"uhrungszeiten f"uhrt. 

Zwei Ans"atze zur Leistungssteigerung werden untersucht:
die maschinenunabh"angige Optimierung auf einer CPS-Zwischenrepr"asentation,
und die M"oglichkeit, durch bessere Codegenerierung k"urzere Laufzeiten 
auf einer virtuellen Maschine zu erzielen.
Dabei zeigt sich, da\3 ein recht allgemein gehaltener Optimierungsansatz
gute Ergebnisse erzielen kann und die negativen Effekte der reinen Objektorientierung
einged"ammt werden k"onnen. Ein erster Leistungsvergleich mit der
nicht-objektorientierten,
verwandten Sprache TL\footnote{Tycoon Language} ergibt, da\3 optimierte TooL-Programme im Schnitt
ein Drittel der Leistung von optimierten TL-Programmen erbringen. Da nicht
alle Optimierungsm"oglichkeiten rigoros ausgenutzt werden, besteht die 
Erwartung, dieses recht gute Resultat noch verbessern zu k"onnen.

Weniger Auswirkungen auf die Leistung hat die Architektur einer
interpretierenden \mbox{virtuellen} Maschine und die dazugeh"orige
Codegenerierungsstrategie. Eine Erkenntnis
aus diesem Teil der Arbeit ist, da\3 f"ur den Einsatz einer
virtuellen Maschine die aus der Mode gekommene Kellerarchitektur
eine geeignete Ausf"uhrungsplattform ist, da diese recht einfache
Code\-generierungs\-verfahren zul"a\3t.


\section{Gliederung}

Die Sprache TooL ist Bestandteil der persistenten Programmierumgebung 
Tycoon\footnote{TYped Communicating Objects in Open eNvironments}, deren
wesentliche Merkmale in Kapitel \ref{TycLayers} aufgef"uhrt werden.

In Kapitel \ref{TooL} werden neben einer kurzen Einf"uhrung
in objektorientierte Begriffe zwei \mbox{wichtige} Aspekte von TooL
behandelt: die Bedeutung und das  Ausma\3 der reinen Objekt\-orientierung
in TooL und das Typsystem von TooL, das eine Einschr"ankung durch die
Optimierungs\-technik der vorliegenden Arbeit 
erf"ahrt.


Eines der Hauptziele der Optimierung objekt\-orientierter Sprachen besteht darin,
Klassen\-information zu gewinnen, um mit ihrer  Hilfe  dynamische 
Methoden\-aufrufe zu eliminieren. Die Techniken verschiedener "Ubersetzer
werden in Kapitel \ref{History} dargestellt, damit eine Diskussions\-grundlage
f"ur den Optimierungsansatz dieser Arbeit, der in Kapitel \ref{TheOptimizer}
vorgestellt wird, besteht. 


Die Zwischensprache und Optimierungsrepr"asentation
der "Ubersetzer f"ur TL und TooL ist
eine Variante des Lambdakalk"uls im Fortsetzungsstil,
die auch Grundlage der optimierenden 
Transformationen darstellt. Auf diese Zusammenh"ange wird in Kapitel \ref{TML}
eingegangen. 

Die Frage einer Leistungsteigerung durch den Einsatz einer 
virtuellen Registerarchitektur mit der dazugeh"origen
Codegenerierung ist das Thema von Kapitel \ref{CodeGen}. Die Berichterstattung
der Leistung der Registermaschine und der Optimierungsergebnisse
findet in Kapitel  \nolinebreak \ref{Benchmarks} statt, gefolgt von einer Zusammenfassung
und einem Ausblick in Kapitel \ref{resumee},  in dem die
Erfahrungen dieser Arbeit bewertet werden.
 


