From: SASADA Koichi Date: 2009-04-07T20:36:00+09:00 Subject: [ruby-dev:38288] Re: Hashのデフォルト値のブロックで無限ループするとcore  ささだです. KISHIMOTO, Makoto wrote:: >> 私の記憶が正しければ、無限ループを完全に検出するためにはかな >> りの実行ペナルティをともなうため、現状はそこまで徹底していな >> いと思います。  無限ループの検出というか,スタックオーバーフローの検出ですよね.無限 ループの検出したって,while true; ...; end は多分正しいプログラム. > たとえば以下のような無限ループの場合、SystemStackErrorになるのですが、 > これは無限ループを検出してそうしているのでしょうか?  Ruby レベルでのスタックオーバーフロー,つまり VM レベルでのスタック オーバーフローは(多分)きちんと検出するようになっています.  最初の例は,Ruby から C を呼び出して,そこから Ruby を呼んで,それが C に,というように,C 呼び出しが重なり,マシンスタックがオーバーフローしま す.C レベルでの,マシンスタックのオーバーフローは,真面目に検出するのは 大変なのでやっていない,ということじゃないかと思います.マシン・OS依存の 検出方法はあるけれど,まぁそこまで真面目にやっていない,んじゃなかったで したっけか(あれ,segv ハンドラ周りでなんかやってたっけ?). -- // SASADA Koichi at atdot dot net