[#37679] [FEATURE:trunk] EncDet again — "Yugui (Yuki Sonoda)" <yugui@...>

Yuguiです。

23 messages 2009/01/03

[#37748] $LOAD_PATHとバージョンの運用の関係 — akira yamada / やまだあきら <akira@...>

1.9系でのバージョンの運用と$LOAD_PATHの値について質問です。

12 messages 2009/01/09
[#37758] Re: $LOAD_PATHとバージョンの運用の関係 — "NARUSE, Yui" <naruse@...> 2009/01/11

成瀬です。

[ruby-dev:37701] [Bug #982] stack level too deep for long Array initialization

From: Martin Dürst <redmine@...>
Date: 2009-01-05 01:55:48 UTC
List: ruby-dev #37701
Bug #982: stack level too deep for long Array initialization
http://redmine.ruby-lang.org/issues/show/982

起票者: Martin Dürst
ステータス: Open, 優先度: Normal
担当者: Koichi Sasada, カテゴリ: YARV, Target version: 1.9.2

次のスクリプトが stack level too deep (SystemStackError) で終わります。

ruby -e 'puts "A=["; 0.upto(1000000) { puts "  [22, 55]," }; puts "]"' | ruby

これは Bug #943 [ruby-dev:37646] のコピーで、長期的にどうするのか
を考えるとめのバグです。

ruby -e 'puts "A=[]"; 0.upto(1000000) { puts "A<<[22, 55]" }' | ruby

で意図のものができるが、どうしてもデータの初期化を宣言的でできなく、
手続的にしないといけないのはよくないと思っています。ユーザから見ると
メゾドの深い呼び出しなどがスタックオーバフローになるのは分かるはず
ですが、データの初期化だけでそういう問題になるのはビックリする
でしょう。

笹田さんによりますと、

> 上記例のように,空の配列を作って,それに push するように変更することも
>可能ですが,それを出来るようにしたほうがいいですかねぇ.するにしても,
>1.9.2 で命令追加ってことになると思いますが.そう変更したら,ちょっと速度
>が遅くなるってくらいかなぁ.

もう一つのやり方は stack level too deep になったときに、スタックにある
配列の要素を一気に配列に追加し、次の要素からまだスタックに載せること
が考えられる。でも、こういうのを実装するのはどのぐらい難しいでしょうか。

よろしくお願いします。    Martin.


----------------------------------------
http://redmine.ruby-lang.org

In This Thread

Prev Next