Ada 202x (33日目) - pragma Restrictions/pragma Profile ====================================================== .. post:: Jan 02, 2020 :tags: ada, ada_2022 既に大ネタは出し終わり後はもう細かすぎて伝わらないのではないか感。 AIの数で言えばまだ半分いってないんですぜ……。 pragma Restrictionsの変更 ------------------------- pragma ``Restrictions`` で指定できる制限にいくつか変更があります。 No_Dynamic_Attachmentの変更 +++++++++++++++++++++++++++ ``No_Dynamic_Attachment`` は割り込みハンドラを動的に設定することを禁止します。 これが有効な場合同じ割り込み番号に複数のハンドラがあると ``Program_Error`` になると定められました。 ``No_Dynamic_Attachment`` がない場合は後から現れたものに上書きされます。 No_IOの変更 +++++++++++ ``No_IO`` は入出力を行うライブラリを使用禁止にします。 これが有効な場合 ``Ada.Directories`` も禁止になりました。 Pure_Barriers +++++++++++++ ``Pure_Barriers`` が追加されました。 従来の ``Simple_Barriers`` よりも若干緩い制限です。 ``Simple_Barriers`` は ``entry`` のバリアを定数値か ``protected`` オブジェクト内の変数参照のみに制限するものでした。 .. code-block:: ada protected Prot1 is entry E1; private Condition : Boolean := False; end Prot1; protected body Prot1 is entry E1 when Condition is -- This is a barrier. begin null; end E1; end Prot1; 狙いとしては、複雑な式を禁止することで検証しやすくしたりロックフリーな形に展開したい等があるのだと思います。 ``Pure_Barriers`` では加えてstaticな式、``'Count`` 属性、論理演算、 ``in`` 、if式等が使えます。 ここでのpureは副作用がないという意味ですね。 pragma Profileの変更 -------------------- プロファイルとは制限や各種ポリシーの組み合わせです。 主にOSなし環境向けに機能制限版のAdaを定めています。 これまでRavenscarプロファイルが定義されていました。 | http://www.ada-auth.org/standards/2xrm/html/RM-D-13.html#p7 Jorvikプロファイル ++++++++++++++++++ Jorvikと呼ばれるプロファイルが新しく定義されました。 | http://www.ada-auth.org/standards/2xrm/html/RM-D-13.html#p7.2 Ravenscarプロファイルよりも若干緩くなっています。 例えばRavenscarプロファイルには ``Simple_Barriers`` が含まれていましたが、Jorvikプロファイルでは ``Pure_Barriers`` に置き換わっています。 Ravenscarはイギリスの地名でした。 Jorvikの名前はRavenscarの近くで活動していた海賊から取られたそうです。 関連AI ------ - `AI12-0252-1`_ **Duplicate interrupt handlers under Ravenscar** - `AI12-0290-1`_ **Restriction Pure_Barriers** - `AI12-0291-1`_ **Jorvik Profile** - `AI12-0318-1`_ **No_IO should apply to Ada.Directories** .. _`AI12-0252-1`: http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai12s/ai12-0252-1.txt .. _`AI12-0290-1`: http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai12s/ai12-0290-1.txt .. _`AI12-0291-1`: http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai12s/ai12-0291-1.txt .. _`AI12-0318-1`: http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai12s/ai12-0318-1.txt