From: SASADA Koichi Date: 2008-12-29T17:19:31+09:00 Subject: [ruby-dev:37651] Re: [Bug #943] Segmentation fault (cygwin)  ささだです. Martin Duerst wrote:: > 以下の修正で上記の問題も [ruby-dev:37611] も直っています。 > というのは、Segmentation fault から SystemStackError に > 変わっただけです。その方がいいですので、是非下記のパッチを > コミットしてください。 > > しかし、真っ平らなデータを読み込むだけでスタックがこんなに伸びる > のはなぜでしょうか。上記のスクリプトを > > ruby -e 'puts "A=[]"; 0.upto(1000000) { puts "A<<[22, 55]" }' | ruby > > に直すと、時間がかかるものの、問題なく完成されます。  [e1, e2, ..., eN] というリテラルは,一度 e1, e2, ..., eN を全部スタッ クに積んで,スタック上の値を利用して配列を作ります.そのため,スタック オーバーフローになります.  上記例のように,空の配列を作って,それに push するように変更することも 可能ですが,それを出来るようにしたほうがいいですかねぇ.するにしても, 1.9.2 で命令追加ってことになると思いますが.そう変更したら,ちょっと速度 が遅くなるってくらいかなぁ. -- // SASADA Koichi at atdot dot net