かんだです。

matz / netlab.co.jp (Yukihiro Matsumoto)さんの書かれた、
	「[ruby-dev:8567] Re: interface declaretion」
からの引用です。

> まつもと ゆきひろです
> 
> In message "[ruby-dev:8565] interface declaretion"
>     on 99/12/07, "Dai.K." <MAP2303 / mapletown.net> writes:

> |  というわけで、Ruby スクリプトで IDL と同等のことを記述したいのですが、
> |先ほどの例を見て分かる通り、例えば型などは Ruby の文法では情報が足りませ
> |ん。まだ typedef とか enum どうしようとかもあるんですが、とりあえず、メ
> |ソッド宣言文を加えてくれませんか?
> 
> えーと、動的な型言語に型情報を加えると言う試みはあまり成功し
> たものがないので、十分に検討を加えないといかんと思います。動
> 的な型のみの言語ってのは単に静的な型言語の型が省略されている
> だけでなく、いろいろと違った性質を持つのが一番面倒なところで
> す。そういう観点から言うと、今回例に出た dcl ってのは私には
> 許容できません。

  受け入れ難いというのは十分承知してますが、やはり欲しいので(^^;

  で、引用読むとちょっと勘違いされていそうですが、今回の dcl の特徴は、
型などは情報として持っているだけで実際の型チェックは一切しない、というこ
とです。よく知らないですが埋め込みドキュメントに近いでしょう。
  といっても CORBAはオーバーロードは無いので、型は宣言に一致することにな
るでしょうが。


> dclよりはもうちょっと現実的そうなのは
> 
>   * Common Lisp の the などのような引数/変数に対する型情報の付加
>   * 型宣言を兼ねた型チェック構文

  というわけで、こういうのは要らないです:-)


> もっと現実的なのは
> 
>   * Rubyっぽい構文のIDLもどきを作る

  これは素直に IDL 書け、ですんでしまうのでパス。
  IDLを覚えるのが嫌、というのでなく、同じようなのを書いて別ファイルで管理
するということの方が嫌なので。
# IDLジェネレータのこの手の要求は普通、前者らしいですが:-P


>   * コメントに型情報を埋め込む
> 
>      class A
>        # foo():void
>        def foo()
>        end

  これが近いんですが、できれば Ruby のパーザを流用したいのです。

  動的に IDL を処理する場合は、

  0. 何かIDL情報が必要になった。
  1. 対応する IDL(or Rubyスクリプト)を解析して、Moduleインスタンス生成。
  2. extend する。

  という手順を経るつもりです。IDLコンパイラと言われるものは 1. を前もって
行っておいて、実行時にリンクなりするというものですが、ここは動的に:-) やり
たい。
  となると、Ruby/CORBA を走らせている ruby インタプリタが解釈することにな
るんですが、これをIDLなりコメントDCL文なりのパーザスクリプトでなくて ruby
自身にやってほしいわけです。

  また、サーバー側では、自分の IDL 定義を登録するという手順があります。
  Rubyスクリプトのコメント文を解釈するということは、すなわちサーバー自身
を記述したスクリプトをまた解析しなくちゃならない、という事態になります。
dcl文を rubyパーザが理解してくれれば、type.declared_methods 一発で済んで
しまうんですが。


  といってもやはり標準Rubyへの構文追加である dcl は駄目そうなので、

  ・ruby にオプションか別名で呼ばれた時には dcl 文を解釈するようにする。
  ・ruby パーザに機能を動的に(Rubyスクリプトで)追加できる仕掛けを入れる。

  というのはどうでしょうか?
  後者の方が嬉しいです。特定の文字列に当たったら、組み込まれたメソッドを
呼ぶようなもの。例えば、行頭の #%% から行末までを渡すなど。


# ところで遠い将来というのは、1.6 は無理でしょうが 2.0 は含みますか? :-P


-- 
  だい@楓街           
    MAP2303 / mapletown.net                  紅玉軌道異変アリ。