Feldaggregate

Christoph Karl Walter Grein

Liebe Lady Ada,

warum darf ich nicht folgendes schreiben:

wo doch

legal ist?

Ein Ratsuchender


Lieber Ratsuchender,

wie ich sehe, bist du noch meinem guten alten Freund von 1983, M. Jean Ichbiah, hörig – im Grunde musst du also ihn fragen. Darf ich dich einladen, statt dessen von jetzt an meinem neuen Freund von 1995, Mr Tucker Taft, zu Willen zu sein? 1

Vielleicht allerdings gereichen dir ein paar Zeilen zur Erleuchtung? Folgende Zuweisungen sind alle äquivalent:

Das erste Aggregat erhält seine Grenzen aus der Typdefinition (der Index der ersten Komponente ist gleich dem ersten Indexwert, hier also Integer'First, die Grenzen gleiten bei der Zuweisung), das zweite aus dem Zusammenhang (also X'First für die erste Komponente), beim dritten sind sie explizit angegeben.

Doch ist auch folgendes erlaubt:

Im ersten Fall stimmt die Länge, die Grenzen gleiten wieder bei der Zuweisung – das Ergebnis ist dasselbe wie oben. Im zweiten Fall stimmt jedoch die Länge nicht, die Zuweisung ist tatsächlich aber legal (das heisst, sie muss übersetzt werden; der Compiler darf allerdings, wenn er mag, eine Warnung ausgeben), nur muss sie bei der Ausführung Constraint_Error auslösen.

Wenn du jetzt also, mein lieber Ratsuchender, M. Ichbiah sagen kannst, welche Grenzen dein Aggregat

haben soll, magst du ihn wohl schelten.

Mr Taft wird dir dann erläutern, das sei doch ganz einfach – Aggregate mit others gleiten nie 2.

Womit dann folgende Aggregate in Ada95 korrekt sind:

mit denselben Ergebnissen wie

wohingegen

Constraint_Error auslöst wegen unpassender unterer Grenze.

Zum Abschluss magst du vielleicht selbst noch einige Zuweisungen für Ada83 und Ada95 untersuchen und feststellen, welche der Anweisungen illegal sind (d.h. vom Compiler zurückgewiesen werden müssen) und warum, welche gültig sind (das heißt übersetzt werden), aber Constraint_Error auslösen, und welche anstandslos ausgeführt werden?

Deine Lady Ada

1 Jean Ichbiah steht für die Regeln in Ada83, Tucker Taft für die in Ada95.
2 Dies ist eine neue Regel in Ada95, die das Eingangsproblem löst.


Lösung