Ada 2020 (51日目) - 7月30日の電子会議の結果

7月30日に行われた電子会議の議事録が公開されました。

またもNonblockingアスペクトの修正

49日目で紹介した変更で Nonblocking はgenericの引数との論理積が取られるようになりました。 今回の変更では DispatchingUse_Formal (下記)も反映されるようになります。

文面も全面的に整理されました。

またもGlobalアスペクトの記法の修正

48日目do または use を使った構文が追加されましたが、予約語の再利用をやめて専用のアスペクトになりました。

type T is abstract tagged null record;
procedure Primitive (Object : in out T) is abstract;

procedure Proc1 (Object : in out T'Class)
   with Dispatching => Primitive (Object);

procedure Proc1 (Object : in out T'Class) is
begin
   Primitive (Object);
end Proc1

多態に用いるオブジェクトのみを指定する場合は with Use_Formal => Object; となります。 多態しないことを明示するには with Use_Formal => null; 、全ての引数を多態に用いることを示すには with Use_Formal => all; と書くこともできます。

引数のことまで Global に詰め込むのも変でしたので分離されて良かったと思います。 (まだ overriding は残ってますが。)

それからpragma RestrictionsNo_Hidden_Indirect_Globals が追加されていたのを見逃していましたのでこれも48日目に追記しました。

その他サンプルコード等の修正

例によってサンプルコード等の修正がひとつのAI(AI12-0386-1)で行われています。

その他特記事項

Generalize prefix views

Generalize prefix viewsがAda 2020に間に合わずに見送られそうです……。

問題点としましてはaccess型にまでドット記法を許してしまうと非互換が起きてしまいます。

declare
   type T is tagged null record;
   procedure Proc (X : T) is
   begin
      Ada.Text_IO.Put_Line ("T");
   end Proc;
   type A is access T;
   procedure Proc (X : A) is
   begin
      Ada.Text_IO.Put_Line ("A");
   end Proc;
   Object : A := new T;
begin
   Object.Proc;

今までは T 型のプリミティブの Proc が呼ばれていました。 全ての型にドット記法が使えるとなると A 型のプリミティブの Proc が優先して呼ばれてしまいます。

access型だけを除外するにもprivate型の実体がaccess型の場合もありますのでうまくありません。

Prefix_Notation アスペクトや record private みたいな記法も提案されましたが、Tucker先生が無変更で使えることにこだわっておられました。 まあ確かに実用上は既存のprivate型ほぼ全てに書き足していくことになるでしょうしそんな作業やりたくないですし。 実際 NonblockingGlobal で辟易しておられるでしょうから。

Add “parallel” to aggregate iterators

も難航中のようです。

'Parallel_Reduce の代わりという枠を超えてしまったのが原因? コンテナにも変更が必要な上にaggregate式の並列化がありならquantified式もありでは、いや何でもかんでもやろうとすんな、みたいな。

引き続き検討は続けられるそうです。

Procedural iterators for generic procedures

も見送られそうです。

もし採用されていれば部分的にでも暗黙のインスタンス化ができるようになりましたが、まあ入れるならきちんと入れて欲しいですし。

関連AI