\section{Zustand}
\label{sec_zustand}

"Ubersetzte Komponenten, insbesondere Moduln und Schnittstellen,
k"onnen sich in verschiedenen Zust"anden befinden.  Je nach Art
der Komponente hat dies unterschiedliche Bedeutungen.

Bibliotheken werden in dieser Diskussion nicht weiter betrachtet.  Sie
k"onnen sich entweder im Objektspeicher befinden und dann
Sichbarkeitsbereiche f"ur anderen Komponenten festlegen oder aber
nicht geladen sein.

\begin{figure}[htb]
\centering\mbox{\epsfig{file=zustand.eps}}
\caption{Zust"ande in denen sich ein Modul befinden kann.}
\label{abb_zustand}
\end{figure}

\subsection{Modul}

In Abschnitt~\ref{sec_modul} wurde ausf"uhrlich erl"autert, da"s ein
Modul durch eine Funktion repr"asentiert wird, die einen Tupelwert
zur"uckgibt.  Diese Funktion kann nun in den Objektspeicher {\itshape
geladen}\/ werden.  Es ist der erste Zustand, den ein Modul annehmen
kann.

Im n"achsten Schritt kann die Funktion, parametrisiert mit den Moduln
und Schnittstellen, die sie importiert, ausgef"uhrt werden.  Das Modul
befindet sich dann im Zustand {\itshape gebunden}.  Es bzw.\ sein
Modulwert kann nun von anderen Moduln und Schnittstellen, in dessen
Importliste es sich befindet, referenziert werden.

Soll der Wert des Moduls f"ur den Benutzer sichtbar sein, so mu"s er
an einen Namen gebunden werden.  Dies bedeutet, da"s der Wert des
Moduls im Toplevel-Vektor eingetragen wird.  Das Modul ist damit
{\itshape definiert}.

Aus der Aufstellung wird deutlich, da"s sich die Zust"ande
voraussetzen: Ein Modul kann nur gebunden sein, wenn es auch geladen
ist.  Ebenso kann nur eine Bindung auf dem Toplevel definiert werden
f"ur ein Modul, das bereits gebunden ist.  Dies geschieht meist in
einem einzigen Schritt durch Import des Moduls auf dem Toplevel (vgl.\
Abschnitte~\ref{sec_toplevel} und~\ref{sec_import}).

\subsection{Schnittstelle}

Im Gegensatz zu einem Modul stellt eine Schnittstelle Typinformation
dar.  Diese kann in den Objektspeicher {\itshape geladen}\/ werden und
ist damit f"ur andere Komponenten referenzierbar.

Ein weiterer Unterschied zum Modul besteht im Zustand {\itshape
gebunden}.  Diesen kann eine Schnittstellen nicht annehmen, da sie
keinen Wert sondern einen Typ repr"asentiert.  Z.~B.\ wird in einem
Modul durch

\begin{quote}
{\ttfamily import :List}
\end{quote}

\noindent
nur die Schnittstelle des Moduls {\itshape List}\/ bekanntgemacht.  Es
werden also nur Typinformationen referenziert, die zur
"Ubersetzungszeit relevant sind nicht aber zur Laufzeit.  Die
Implementation von dort deklarierten Funktionen etc.\ kann auf diese
Weise also nicht angesprochen werden.  Folglich wird die Schnittstelle
(ohne Implementation) zum Evaluieren des Modulwertes nicht ben"otigt.

Wie ein Modul kann eine Schnittstelle bzw.\ die Typinformation an
einen Namen (den Schnittstellennamen) gebunden und auf dem Toplevel
definiert werden.

