トップ «前の日記(2004-01-19) 最新 次の日記(2004-01-21)» 月表示 編集

日々の流転


2004-01-20 [長年日記]

λ. YARVでの末尾再帰

YARVにsendとendを融合した新しい命令(tailsend)を導入することで、スタックを消費しない末尾呼び出しを実現してみる(yarv000c-tail.diff)。ただし、クロージャのこととかは全然考えてない。

それと、余計なスタック操作が加わるので当然遅くなるはず。簡単なプログラムで試してみると1.7%ほど遅くなった。場合によってはもっと遅くなることも考えられるけど、これくらいならなんとか許容範囲?

インタプリタ 実行時間(秒)
ruby 47.14
yarv 10.18
yarv(tailsend)10.35

評価プログラム:

def test(n)
  if 0==n
    0
  else
    test(n-1)
  end
end
 
i = 0
while i < 10000
  test(1000)
  i += 1
end
Tags: ruby
本日のツッコミ(全2件) [ツッコミを入れる]
ψ ささだ (2004-01-22 22:43)

楽しそうだなぁ・・・。

ψ さかい (2004-01-23 16:36)

何他人事みたいな事言ってるんですか (^^;<br><br>でも、ホント楽しいです。<br>これまで自分でも弄れるような手頃なVMってなかなか無かったですし、これまでよく理解していなかった Threaded Code とかも YARVのおかげで理解できたので。