Ada 2020 (58日目) - 9月9日の電子会議の結果

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

ISO標準化に向けた作業が進んでいるようでドラフトも更新されています。 (Site Log では「Draft 2」と表記されていますがこれは「32」の誤字?)

変更自体はもう無さそうです。 2つばかり作業中のAIがあるようですが両方とも例示みたいですね。

作業中のもの

Accessibility_Checkの実現方法

実行時のAccessibility_Checkを実現するためのモデルの例示として整数を隠しパラメータとして渡す方法ではなく、何やらリンクリストを作ることでの実現例を示そうという話らしいです。

整数を隠しパラメータとして渡す方法はこれまでAARMでも示されていました。 (GNATもこの方法を採用しています。) Ada 2005で追加された匿名のaccess型がこの方法にうまくはまらず追加の条件分岐が必要になったりしてAda 95の頃よりもコストが重くなることをSteve先生が2011年に指摘されていたみたいです。

具体的にはローカルに宣言されたaccess型を通じてより浅いレベルのサブプログラムを呼び出すときに引数に匿名のaccess型がありますとそのチェックのための隠しパラメータの数字がずれてしまうようです。 (Ada 2005では派生型をローカルに作ることもできるようになっていますので、サブプログラムを指すaccess型を直接使わなくても動的ディスパッチで再現することもできます。)

深いレベルのオブジェクトを浅いレベルの名前付きaccess型で指すことはできませんでしたが匿名のaccess型ではできてしまうところが問題です。

ずれた数字の調整は呼び出される側で行わねばならず、それは重いなあ、と。

再現コードの例は AI12-0016-1 を見てください。 (gcc 11で試しましたところ引っかかりましたのでGNATは追加のコストを払ってはいないようです。 ですので問題ないコードが実行時エラーにされる可能性があります。)

なおこのSteve先生の指摘に対してRandy先生は「Your mind sure is twisted.」と讃えられており闇を感じます。

OpenMP

もうひとつはOpenMPをAda 2020上に実装する例のようです。

並列化のための文法はAda 2020でtask以外にも色々追加されました。 その際parallel for文にアスペクトを指定できるようにする等、実装がより細かな拡張ができる余地が考えられてきました。 実際にどうなるのか、それをテクニカルレポートにまとめようという話みたいです。

関連AI