¿Cuál es la necesidad de recolección de basura (GC) en un lenguaje basado en pila? En un lenguaje como Forth o RPL (en calculadoras HP ), ¿hay necesidad de recolectar basura?
Creo que, dado que la salida se saca de la pila, no habría ninguna necesidad. ¿Me estoy perdiendo de algo?
garbage-collection
stack-oriented
Todd Moses
fuente
fuente
Sí tienes razón. Pero la base de la pila es solo una parte de toda la historia. Por ejemplo, el intérprete de código de bytes de Java también se basa en la pila (el código compilado funciona, por razones de eficiencia, de manera diferente). Esto nos dice que cualquier idioma puede transformarse en un idioma de pila.
Lo que importa son los objetos fuera de la pila, aquellos que pueden sobrevivir a la ejecución del método actual. Mientras el lenguaje no tenga nada parecido a
malloc
onew
, no hay tales objetos y no necesitadelete
ni GC.Un lenguaje que carece de asignación dinámica de memoria es bastante limitado en su utilidad.
fuente
La recolección de basura es necesaria si el lenguaje va a soportar estructuras de datos dinámicos inherentemente. Lo cual es casi una necesidad si quieres hacer algo más allá del nivel de C. Sin eso, estás atascado solo con estructuras de datos de tamaño fijo y administrando la memoria tú mismo. Eso es lo que hace Forth original, por supuesto, pero probablemente no sea algo que quiera hacer hoy a menos que solo esté haciendo codificación de sistemas de bajo nivel.
fuente
La recolección de basura no es necesaria si el lenguaje usa asignación estática en lugar de la asignación de pila. Por ejemplo, Fortran 77 con la opción -s (almacenamiento estático) asigna toda la memoria cuando se inicia el programa, por lo tanto, no se produce ninguna asignación de memoria en tiempo de ejecución para liberarla. Si bien se necesita cierta disciplina, es posible escribir programas, especialmente simulaciones para usar la asignación de memoria estática. La asignación estática elimina cualquier pérdida de memoria y conduce a un excelente rendimiento de la memoria caché, ya que el compilador puede usar análisis estático para determinar qué cargar en la memoria caché.
fuente