¿Cuales son las diferencias entre el GC de php y el de ruby?

by Gastón Ramos

Hace un tiempo un amigo me hizo esta pregunta, y la verdad es que yo tengo una idea de lo que es un GC y alguna vez he leido un par de artículos acerca de cómo funciona el GC en ruby, pero no sé mucho más que eso, entonces decidí ponerme aprender, para esto arranqué desde cero, acá les dejo un resúmen de la traducción del artículo de Garbage Collection en wikipedia

El Garbage Collector es una forma de administración automática de la memoria, su
función es “reclamar” la memoria ocupada por objetos que ya no se usan en el programa, GC fué inventado por “John McCarthy” en 1959 para resolver problemas en Lisp.

El GC es la forma opuesta a la administración manual de la memoria la cual require que el programador especifique cuales objetos “de-alocar” para así devolver la memoria al sistema. Por otro lado muchos sistemas usan una combianción de ambas formas incluyendo otras técnicas como “stack allocation” y “region inference”.

Los dos principios básicos de GC son:

1- Encontrar objetos de datos en un programa que no van a poder
accederse en el futuro

2- Recoger los recursos usados por esos objetos

Muchos lenguajes de programación usan GC como Java, C# y la mayoría
de los lenguajes de scripting, otros lenguajes fueron diseñados para
ser usados con manejo manual de la memoria pero también tienen una
implementación con GC como: c, c++. Algunos lenguales como Ada, Modula-3
permiten tanto GC como manejo manual de la memoria.

Accesibilidad de un objeto:

Informalmente un objeto es accesible si es referenciado por lo menos
por una variable en el programa, tanto directamente o atraves de la
referencia de otro objeto accesible.
Pero más precisamente los objetos pueden ser accesibles de dos maneras:

1- Se asume que un distinguido conjunto de objetos va a ser accesible,
estos son conocidos como los fundamentales. Típicamente esto incluye:
todos los objetos referenciados desde el “call stack” (esto es, todas
las variables locales y parametros en las funciones que están siendo invocadas
en ese momento), y cualquier variable global.

2- Cualquier cosa referenciada desde un objeto accesible es en sí misma accesible, más formalmente, la accesibilidad es transitiva.

Fuente: http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29

Continuará…