Typingとかいうような技術について研究が行われているようです。Typingに近いかなあ。最近、RubyでもPythonでもこのような開発について注目している人は(私を含めて)多いようなので、是非構想を深めていただければと思います。writes:>>すいません・・・。先ほどのメールはHTML形式で送ってしまいました。>テキスト形式で再度送り直させていただきます。>佐々木俊之というものです。>>さっそく本題ですが、>掲題の通り、Rubyのような動的言語で、静的な型チェックを行う>方法についてアイデアを持っています。>これは私が知る限り(といっても大変狭い範囲ですが)まだ世に>出ていないようなのですが、これを使うとダックタイピングを含めた>すべての動的な型付けを、一切の型指定なく、静的に行うことが>できます。>>その方法は次です。>1.関数の引数はすべてC++で言う型テンプレートとする。>3.ポリモーフィズムは「自動汎化」して行う。>>自動汎化、これが私のアイデアなのですが、それはC++の仮想関数>テーブルを、クラスごとでなく>ポリモーフィックに振舞う変数についての一連の呼び出しと、その>変数に実際に入れられるオブジェクトごとに作り、実行時、変数がどの>オブジェクトの型なのかによって、仮想関数テーブルを選んで、それに>ついてオブジェクトのメンバーを呼び出すというものです。>>これだと分かりにくいと思いますが、要は変数に入れられた、同じインター>フェースを部分的に持つオブジェクトの関数テーブルの、メモリーマッピング>の差異を吸収する仮想関数テーブルを、その変数のすべてのポリモーフィ>ックな呼び出しについて、作るという>ことです。この仮想関数テーブルを、C++のそれと区別するため、以下では>「キャップテーブル」と呼ぶことにします。>>これでも分かりにくいので例を。var.c>>のコードがあるとき。>varはポリモーフィックに振舞います。xのときvarに代入され、var.bでキャップテーブルの>メンバーbがXオブジェクトのメンバーbを参照して、Xのbを呼び出します。Y共に同じで、だからどちらの(実行時分からない)>キャップテーブルの呼び出しにも静的に束縛できます。cについての)へのポインタをそのメンバーとして持ちます。>こうしてダックタイピングが静的型束縛をもってできるようになります。>>以上が自動汎化の説明です。細かいことはまだありますが、大体は>こんな感じです。重要(と私が思っている)なのは、これが型宣言なく>静的型束縛するために必要な最後の要素と思われることです。>これでRubyでも何らコードを変更することなく静的型束縛が可能と>なります。Rubyも遅い言語から、頑張ればC並みに速い言語になれ>るかもしれません。なると今まで速度が重要な部分はCで書こう>ということはなくなり、逆に速度が重要だからここはRubyで書こうと>いうことにもなるかもしれません。>もっともコンパイルという手順が嫌われればそれまでですが。>>以上、もしこんなの当たり前だよ、ということであれば申し訳ありません。ab.auone-net.jp>**************************。