ESTADO: TERMINADO
-.. _ref_intro:
+.. _intro:
Introducción
============================================================================
La recolección de basura es una técnica que data de fines de los años '50,
cuando `John McCarthy`_, creador de Lisp_, agregó a dicho lenguaje la
capacidad de administrar la memoria automáticamente (utilizando conteo de
-referencias), entre muchos otros conceptos revolucionarios para la época
-que recién fueron explotados masivamente en lenguajes dinámicos más
-modernos como Perl_, Python_, Ruby_, etc. A partir de este momento, muchos
-lenguajes tomaron esta característica y hubo una gran cantidad de
-investigación al respecto, tomando particular importancia.
+referencias), entre muchos otros conceptos revolucionarios para la época que
+recién fueron explotados masivamente en lenguajes dinámicos más modernos como
+Perl_, Python_, Ruby_, etc. A partir de este momento, muchos lenguajes tomaron
+esta característica y hubo una gran cantidad de investigación al respecto,
+tomando particular importancia.
Nuevos algoritmos fueron desarrollados para atacar distintos problemas
particulares y para mejorar la *performance*, que ha sido una inquietud
incesante en la investigación de recolectores de basura. Sin embargo el
lenguaje más masivo que ha adoptado un recolector de basura (al menos en el
-ámbito empresarial) fue Java_, con el cual la investigación sobre
-recolección de basura tomó un impulso extra. Probablemente el mayor
-desarrollo e investigación en cuanto a recolección de basura se siga dando
-para Java_, acotando tal vez un poco el alcance de estos avances dado que
-ese lenguaje tiene características muy particulares (*tipado* estático, corre
-sobre una máquina virtual muy rica en cuanto a información de tipos, etc.)
-no disponibles en otros lenguajes. Sin embargo los lenguajes funcionales
-y con *tipado* dinámico siguieron teniendo un nivel de investigación
-y desarrollo importante, dado que fueron concebidos en su mayoría con la
-recolección de basura como parte del diseño.
-
-Probablemente los lenguajes en los cuales es más difícil aplicar los
-avances que se desprendieron de Java_ o de las otras categoría de lenguajes
-con más avances en recolección de basura sean los de más bajo nivel (como
-C y C++), en los cuales se da lo inverso en cuanto a disponibilidad de
-información en tiempo de ejecución, sumado a la permisividad de estos
-lenguajes para realizar manipulación de memoria directamente y trabajar
-a muy bajo nivel. De la mano de estos lenguajes apareció otra veta de
-investigación en lo que se denominó recolectores de basura *conservativos*.
-
-Una categoría de lenguaje que ha quedado prácticamente vacante es un
-término intermedio entre los lenguajes de muy alto nivel (como Java_,
-Python_, Haskell_, etc.). El lenguaje de programación D_ está en esta
-categoría y, a pesar de haber sido diseñado con soporte de recolección de
-basura, al ser un lenguaje relativamente nuevo, ha tenido muy poco
-desarrollo en ese área. El lenguaje tiene todas las limitaciones de
-lenguajes de bajo nivel como C y C++ pero esas limitaciones suelen estar
-más aisladas, y provee un poco más de información que puede ser aprovechada
-por un recolector de la que suelen proveer los demás lenguajes de estas
-características. Esto presenta una oportunidad única en cuanto
-a investigación y desarrollo de recolectores que se ajusten a estas
-características.
+ámbito empresarial) fue Java_, con el cual la investigación sobre recolección
+de basura tomó un impulso extra. Probablemente el mayor desarrollo
+e investigación en cuanto a recolección de basura se siga dando para Java_,
+acotando tal vez un poco el alcance de estos avances dado que ese lenguaje
+tiene características muy particulares (*tipado* estático, corre sobre una
+máquina virtual muy rica en cuanto a información de tipos, etc.) no
+disponibles en otros lenguajes. Sin embargo los lenguajes funcionales y con
+*tipado* dinámico siguieron teniendo un nivel de investigación y desarrollo
+importante, dado que fueron concebidos en su mayoría con la recolección de
+basura como parte del diseño.
+
+Probablemente los lenguajes en los cuales es más difícil aplicar los avances
+que se desprendieron de Java_ o de las otras categoría de lenguajes con más
+avances en recolección de basura sean los de más bajo nivel (como C y C++), en
+los cuales se da lo inverso en cuanto a disponibilidad de información en
+tiempo de ejecución, sumado a la permisividad de estos lenguajes para realizar
+manipulación de memoria directamente y trabajar a muy bajo nivel. De la mano
+de estos lenguajes apareció otra veta de investigación en lo que se denominó
+recolectores de basura *conservativos*.
+
+Una categoría de lenguaje que ha quedado prácticamente vacante es un término
+intermedio entre los lenguajes de muy alto nivel (como Java_, Python_,
+Haskell_, etc.). El lenguaje de programación D_ está en esta categoría y,
+a pesar de haber sido diseñado con soporte de recolección de basura, al ser un
+lenguaje relativamente nuevo, ha tenido muy poco desarrollo en ese área. El
+lenguaje tiene todas las limitaciones de lenguajes de bajo nivel como C y C++
+pero esas limitaciones suelen estar más aisladas, y provee un poco más de
+información que puede ser aprovechada por un recolector de la que suelen
+proveer los demás lenguajes de estas características. Esto presenta una
+oportunidad única en cuanto a investigación y desarrollo de recolectores que
+se ajusten a estas características.
Objetivo
----------------------------------------------------------------------------
-El objetivos de esta tesis es mejorar el recolector de basura de el
-lenguaje D_, investigando el estado del arte en recolección de basura
-y haciendo un análisis de viabilidad de los algoritmos principales para
-optar por el que mejor se ajuste a D_. Una parte muy importante de este
-análisis es participar de la comunidad del lenguaje y sus diseñadores para
-poder desarrollar una mejora que sea aceptada y pueda ser utilizada por el
-lenguaje. Por lo tanto el algoritmo o mejora que "mejor se ajuste a D_"
-estará supeditado en gran parte a los requerimientos más urgentes de los
-usuarios de D_.
+El objetivos de esta tesis es mejorar el recolector de basura de el lenguaje
+D_, investigando el estado del arte en recolección de basura y haciendo un
+análisis de viabilidad de los algoritmos principales para optar por el que
+mejor se ajuste a D_. Una parte muy importante de este análisis es participar
+de la comunidad del lenguaje y sus diseñadores para poder desarrollar una
+mejora que sea aceptada y pueda ser utilizada por el lenguaje. Por lo tanto el
+algoritmo o mejora que "mejor se ajuste a D_" estará supeditado en gran parte
+a los requerimientos más urgentes de los usuarios de D_.
Limitaciones
----------------------------------------------------------------------------
-Dado que el lenguaje de programación D_ puede ser enlazado con código
-objeto C, y por lo tanto interactuar directamente con éste, podrán haber
-limitaciones en el recolector resultante con respecto a esto. En este
-trabajo se busca lograr un recolector que sea eficiente para casos en donde
-el código que interactúa con C esté bien aislado, por lo que estas
-porciones de código pueden quedar por fuera del recolector de basura
-o necesitar un manejo especial.
+Dado que el lenguaje de programación D_ puede ser enlazado con código objeto
+C, y por lo tanto interactuar directamente con éste, podrán haber limitaciones
+en el recolector resultante con respecto a esto. En este trabajo se busca
+lograr un recolector que sea eficiente para casos en donde el código que
+interactúa con C esté bien aislado, por lo que estas porciones de código
+pueden quedar por fuera del recolector de basura o necesitar un manejo
+especial.
Organización
Este trabajo se encuentra dividido en 7 cápitos que se describen
a continuación:
-1. :ref:`ref_intro`: breve descripción del problema a tratar, presentando
+1. :ref:`intro`: breve descripción del problema a tratar, presentando
los objetivos y alcances del trabajo.
-2. :ref:`ref_d`: presenta las características principales del lenguaje,
+2. :ref:`d_lang`: presenta las características principales del lenguaje,
destacando aquellas de mayor relevancia para este trabajo.
-3. :ref:`ref_gc`: presenta los algoritmos básicos de recolección de basura
+3. :ref:`gc`: presenta los algoritmos básicos de recolección de basura
y describe el estado del arte.
-4. :ref:`ref_dgc`: explica los problemas particulares que presenta el
+4. :ref:`dgc`: explica los problemas particulares que presenta el
lenguaje para la recolección de basura, describe el diseño
e implementación del recolector actual y presenta sus principales
deficiencias.
-5. :ref:`ref_analisis`: realiza un recorrido por los algoritmos presentados
- en :ref:`ref_gc` analizando su viabilidad para aplicarse en D_.
-6. :ref:`ref_solucion`: propone una solución a los problemas encontrados en
- :ref:`ref_dgc` en base al análisis hecho en :ref:`ref_analisis`.
-7. :ref:`ref_conclusion`: describe los resultados del trabajo, proponiendo
+5. :ref:`analisis`: realiza un recorrido por los algoritmos presentados
+ en :ref:`gc` analizando su viabilidad para aplicarse en D_.
+6. :ref:`solucion`: propone una solución a los problemas encontrados en
+ :ref:`dgc` en base al análisis hecho en :ref:`analisis`.
+7. :ref:`conclusion`: describe los resultados del trabajo, proponiendo
trabajos futuros y relacionados.