構造化例外処理

えーと、私が作っているというか作っていたQueenというコンパイラでは、例外も関数のOutputなのに明示しなくてもフローに関ってくるのは気が重い&例外を外部から指定できるなら継承によってグループ分けする必要はないという思惑の下、実験的にそういう構文にしてみたのですが。

http://d.hatena.ne.jp/ytqwerty/20040626#p1

Adaで既にできることに気付いてしまいました。単に私がException Handlingの章を読んでなかっただけです。

with Ada.Text_IO;
with Ada.Exceptions;
procedure Exception_Test is
   procedure The_Subprogram(The_Exception: Ada.Exceptions.Exception_ID) is
   begin
      Ada.Exceptions.Raise_Exception(The_Exception);
   end The_Subprogram;
   Local_Exception: exception;
begin
   The_Subprogram(Local_Exception'Identity);
exception
when Local_Exception =>
   Ada.Text_IO.Put_Line("OK");
end Exception_Test;

やっぱすげえですよAda。例外が単なるラベルで追加情報も投げられずその点今時の言語からすれば見劣りすると思っていたら、こんな機能があったとは。
…Adaでコードを書くときはしばらくこの書き方で組んでみるかなあ。