Ada2012

いつの間にかAda2012の規格が公開されていました。
http://www.ada-auth.org/standards/ada12.html
あれ……with private/end private/limited new論争とか、foreachのようなものとか、GNATがフライング実装したif式/case式とか、VectorsのReference関数とか、面白そうなissueほど反映されてない気が……。
ま、まだ2年も先だし、これから追加されるに違いない、そう信じよう。汗が出るのは暑いせいですよ、きっと。

とりあえず、面白そうなのを紹介。

use all type http://www.ada-auth.org/standards/12aarm/html/AA-8-4.html

  • Ada86 …… useで丸ごとパッケージ全部の名前空間をマージ。→ 名前空間の汚染が酷過ぎる。useは禁止。→あれ、演算子オーバーロード使えないんじゃね?
  • Ada95 …… use typeで演算子だけ持ってこれる。これで演算子オーバーロードも使えるよ!でも他はパッケージ名からちゃんとだらだら長く書こうね!
  • Ada2005 …… 進展なし。
  • Ada2012 …… プリミティブは型に属してるんだから混同することもないよね。use all typeでプリミティブもパッケージ名無しで使えるように!

前にこれが正しいと主張していた論文を読んだ気がします。今導入されている形とは別のオブジェクト指向モデルを提案してるやつだったでしょうか、忘れた。

Quantified Expressions http://www.ada-auth.org/standards/12rm/html/RM-4-5-7.html

if (for all I in Array1'Range | Array1(I) = True) then
   ...
elsif (for Some I in Array1'Range | Array1(I) = True) then
   ...

条件式内でループ。allは、全部TrueならTrue。Someは、ひとつでもTrueならTrue。and/orですね。マルチコア対応コンパイラだったりすると、並列処理されたりするんでしょう。
で、この"Some"というのは確定なのか!?予約語じゃないのにこんなところで固定ワードとして使っていいのか?マジですか?

Indefinite_Holders http://www.ada-auth.org/standards/12rm/html/RM-A-18-18.html

私これ自分のコードで必要になって作りました、何度も何度も……。そうか……ようやく……。
……これこそ言語機能として組み込んで欲しいところ……そうすれば真・動的配列も付いてきますよ……。

他には、組込み向け言語としては必須のBoundedコンテナや、String/Wide_String/Wide_Wide_StringをUTF-8/16/32と見立てて変換を行う関数群などが目につくところです。
全体的に、「まだ」(であって欲しい)、86→95→2005に比べて、大人しい改定ですね。これから派手になるんですよね!?