http://www.adacore.com/2007/05/14/gem-1/
「limitedでもaggregate使えるようにしたよ!」
例えば、以下のTとX,Y,Zを考えたとき、
type T is limited record A:Integer:=42; B:Character:='@'; end record; X:T; Y:T:=(A=>99,B=>'0'); Z:T:=(A=>64);
Ada95では、
X:T; -- 正しい。 X.A=42, X.B='@' Y:T:=(A=>99,B=>'0'); -- コンパイルエラー Z:T:=(A=>64); -- コンパイルエラー
となるわけです。
しかし、Ada05ではlimited型でもaggregateで初期化できるため、
X:T; -- 正しい。 X.A=42, X.B='@' Y:T:=(A=>99,B=>'0'); -- 正しい。 X.A=99, X.B='0' Z:T:=(A=>64); -- コンパイルエラー
Yもコンパイルが通ります。
aggregateなので型が合えばothersでまとめて初期化ができます。
type U is limited record A,B:Integer; end record; V:U:=(others=>42);