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

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