-
==========================
Recolección de basura en D
==========================
:Organización: Departamento de Computación, Facultad de Ingeniería
:Organización: Universidad de Buenos Aires
:Fecha: |date|
-:Revisión: 1
+:Revisión: 2
:Estado: Borrador
Introducción
============
-.. FIXME No me gusta como están redactados estos dos párrafos :S
-
-Los lenguajes modernos tienen una tendencia cada vez más marcada a
-adoptar técnicas cada vez más sofisticadas, haciéndolos más ricos y
+Los lenguajes modernos tienen una tendencia cada vez más marcada
+a adoptar técnicas más sofisticadas, haciéndolos más ricos y
convirtiéndolos realmente en lenguajes, no en meros preprocesadores que
-convierten de una forma muy directa el código en assembly, permitiendo
+convierten de una forma muy directa el código en *assembly*, permitiendo
construcciones semánticamente más ricas y permitiendo al programar una
mayor expresividad para plasmar algoritmos sin detenerse en los detalles
del *hardware*.
Estos conceptos supuestamente avanzados provienen, en general, de
-lenguajes académicos (muchos de ellos funcionales) que implementan
-estas funcionalidades hace mucho tiempo, pero que para su época o bien
-no tuvieron suficiente difusión en el ambiente empresarial o bien eran
-muy lentos por la baja capacidad de procesamiento de la época o eran
+lenguajes académicos (muchos de ellos funcionales) que implementan estas
+funcionalidades hace mucho tiempo, pero que para su época, o bien no
+tuvieron suficiente difusión en el ambiente empresarial, o bien eran
+muy lentos por la baja capacidad de procesamiento de la época o incluso
demasiado *revolucionarios* para ser adoptados por programadores que no
podían ver las ventajas que esos nuevos conceptos proveen.
'60 el concepto de recolección de basura como un mecanismo para alocar
y liberar recursos de forma automática, pero no fue hasta avanzados los
'90 que esta técnica se empezó a utilizar en lenguajes de programación
-de uso comercial, cuando fue popularizado por Java_. Incluso luego
-de más de 30 años para Java_ era costosa la recolección de basura,
-lo que sumado a la presencia de una máquina virtual para ejecutar los
-programas producidos condujo a que estos sean notablemente lentos. Aún
+de uso comercial, cuando fue popularizado por Java_. Incluso luego de
+más de 30 años para Java_ era costosa la recolección de basura, lo que
+sumado a la presencia de una máquina virtual para ejecutar los programas
+producidos condujo a que estos lenguajes sean notablemente lentos. Aún
así Java_ creció y entre las mejoras introducidas hubieron mejoras en
la recolección de basura. Otros lenguaje de programación populares que
utilizan alguna forma de recolección de basura son Python_, Ruby_, PHP_
y web. Tal vez es hora de que nazca un nuevo lenguaje de la experiencia
práctica implementando compiladores.
-D_ es un lenguaje de programación con sintáxis tipo C, multiparadigma,
+D_ es un lenguaje de programación con sintaxis tipo C, multiparadigma,
compilado, con tipado fuerte y estático, con buenas capacidades tanto de
programación de bajo nivel (*system programming*) como de alto nivel. Y
este es tal vez el punto más fuerte de D, brindar lo mejor de los 2
.. [#dtypeof] ``typeof`` permite especificar un tipo
inferido de una expresión. Más información en
http://www.digitalmars.com/d/declaration.html#typeof
-.. [#difexpr] Las *expresiones ``if``* permiten la compilación condicinal
+.. [#difexpr] Las *expresiones ``if``* permiten la compilación condicional
basada en las características de un tipo. Esto se realiza en favor
a una técnica utilizada en C++ de realizar *pattern matching*
sobre los parámetros de las plantillas. Más información en
Programación Orientada a Objetos
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-- Obejetos *pesadas* (polimórficos).
+- Objetos *pesadas* (polimórficos).
- Interfaces.
- Sobrecarga de operadores (con tipos de retorno covariantes [#dcovariant]_).
- Clases anidadas.
mayor abstracción.
Muchas veces se aduce también que la recolección de basura impide
-el desarrollo de programas eficientes. Si bien es inegable que la
+el desarrollo de programas eficientes. Si bien es innegable que la
recolección de basura impone una carga extra, ésta es, en la mayoría
de los casos, imperceptible. Incluso algunos algoritmos de recolección
de basura pueden aumentar la eficiencia en casos determinados, como
Problema
========
Como se ha visto, D_ es un lenguaje de programación muy completo,
-pero aún tiene algúnos aspectos inconclusos. Su recolector de basura
+pero aún tiene algunos aspectos inconclusos. Su recolector de basura
está en un estado de evolución muy temprana. Se trata de un marcado y
barrido (*mark and sweep*) conservativo que, en ciertas circunstancias,
no se comporta como es debido, ya que revisa toda la memoria del programa
- Elegir un conjunto de las mejores soluciones halladas e implementarlas.
Las soluciones que necesiten modificaciones en el lenguaje serán
implementadas modificando el compilador libre de D_ GDC_, que
- también será utilizado como plataforma principal de desarollo y
+ también será utilizado como plataforma principal de desarrollo y
prueba (debido a la disponibilidad completa del código fuente y
la libertad de usarlo y modificarlo libremente). De todas formas,
siempre se priorizarán las modificaciones al *frontend* [#frontend]_
el *frontend* publicado por DigitalMars_, como DMD_.
- Realizar pruebas sobre aplicaciones lo más variadas y reales posible
sobre todas las soluciones implementadas, de manera de determinar de
- forma fehasible las ventajas de unas y otras en cuanto a latencia,
+ forma fehaciente las ventajas de unas y otras en cuanto a latencia,
consumo de memoria, consumo de procesador, tiempos de pausa, etc.
- Presentar las conclusiones obtenidas del análisis y las pruebas
realizadas, tanto en el ámbito académico de la facultad como a la
Alcance
-------
-Las ténicas de recolección de basura que se analizarán en este trabajo
+Las técnicas de recolección de basura que se analizarán en este trabajo
incluirán, pero no se limitarán a:
- Conteo de referencia (*reference counting*).