de publicar una pregunta desbordamiento de pila en stackoverflow.com, lo divertido :-)Cómo aumentar el tamaño de pila para una aplicación de ruby. aplicación recursiva conseguir: Pila nivel demasiado profundo (SystemStackError)
estoy ejecutando un código de Ruby recursiva y obtener el: "Stack level too deep (SystemStackError)"
(Estoy seguro de que el código funciona, que no estoy en una espiral infinita de muerte recursiva, pero ese no es el punto de todos modos)
¿Hay alguna forma de cambiar la profundidad/el tamaño de la pila permitida para mi aplicación Ruby?
No entiendo si esto es una restricción en Ruby, ya que el error dice "Nivel de pila", lo que me da la impresión de que Ruby de alguna manera cuenta los "niveles" de pila, o si simplemente significa que el la pila está llena.
He intentado ejecutar este programa tanto en Vista como en Ubuntu con el mismo resultado. En Ubuntu intenté cambiar el tamaño de la pila con 'ulimit -s' de 8192 a 16000, pero eso no cambió nada.
Edit: Gracias por los comentarios.
Me doy cuenta de que el uso de una función recursiva quizás no sea la forma más sólida de hacerlo. Pero ese tampoco es el punto. Simplemente me pregunto si hay una manera de aumentar el tamaño de la pila ... punto. Y como mencioné, intenté ejecutar ulimit -s 16000 antes de ejecutar el script de ruby ... sin ninguna mejora ... ¿Lo estoy usando mal?
Edit2: De hecho, tenía una recursión infinita en una caja de borde del código.
El rastro de la pila de ruby truncado cuando obtiene el error "Stack level too deep"
es un poco engañoso.
Al tener un comportamiento recursivo que implica varias funciones, se tiene la impresión de que el número de recursiones es mucho más bajo de lo que realmente es. En este ejemplo, una cosa fuerza que bloquea después de poco más de 190 llamadas, pero en realidad es alrededor de 15.000 llamadas
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
Esta respuesta es correcta para las versiones de Ruby anteriores a la 1.9. Para la versión 1.9 o posterior, vea http://stackoverflow.com/a/27510458/238886 –