[#50752] [質問] rescue節で、他パッケージのメッセージ出力を抑止したい — Takahiro Yamaguchi <yamataka@...08.itscom.net>

10 messages 2019/05/02

[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

In This Thread