Iniciar Sesión

Ver la Versión Completa : [Compilador] Modificar limitación PERFORM


Figu
3 de abril de 2020, 17:38
Buenos días a todos:
¿Es posible quitar la limitación de 255 niveles de PERFORM, para evitar el stack overflow basado en PERFORM depth exceeded?

Gracias por todo y un saludo.

Kuk
3 de abril de 2020, 20:10
Figu, por lo pronto, no creo que sea limitación del lenguaje sino de la plataforma (SO, arquitectura de hardware).

Pero me pregunto para qué lo necesitas. :losiento:

Figu
3 de abril de 2020, 20:18
Buenas tardes kuk.

Estoy realizando una serie de operaciones, que dependen del número de iteraciones, y no puedo bajar de 260, y cuando llego a este valor de límite, me devuelve el PERFORM depth exceeded.

Ya no sé, si hay algún tipo de instrucción que pueda ir vaciando la pila de esas iteraciones, y así no tener esa limitación.

También he mirado la documentación de OpenCobol, porque imagino que se pueda configurar en algún cnf el valor máximo de este límite, porque con otros lenguajes no me ocurre este problema, y por eso no debe ser hardware, sino algún tipo de configuración.

He rebuscado mucho y no he visto nada.

¿Alguna idea?.

Gracias por todo.

JCantero
4 de abril de 2020, 01:58
Puedes publicar el fuente o el trozo que te da el problema para que te podamos ayudar a resolverlo ?

Kuk
4 de abril de 2020, 11:51
Figu, para mí que tienes problema más bien de algoritmo. Es lo mismo que recursión - todo lo que se puede hacer con recursión, también se puede hacer con bucles y vice versa. Salvo que la recursión es demasiado costosa en procesos largos y se come los recursos en progresión geométrica. Por ello, los procesos "largos" se hacen siempre en bucles, para evitar el desbordamiento.

Un ejemplo de hacer con bucles lo que se suele hacer con recursión lo tienes aquí: [Sintaxis] Guardar/cargar jerarquía de nodos en TreeView - COBOL Foro (https://www.cobolforo.es/showthread.php?t=697)

Así que, igual que JCantero, te propongo a que nos describas (con detalles) lo que necesitas hacer. Seguro que encontramos una solución ;)