[ruby-list:50769] Re: 1.next は 1.succ よりなぜ遅い?
From:
"5.5" <5.5@...>
Date:
2019-05-30 11:11:56 UTC
List:
ruby-list #50769
5.5 です。 なるほど,YARV の命令列はあくまでスクリプトの字面に基づいて 作られるのであって,メソッドの中身とか定義されているクラス は無関係なのですね。 実行時までレシーバーの素性は分からないんですから,当たり前と いえば当たり前か……。 Ruby はエイリアスがたくさんあって,今までは趣味で選べばよい と思い込んでいましたが,速度が重要な用途ではベンチマークテ ストを行ってメソッドを選ばないといけないわけですね。 length は特化命令があるようなので, Array#length, size String#length, size でも同じことがありうるかと思ってベンチマークテストしてみま したが,やるたびに結果が変わって安定せず,よく分かりません でした……。 On 2019/05/30 13:59, Koichi Sasada wrote: > On 2019/05/30 12:33, 5.5 wrote: >> 仕組みがよく分かってないので素人考えですが,ただのエイリアス >> なら next を opt_succ にしちゃえばいい(どちらにも同じ特化命令 >> を使う),というわけにはいかないのでしょうか? > > 特化命令とは、プログラムの字面を見て、「.succ()」(0引数)だったら、とく > べつな命令にする、ということなので、エイリアスは見ないんですよ(字面が違 > うから)。foo.next を opt_succ にしてしまうと、foo が Integerじゃない > と、変な結果になっちゃいます。 > -- 5.5@moji.gr.jp