% Studienarbeit von Marc Weikard
%
% Universitaet Hamburg
% Fachbereich Informatik
% Arbeitsbereich DBIS
%
% Kapitel: Vorarbeiten


\chapter{Vorarbeiten}
\label{Kap. Vorarbeiten}

Zwei Techniken werden in dieser Arbeit vereint, zum einen die Generierung von Maschinencode f"ur persistente Programmiersprachen und zum anderen die dynamische Codegenerierung aus einer plattformunabh"angigen Repr"asentation, wie sie von Smalltalk-80 \cite{DS84} und Java \cite{GM95} bekannt ist.

\section{Maschinencodegenerierung in persistenten Systemen}
\label{Abs. MC in persitenten Systemen}

Maschinencodegenerierung f"ur die persistente, polymorphe Programmiersprache TL (\s{Tycoon Language}) wird bereits in \cite{Math92} beschrieben. Grundlage der Implementierung ist dort eine "altere, noch auf Quest \cite{Card90} basierende Version des Tycoon-Systems.

Ausgangspunkt der Codegenerierung ist die Zwischenrepr"asentation TML (\s{Tycoon Machine Language}), eine auf dem $\lambda$-Kalk"ul basierende Programmdarstellung, in die der TL-Quellcode nach erfolgter Syntax- und Typ"uberpr"ufung "ubersetzt wird. Aus dieser Darstellung wird -- alternativ zur Abarbeitung durch einen TML-Interpreter -- C-Quellcode erzeugt, welcher mittels eines externen C-"Ubersetzers in Maschinencode transformiert und direkt ausgef"uhrt wird.

Im Zuge der Entwicklung eines von Quest unabh"angigen Systems wurden, vor allem in Zusammenhang mit der Umgestaltung des Laufzeitsystems, zum Teil drastische "Anderungen und Erweiterungen durchgef"uhrt, so da"s die bisherige Methode, Maschinencode zu generieren, aufgegeben werden mu"ste:
\begin{itemize}
\item Umstellung auf Bytecode \\
Die Einf"uhrung einer neuen virtuellen Maschine, die nicht mehr auf TML sondern auf einer plattformunabh"angigen, bytecodierten Darstellung von Programmen operiert, stellt die wichtigste "Anderung des Laufzeitsystems dar. Eine modifizierte Variante von TML ist zwar weiterhin im System integriert, sie ist allerdings nur noch eine Zwischenrepr"asentation in der "Ubersetzungsphase von TL zu Bytecode und wird ausschlie"slich zu Optimierungszwecken verwendet.

\newpage

\item Erweiterung der Funktionalit"at \\ 
Mit der Umstellung auf ein neues Laufzeitsystem wurde die M"oglichkeit geschaffen, dessen Funktionalit"at gegen"uber dem alten System zu verbessern. Erw"ahnenswert sind hierbei die Unterst"utzung paralleler leichtgewichtiger Prozesse (\e{threads}) und die Erweiterung des Persistenzkonzeptes auf diese Prozesse.  
\item Neue innovative Konzepte \\
Die plattformunabh"angige Darstellung von Daten, Programmen und Prozessen er\-m"oglicht innovative Konzepte hinsichtlich des Informationsaustauschs in heterogenen Netzwerken. Persistente Prozesse und die mit ihnen assoziierten Daten k"onnen zwischen unterschiedlichen Rechnerarchitekturen zur Laufzeit migrieren und im Netz verteilt werden.
\end{itemize}
Diese im Vergleich zur alten Tycoon-Version ge"anderten Vorraussetzungen bedingen einen neuen Ansatz f"ur der Implementierung eines Maschinencodegenerators: die Abkehr von der bisherigen statischen\footnote{statisch: TL-"Ubersetzer erzeugt Machinencode, dynamisch: Codeerzeugung erst unmittelbar vor der \mbox{Programmausf"uhrung}} Codeerzeugung hin zu einer dynamischen, \e{just in time} "Ubersetzung der plattformunabh"angigen Programmrepr"asentation in Maschinencode.  


\section{{\rm\em just in time} "Ubersetzung f"ur Java}
\label{Abs. java just in time}

Java von \fn{Sun Microsystems} ist eine Programmiersprache, die die Entwicklung von Applikationen in heterogenen Netzwerkumgebungen in effizienter Weise erlaubt. Java Programme m"ussen aus diesem Grund auf einer Reihe unterschiedlicher Betriebssysteme und Rechnerarchitekturen ablaufen.

Der Java-"Ubersetzer erzeugt, genau wie das TL-"Ubersetzer des Tycoon-Systems, plattform\-unabh"angigen Bytecode einer virtuellen Maschine. Die Distribution von Daten und Programmen zwischen unterschiedlichen Architekturen wird durch die eindeutige Repr"asentation des Bytecodes und der Basisdatentypen erm"oglicht. Diese Plattformunabh"angigkeit ist wie im Tycoon-System mit dem Nachteil verbunden, da"s Bytecode durch einen Interpreter ausgef"uhrt wird und so gegen"uber Maschinencode zu einer Performanzeinbu"se f"uhrt. 

Abhilfe versprechen u.a. die Firmen \fn{Borland} und \fn{Symantek}\footnote{http://cafe.symantec.com/} durch spezielle \e{just in time} Compiler f"ur ihre Java-Entwicklungsumgebungen. Anstatt den Bytecode zu interpretieren, wird dieser unmittelbar vor der Ausf"uhrung in Maschinencode "ubersetzt und direkt vom Prozessor abgearbeitet. Der erreichbare Geschwindigkeitsgewinn soll nach Angaben von \fn{Borland} bei typischen Applikationen ca. den Faktor 5-10 erreichen, bei rechenintensiven Anwendungen zum Teil auch deutlich dar"uber liegen.




