Размещение вопроса о переполнении стека на stackoverflow.com, как забавно: -)
Я запускаю некоторый рекурсивный код Ruby и получаю: "Stack level too deep (SystemStackError)"
(Я уверен, что код работает, что я не нахожусь в бесконечной рекурсивной смертельной спирали, но это не главное)
Есть ли способ изменить допустимую глубину / размер стека для моего приложения на Ruby?
Я не совсем понимаю, если это ограничение в Ruby, так как ошибка говорит «Уровень стека», что создает у меня впечатление, что Ruby каким-то образом считает «уровни» стека или просто означает, что стек полон.
Я пытался запустить эту программу под Vista и Ubuntu с одинаковым результатом.
В Ubuntu я пытался изменить размер стека с помощью ulimit -s с 8192 до 16000, но это ничего не изменило.
Edit:
Спасибо за отзыв.
Я понимаю, что использование рекурсивной функции, возможно, не самый надежный способ.
Но это не главное.
Мне просто интересно, есть ли способ увеличить размер стека .. период.
И, как я уже говорил, я попытался запустить ulimit -s 16000 перед запуском сценария ruby ... без улучшений ... Я неправильно его использую?
Edit2:
На самом деле у меня была бесконечная рекурсия в крайнем случае кода.
Усеченная трассировка стека рубинов при появлении ошибки "Stack level too deep"
немного вводит в заблуждение.
При рекурсивном поведении, включающем несколько функций, создается впечатление, что число рекурсий намного меньше, чем на самом деле. В этом примере может показаться, что он падает после чуть более 190 вызовов, но на самом деле это около 15000 вызовов
tst.rb:8:in `p': stack level too deep (SystemStackError)
from tst.rb:8:in `bar'
from tst.rb:12:in `bar'
from tst.rb:19:in `foo'
from tst.rb:10:in `bar'
from tst.rb:19:in `foo'
from tst.rb:10:in `bar'
from tst.rb:19:in `foo'
from tst.rb:10:in `bar'
... 190 levels...
from tst.rb:19:in `foo'
from tst.rb:10:in `bar'
from tst.rb:19:in `foo'
from tst.rb:22
-Andreas