X-Git-Url: https://git.llucax.com/z.facultad/75.00/informe.git/blobdiff_plain/5f79318a52fc6ada10154cb148008bd9d44fa22e..12b4722b4c418b9d60d75c0acdd9e5cac133af6a:/source/intro.rst diff --git a/source/intro.rst b/source/intro.rst index 4f12824..393a10b 100644 --- a/source/intro.rst +++ b/source/intro.rst @@ -4,7 +4,7 @@ ESTADO: TERMINADO -.. _ref_intro: +.. _intro: Introducción ============================================================================ @@ -12,63 +12,61 @@ 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_. @@ -93,13 +91,13 @@ El alcance de este trabajo se limita a los siguientes puntos: 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 @@ -108,21 +106,21 @@ 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.