\contentsline {chapter}{\numberline {1.}Einleitung}{1} \contentsline {section}{\numberline {1.1}Gliederung}{2} \contentsline {chapter}{\numberline {2.}Die Sprache TooL in der persistenten Programmierumgebung Tycoon}{3} \contentsline {section}{\numberline {2.1}TML: eine maschinenunabh\active@dq \dq@prtct{a@}ngige Zwischensprache}{4} \contentsline {section}{\numberline {2.2}TVM: eine portable virtuelle Maschine}{5} \contentsline {section}{\numberline {2.3}TSP: eine portable Objektspeicherschnittstelle}{5} \contentsline {section}{\numberline {2.4}TooL im Tycoon System}{6} \contentsline {chapter}{\numberline {3.}Die Programmiersprache TooL}{7} \contentsline {section}{\numberline {3.1}Objektorientierte Programmierung}{7} \contentsline {section}{\numberline {3.2}Klassen und Vererbung}{7} \contentsline {section}{\numberline {3.3}Vererbung und der Aufruf von Methoden}{9} \contentsline {section}{\numberline {3.4}Reine Objektorientierung}{10} \contentsline {section}{\numberline {3.5}Das TooL Typsystem}{12} \contentsline {subsection}{\numberline {3.5.1}Strukturelle Typisierung}{12} \contentsline {subsection}{\numberline {3.5.2}Der Typ Self}{12} \contentsline {subsection}{\numberline {3.5.3}Subtypisierung}{13} \contentsline {subsection}{\numberline {3.5.4}Die \active@dq \dq@prtct{A@}hnlichkeitsrelation zwischen Objekttypen}{14} \contentsline {subsection}{\numberline {3.5.5}Subtypbegrenzung und \active@dq \dq@prtct{A@}hnlichkeitsbegrenzung}{15} \contentsline {subsection}{\numberline {3.5.6}Typparameter}{15} \contentsline {chapter}{\numberline {4.}Ans\active@dq \dq@prtct{a@}tze zur Optimierung objektorientierter Sprachen}{16} \contentsline {section}{\numberline {4.1}Klassenabsch\active@dq \dq@prtct{a@}tzung}{16} \contentsline {section}{\numberline {4.2}Inline Caching}{17} \contentsline {section}{\numberline {4.3}Klassenanalyse und Splitting}{18} \contentsline {section}{\numberline {4.4}Profilgesteuerte Optimierung}{19} \contentsline {section}{\numberline {4.5}Empf\active@dq \dq@prtct{a@}ngerspezifische \active@dq \dq@prtct{U@}bersetzung}{21} \contentsline {chapter}{\numberline {5.}Lambdakalk\active@dq \dq@prtct{u@}l im Fortsetzungsstil als Zwischensprache}{22} \contentsline {section}{\numberline {5.1}TML}{23} \contentsline {section}{\numberline {5.2}Die Transformation von TooL nach TML}{25} \contentsline {section}{\numberline {5.3}Reduktion als grundlegendes Optimierungprinzip von CPS}{27} \contentsline {subsection}{\numberline {5.3.1}Beta-Reduktion}{27} \contentsline {chapter}{\numberline {6.}Der TooL-Optimierer}{30} \contentsline {section}{\numberline {6.1}Profiling}{31} \contentsline {section}{\numberline {6.2}Aufbau eines empf\active@dq \dq@prtct{a@}nger- und argumentspezifisch optimierten Methoden\discretionary {-}{}{}caches}{32} \contentsline {section}{\numberline {6.3}Markierte Typen}{32} \contentsline {section}{\numberline {6.4}Klassenanalyse}{34} \contentsline {subsection}{\numberline {6.4.1}Der Analyse-Algorithmus}{34} \contentsline {subsection}{\numberline {6.4.2}Ein Beispiel}{35} \contentsline {subsection}{\numberline {6.4.3}Verbreitung von Klasseninformation}{36} \contentsline {subsection}{\numberline {6.4.4}Optimierung durch Beta-Reduktion}{37} \contentsline {subsection}{\numberline {6.4.5}Aufruf einer spezialisierten Methode}{38} \contentsline {section}{\numberline {6.5}Elimination von Endrekursion}{39} \contentsline {chapter}{\numberline {7.}Codegenerierung f\active@dq \dq@prtct{u@}r eine virtuelle Registermaschine}{45} \contentsline {section}{\numberline {7.1}Die Architektur der Tycoon Registermaschine}{46} \contentsline {section}{\numberline {7.2}Codegenerierung f\active@dq \dq@prtct{u@}r die Registermaschine}{48} \contentsline {subsection}{\numberline {7.2.1}Applikationen}{48} \contentsline {subsection}{\numberline {7.2.2}Abstraktionen}{49} \contentsline {subsubsection}{Wechselseitig rekursive Abstraktionen}{52} \contentsline {section}{\numberline {7.3}Registerallokation}{52} \contentsline {subsection}{\numberline {7.3.1}Lebendigkeitsanalyse}{53} \contentsline {subsection}{\numberline {7.3.2}Registerzuordnung}{54} \contentsline {subsection}{\numberline {7.3.3}Zuteilung der Register}{55} \contentsline {chapter}{\numberline {8.}Quantitative Ergebnisse}{58} \contentsline {section}{\numberline {8.1}Die Performanz von TooL}{58} \contentsline {subsection}{\numberline {8.1.1}Performanzsteigerungen durch Optimierungen}{59} \contentsline {subsection}{\numberline {8.1.2}Codezuwachs durch Optimierungen}{61} \contentsline {subsection}{\numberline {8.1.3}TooL im Vergleich zu TL und Java}{62} \contentsline {subsubsection}{TooL vs. TL}{62} \contentsline {subsubsection}{TooL vs. Java}{63} \contentsline {subsection}{\numberline {8.1.4}Fazit}{63} \contentsline {section}{\numberline {8.2}Performanzvergleich zwischen der Registerarchitektur und der Kellerarchitektur}{64} \contentsline {subsection}{\numberline {8.2.1}Auswirkung der verschiedenen Interpreterimplementierungen}{64} \contentsline {subsection}{\numberline {8.2.2}Benchmarks}{64} \contentsline {subsection}{\numberline {8.2.3}Aufwand der Registerallokation}{65} \contentsline {subsection}{\numberline {8.2.4}Fazit}{66} \contentsline {chapter}{\numberline {9.}Zusammenfassung und Ausblick}{67} \contentsline {chapter}{\numberline {A.}Optimierungsphasen am Beispiel der {\psf while}-Methode}{69} \contentsline {chapter}{\numberline {B.}TML-Primitive}{72} \contentsline {section}{\numberline {B.1}Urspr\active@dq \dq@prtct{u@}ngliche TML-Primitive im Tycoon-Backend}{72} \contentsline {section}{\numberline {B.2}TooL-spezifische TML-Primitive}{73} \contentsline {chapter}{\numberline {C.}TRM-Befehlssatz}{74} \contentsline {chapter}{Literaturverzeichnis}{75}