\section{Leistungsgrenzen von M2Amiga}
\label{refEinschr}
Neben den in Abschnitt \ref{refErweiter} beschriebenen Erweiterungen
gibt es leider auch ein paar zu verschmerzende Wermutstropfen.
Ein Compiler ist immer auch einigen Einschr"ankungen unterworfen, sei
es durch die Implementation, das darunterliegende Betriebssystem oder
durch die Hardware, auf der der Compiler l"auft. Da das unvorbereitete
Auftreten solcher Einschr"ankungen sehr "argerlich sein kann, sind sie
im folgenden aufgelistet, auch wenn Sie kaum an die Grenzen stossen werden.

\begin{sloppy} % sonst zuviel Mist hier!/bp
\begin{itemize}
\item
  Maximale Bezeichnerl"ange: 1024~Zeichen
\item
  Maximale L"ange von Zeichenketten-Konstanten {\em ohne\/}
  Aneinanderreihung: 1024~Zeichen. Mit Aneinanderreihung
  (Operator "`{\tt +}"') sind Zeichenketten bis zu
  32767 Zeichen m"oglich. Zu beachten sind aber die beiden folgenden
  Beschr"ankungen.
\item
  Maximale Gr"osse des Codebereiches pro Modul: 31\,000 Byte
\item
  Maximale Gr"osse von Code- und Konstantenbereich {\bf zusammen}
  pro Modul: 32~KByte.

  Der Code und die typisierten Konstanten (nur Zeichenketten)
  m"ussen innerhalb eines Moduls im Bereich von 32K liegen. Die
  Gesamtgr"osse eines Programms, d.h.\ eines vollst"andig gelinkten Moduls,
  ist allerdings {\em nicht\/} eingeschr"ankt.
\item
  Maximale Anzahl importierter Moduln pro Compilationseinheit: 64.

  Ein Programm darf aus beliebig vielen Moduln bestehen, vorausgesetzt,
  jedes Modul importiert h"ochstens 64 weitere Moduln.
\item
  Maximale Anzahl von Strukturen pro Definitionsmodul: 1024.

  Jeder neue Typ (Aufz"ahlungstypen, Verbunde, Felder, Unterbereiche) bildet
  eine neue Struktur. Es spielt dabei keine Rolle, wie oft eine Struktur
  auftritt. Entscheidend ist einzig die Deklaration. Das strikte
  Einf"uhren von Typnamen reduziert die Anzahl der Strukturen.
\item
  Maximaler Speicherbedarf aller Variablen pro G"ultigkeitsbereich: 2~GByte.

  Die Einschr"ankung pro G"ultigkeitsbereich bedeutet, dass in einem Modul
  mit einem Variablenbedarf von 2~GByte auch jede Prozedur wiederum
  Variablen bis zur Gr"osse von 2~GByte deklarieren kann, wobei dann eine
  entsprechende Stackgr"osse gesetzt sein muss, da lokale Variablen auf
  dem Stack angelegt werden.
\item
  Maximaler Speicherbedarf von \near-Variablen pro Compilationseinheit:
  32~KByte.

  Wenn das Modul im \near-Modus kompiliert wird, sind alle globalen
  Variablen diese Moduls auch \near. Falls dies nicht ausreichen
  sollte, muss ein kleiner Ef"|fizienzverlust in Kauf genommen
  und das Modul im \far-Modus kompiliert werden, oder man weicht
  auf Zeiger aus und alloziert die Variablen zur Laufzeit.
\item
  Maximaler Speicherbedarf von \near-Variablen pro Programm: 64~KByte.

  Die "Uberschreitung dieses Wertes kann nur der Linker feststellen.
  Falls der Fehler auftritt, sollten einzelne Moduln
  im \far-Modus kompiliert werden.
\item
  Maximale Anzahl von Konstanten je Aufz"ahlungstyp: 4~294~967~295.
\item
  Maximale L"ange des Modulnamens: 31~Zeichen.
\item
  Maximale Anzahl {\tt EXIT}-Anweisungen in {\tt LOOP}-Anweisung: 16.

  Der Compiler kann bis zu 16 unbearbeitete {\tt EXIT}-Anweisungen handhaben.
  Eine {\tt EXIT}-Anweisung gilt dann als unbearbeitet, wenn die zur
  {\tt LOOP}-Anweisung geh"orige {\tt END}-Anweisung noch nicht erreicht wurde.
\item
  Maximale Tiefe verschachtelter {\tt WITH}-Anweisungen: 3.
  Zu beachten ist, dass bei 3 ineinander verschachtelter
  {\tt WITH}-Anweisungen entsprechend drei Adress-Register
  blockiert sind. Daher ist es dann {\em nicht\/} mehr m"oglich,
  Variablen, die mehr als ein Langwort im Speicher belegen ---
  also {\tt RECORD}s oder {\tt ARRAY}s --- einander
  zuzuweisen. Diese Operation ben"otigt n"amlich ebenfalls
  zwei Adress-Register. 
\item
  Ausdrucks-Verschachtelungstiefe: 5 {\tt REAL}-Terme oder
  2 {\tt LONG\-REAL}-Terme
  oder 7 {\tt LONG\-REAL}-Terme mit 68881/882-FPU oder 68040-CPU.
\item
  Maximale Anzahl von F"allen in einer {\tt CASE}-Anweisung: 128.

  Oftmals kann die Anzahl von Fallunterscheidungen reduziert werden. Die
  Marke "`\verb|1..5:|"' entspricht n"amlich einem Fall, w"ahrend die
  Marke "`\verb|1,2,3:|"' drei F"allen entspricht.
\item
  Maximale {\tt SET}-Gr"osse: 32~Elemente.
% Hinweis Definition entf"allt, neuer Standard will mind. 128..256!!
\item
  Funktionsresultate: {\tt ARRAY}- und {\tt RECORD}-Typen sind nicht erlaubt.
\end{itemize}
\end{sloppy}

