[#24536] 「Rubyの落し方」 v.s. ruby_1_8 — akira yamada / やまだあきら <akira@...>

<URL:http://jp.rubyist.net/magazine/?0002-RubyCore>

40 messages 2004/10/20
[#24541] Re: 「Rubyの落し方」 v.s. ruby_1_8 — Yukihiro Matsumoto <matz@...> 2004/10/20

まつもと ゆきひろです

[#24599] 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/26

2004-10-20 (水) の 21:38 +0900 に Yukihiro Matsumoto さんは書きました:

[#24605] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-26 (火) の 16:16 +0900 に akira yamada / やまだあきら さんは書きました:

[#24606] Re: 1.8.2 preview3? — Yukihiro Matsumoto <matz@...> 2004/10/27

まつもと ゆきひろです

[#24608] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-27 (水) の 11:48 +0900 に Yukihiro Matsumoto さんは書きました:

[#24620] Re: 1.8.2 preview3? — akira yamada / やまだあきら <akira@...> 2004/10/27

2004-10-27 (水) の 12:42 +0900 に akira yamada / やまだあきら さんは書きました:

[#24629] Re: 1.8.2 preview3? — Tanaka Akira <akr@...17n.org> 2004/10/29

In article <1098888819.9446.14.camel@rice.p.arika.org>,

[ruby-dev:24423] Re: Auto stack growing on Mac OS X

From: Tanaka Akira <akr@...17n.org>
Date: 2004-10-04 04:15:17 UTC
List: ruby-dev #24423
In article <40598295-1498-11D9-B7A9-000A958471AA@mac.com>,
  Mitsuhiro Kondo <miche@mac.com> writes:

> Mac OS X(Darwin)ではLinuxのようにスタックが自動伸長しないので、racc等で
> スタックが溢れてしまうことがあります。

誤解があるように思うのですが、Linux でもべつにスタックは自動的には伸長しません。

% (limit stacksize 10m; ./ruby -e 'def f(n) if n == 0 then p :f else f(n-1) end end; f(1000)')
:f
% (limit stacksize 1m; ./ruby -e 'def f(n) if n == 0 then p :f else f(n-1) end end; f(1000)') 
-e:1:in `f': stack level too deep (SystemStackError)
        from -e:1:in `f'
        from -e:1:in `f'
        from -e:1:in `f'
        from -e:1:in `f'
        from -e:1:in `f'
        from -e:1:in `f'
        from -e:1:in `f'
        from -e:1:in `f'
         ... 433 levels...
        from -e:1:in `f'
        from -e:1:in `f'
        from -e:1:in `f'
        from -e:1
zsh: exit 1     (; limit stacksize 1m; ./ruby -e ; )

Linux で stacksize が問題にならないのは、単に default の設定が十分に大
きいかあるいは無制限を意味する RLIM_INFINITY になっているからでしょう。

> 今まではシェルでlimitなりulimitなりして対応していましたが、せっかくなので
> ある程度スタックを使ったら自動的にsetrlimitするようにしてみました。
> eval.cの変更はスタックサイズが1MBのとき、以下のメソッドでruby_stack_check
> を通るタイミングが、スタックの伸びに追いつくようにしただけです。
>  def fact(n) if n < 2 then 1 else n * fact(n - 1) end end

思ったんですが、制限をなくしたいなら、なぜ RLIM_INFINITY にしないんで
すか?  あるいは、soft limit を hard limit と同じにするとか。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread