[#48770] Re: Rubyで静的型 — "Toshiyuki Sasaki" <tsasaki1@...>
> この場合、この例では簡単かもしれませんが、たとえばvarが別のメソッド
10 messages
2014/12/23
[#48771] Re: Rubyで静的型
— Hideki Miura <m-72@...6.so-net.ne.jp>
2014/12/23
三浦です
[ruby-dev:48770] Re: Rubyで静的型
From:
"Toshiyuki Sasaki" <tsasaki1@...>
Date:
2014-12-23 05:06:57 UTC
List:
ruby-dev #48770
> この場合、この例では簡単かもしれませんが、たとえばvarが別のメソッド > に渡した場合などvarが呼び出すであろうメソッドの集合を得るのは、一般的 > に困難または不可能であると思います。 そこは型推論を使用して、自動汎化された型が伝播し、伝播先で使用した メソッドもキャップテーブルのメンバーとすれば良いのではないでしょうか? > また、変数にどんな値が入りうるのか静的に確定させるのはそれなりに > 困難です。 これは痛い。気づきませんでした。が、考えてみると・・・ 動的な条件のもと、varに代入されたものは自動汎化の対象とする、 と単純に考えるのでは駄目ですか・・・? 逆に言えば、静的な条件のもとvarに代入されたX, Yにはそれぞれ 静的に束縛できる訳で。コードをコンパイル時に実行したとして。 > このような理由と、多くの場合メソッド呼び出しはある特定のクラスのインスタンス > > である場合が圧倒的に多いという経験則(必ずしも正しくない)から、 > 多相型のメソッド呼び出しについては、次のような戦略が無難かと思います > > インラインメソッドキャッシュを使用して特定のクラスのメソッド呼び出し > の速度を高速化する > > キャッシュのミス率が多い場合、O(1)でアクセスできることの保障される > 連想配列(たとえばCuckoo hashing)を(動的に)構築してこれ経由でメソッド > 呼び出しする。 私は専門家ではなく、無学な人間なので、この部分はよく理解できません でした。このようにすると、静的束縛でかつ型指定のないダックタイピングが できるのでしょうか?教えていただけたら幸いです。