てきとう

てきとう

Gem #1

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);