]> git.llucax.com Git - z.facultad/75.00/informe.git/blob - source/intro.rst
Ordenar alfabéticamente las referencias
[z.facultad/75.00/informe.git] / source / intro.rst
1
2 .. Introducción al trabajo, objetivos, alcance, limitaciones y organización
3    del documento.
4    ESTADO: TERMINADO, CORREGIDO (A)
5
6
7 .. _intro:
8
9 Introducción
10 ============================================================================
11
12 .. raw:: latex
13
14    \setcounter{page}{1}
15    \pagenumbering{arabic}
16
17 La recolección de basura es una técnica que data de fines de los años '50,
18 cuando `John McCarthy`_, creador de Lisp_, agregó a dicho lenguaje la
19 capacidad de administrar la memoria automáticamente (utilizando conteo de
20 referencias), entre muchos otros conceptos revolucionarios para la época que
21 recién fueron explotados masivamente en lenguajes dinámicos más modernos como
22 Perl_, Python_, Ruby_, etc. A partir de este momento, muchos lenguajes tomaron
23 esta característica y hubo una gran cantidad de investigación al respecto,
24 tomando particular importancia.
25
26 Nuevos algoritmos fueron desarrollados para atacar distintos problemas
27 particulares y para mejorar el rendimiento, que ha sido una inquietud
28 incesante en la investigación de recolectores de basura. Sin embargo el
29 lenguaje más masivo que ha adoptado un recolector de basura (al menos en el
30 ámbito empresarial) fue Java_, con el cual la investigación sobre recolección
31 de basura tomó un impulso extra. Probablemente el mayor desarrollo
32 e investigación en cuanto a recolección de basura se siga dando para Java_,
33 acotando tal vez un poco el alcance de estos avances dado que ese lenguaje
34 tiene características muy particulares (*tipado* estático, corre sobre una
35 máquina virtual muy rica en cuanto a información de tipos, etc.) no
36 disponibles en otros lenguajes. Sin embargo los lenguajes funcionales y/o con
37 *tipado* dinámico siguieron teniendo un nivel de investigación y desarrollo
38 importante, dado que fueron concebidos en su mayoría con la recolección de
39 basura como parte del diseño.
40
41 Probablemente los lenguajes en los cuales es más difícil aplicar los avances
42 que se desprendieron de Java_ o de las otras categorías de lenguajes con más
43 avances en recolección de basura sean los de más bajo nivel, como C y C++, en
44 los cuales se da lo inverso en cuanto a disponibilidad de información en
45 tiempo de ejecución, sumado a la permisividad de estos lenguajes para realizar
46 manipulación de memoria directamente y trabajar a muy bajo nivel. De la mano
47 de estos lenguajes apareció otra veta de investigación en lo que se denominó
48 recolectores de basura *conservativos*.
49
50 Una categoría de lenguaje que ha quedado prácticamente vacante es un término
51 intermedio entre los lenguajes de muy alto nivel (como Java_, Python_,
52 Haskell_, etc.) y los de muy bajo nivel (como C y C++). El lenguaje de
53 programación D_ está en esta categoría y, a pesar de haber sido diseñado con
54 soporte de recolección de basura, al ser un lenguaje relativamente nuevo, ha
55 tenido muy poco desarrollo en ese área. El lenguaje tiene todas las
56 limitaciones de lenguajes de bajo nivel como C y C++, pero esas limitaciones
57 suelen estar más aisladas, y provee un poco más de información que puede ser
58 aprovechada por un recolector de la que suelen proveer los demás lenguajes de
59 estas características. Esto presenta una oportunidad única en cuanto
60 a investigación y desarrollo de recolectores que se ajusten a estas
61 características.
62
63
64
65 Objetivo
66 ----------------------------------------------------------------------------
67
68 El objetivos de esta tesis es mejorar el recolector de basura de el lenguaje
69 D_, investigando el estado del arte en recolección de basura y haciendo un
70 análisis de viabilidad de los algoritmos principales para optar por el que
71 mejor se ajuste a D_. Una parte muy importante de este análisis es participar
72 de la comunidad del lenguaje para poder desarrollar una mejora que sea
73 aceptada y utilizada por dicha comunidad. Por lo tanto el algoritmo o mejora
74 que "mejor se ajuste a D_" estará supeditado en gran parte a los
75 requerimientos más urgentes de los usuarios de D_.
76
77
78
79 Alcance
80 ----------------------------------------------------------------------------
81
82 El alcance de este trabajo se limita a los siguientes puntos:
83
84 * Explorar los problemas del recolector de basura actual.
85 * Evaluar cuales de estos problemas son de mayor importancia para la
86   comunidad de usuarios de D_.
87 * Analizar la viabilidad de algoritmos y optimizaciones para solucionar
88   o minimizar el o los problemas de mayor importancia.
89 * Implementar una solución o mejora en base al análisis elaborado.
90 * Comparar mediante la utilización de un banco de pruebas (*benchmark*) la
91   implementación con la actual y posiblemente con otras implementaciones
92   relevantes a fin de cuantificarla.
93 * Proveer todos los elementos necesarios para que la solución pueda ser
94   adoptada por el lenguaje.
95
96
97 Limitaciones
98 ----------------------------------------------------------------------------
99
100 Dado que el lenguaje de programación D_ puede ser enlazado con código objeto
101 C, y por lo tanto interactuar directamente con éste, podrán haber limitaciones
102 en el recolector resultante con respecto a esto. En este trabajo se busca
103 lograr un recolector que sea eficiente para casos en donde el código que
104 interactúa con C esté bien aislado, por lo que estas porciones de código
105 pueden quedar por fuera del recolector de basura o necesitar un manejo
106 especial.
107
108
109 Organización
110 ----------------------------------------------------------------------------
111
112 Este trabajo se encuentra dividido en 6 capítulos que se describen
113 a continuación:
114
115 1. :ref:`intro`: breve descripción del problema a tratar, presentando
116    los objetivos y alcances del trabajo.
117 2. :ref:`d_lang`: presenta las características principales del lenguaje,
118    destacando aquellas de mayor relevancia para este trabajo.
119 3. :ref:`gc`: presenta los algoritmos básicos de recolección de basura
120    y describe el estado del arte.
121 4. :ref:`dgc`: explica los problemas particulares que presenta el
122    lenguaje para la recolección de basura, describe el diseño
123    e implementación del recolector actual, presenta sus principales
124    deficiencias y analiza la viabilidad de diferentes soluciones.
125 5. :ref:`solucion`: propone una solución a los problemas principales
126    encontrados y define un banco de pruebas para analizar los resultados de
127    las modificaciones hechas.
128 6. :ref:`conclusion`: describe las conclusiones alcanzadas en base a los
129    resultados del trabajo, analizando puntos pendientes, mostrando trabajos
130    relacionados y proponiendo trabajos futuros.
131
132
133 .. include:: links.rst
134
135 .. vim: set ts=3 sts=3 sw=3 et tw=78 spelllang=es :