|
2.7 Übersetzungsreihenfolge
In der Semantik von Ada wird eine Übersetzungsreihenfolge vorgegeben,
deren Einhaltung durch die Programmbibliothek zu überwachen ist.
Die Grundregel besteht darin, daß eine Bibliothekseinheit
übersetzt sein muß, bevor sie von einer anderen Einheit (Bibliothekseinheit
oder sekundäre Einheit) benutzt werden kann, d. h.:
- zuerst müssen alle Bibliothekseinheiten übersetzt worden sein,
von denen eine betrachtete Übersetzungseinheit abhängt;
- bei generischen Einheiten und solchen Einheiten, für die das Pragma inline
zutrifft, muß auch der Rumpf (d. h. eine sekundäre Einheit) vor der
Referenzierung übersetzt sein;
- Spezifikationen von Übersetzungseinheiten müssen vor ihren korrespondierenden
Rümpfen übersetzt werden, da die Abhängigkeiten der Spezifikation
auch für den Rumpf gelten;
- Falls eine Einheit über Untereinheiten (gekennzeichnet durch das Schlüsselwort
separate) verfügt, so muß die Einheit vor ihren Untereinheiten übersetzt
werden.
Ansonsten existieren für die Übersetzungsreihenfolge von Rümpfen
keine Vorschriften.
Der Übersetzungsaufwand, der bei einer Codeveränderung erforderlich
ist, hängt entscheidend von der Aufteilung der Übersetzungseinheiten
auf Dateien ab. Falls der verwendete Übersetzer nicht inkrementell arbeitet,
ist der Übersetzungsaufwand um so größer, je mehr Übersetzungseinheiten
in einer Datei gespeichert sind. In diesem Fall werden auch alle unveränderten
Programmeinheiten der Datei übersetzt und davon abhängige Übersetzungseinheiten
obsolet gemacht. Dadurch sind also zusätzliche, aber eigentlich "unnötige",
Übersetzungsläufe erforderlich, da es sich um unveränderten Quellcode
handelt und somit auch kein veränderter Objektcode entstehen kann.
Hierzu gilt:
- Um die Bestimmung der erneut zu übersetzenden Einheiten im Falle einer
Veränderung des Codes muß sich der Benutzer eines Ada-Systems im allgemeinen
nicht selbst kümmern. Diese Aufgabe wird durch den Bibliotheksmechanismus
bzw. durch dessen Verwaltungsprogramme erfüllt.
- Falls der Übersetzungslauf nicht fehlerfrei terminiert, kann kein ausführbares
Programm erzeugt werden. Der Zustand der Programmbibliothek ist verändert,
weil alle fehlerfrei übersetzten Programmeinheiten eingetragen wurden. Nach
Behebung des Fehlers muß der Übersetzungslauf daher nicht wieder von
vorne beginnen. Er kann bei der zuletzt fehlerhaften Übersetzungseinheit
fortgesetzt werden.
|