synchronized interface

gcc 4.0.1のスナップショットと4.1.0のスナップショットを見比べてみましたが、どうやら先日のパッチの大軍が載るのは4.1.0のほうだけみたいです。
で、今日は、たまにはプログラミングのことも書くぞ!ということで、その中から、synchronized interfaceをテーマに書いてみます。
Ada05(06)のinterfaceは単なるinterfaceです。
JavaやDと同じです。Delphiみたく委譲機構なんて持ってません。
多重継承ができないのを型の上で埋め合わせるだけのものです。
しかし、Adaが単なる言語ではない部分の幾割かは、taskやprotected型という、スレッドや同期オブジェクトを構文として持っていることにあります。
そして、Ada05(06)のinterfaceが機能的には単なるinterfaceでありながらJavaやD並では終わらない理由…なんとスレッドまわりのオブジェクトは、interfaceを実装できるのです!なお構文の上では、ランデブーに用いるentryをinterface上ではprocedureとみなすなど、微妙に無理してます。

type Intf1 is synchronized interface;
procedure Method1(Object: in out Intf1);

task type Task1 is new Intf1 
  entry Method1;
end Task1;

さて、Adaは、オブジェクト指向以前の抽象型言語としては頂点のひとつです。
しかし、それゆえ逆に、OOPに必要な多態以外の機能をOOPとは無関係にとっくの昔に既に持っていてしまったがため、OOPLとしては非常に使いにくいものになってしまいました。
メソッド呼び出しの構文でランデブーが多態つきで出来るとなると、抽象型から発展した現在主流のイベントドリブンと相性が良い受け身のOOPとはまた別の、能動的なアクターモデルOOPが、抽象型言語のAdaでできてしまう、という、面白いことになるのではないかなー、と、ちょっと楽しみです。いろんな弾をtaskの異種リストで実現したりなんかして。*1アクターモデルなんて考えたこともないので実際使いこなせるかはわかりませんが…。

*1:弾の数だけCreateThreadされることになるので無茶