comunidad (pero no estándar). El peor problema es que ambas son
**incompatibles**, por lo que un programa hecho con Tango_ no funciona con
Phobos_ y viceversa (a menos que el programador haya invertido una cantidad de
-tiempo considerable en asegurarse de que funcione con ambas).
+tiempo considerable en asegurarse que funcione con ambas).
Esto hace que la compatibilidad de programas y bibliotecas esté muy
fragmentada entre las dos bibliotecas base. Si bien no parece que vaya a haber
por C++, pudiendo extraer de él los mejores conceptos pero evitando sus
mayores problemas.
-Otra gran diferencia con C++ es la facilidad para ser analizado
-sintácticamente (*parsing*), ya que fue especialmente diseñado para ser
-sencillo y a diferencia de C y C++ su gramática es independiente del contexto
-(*context-free grammar*). Esto permite que D pueda ser compilado en pequeños
-pasos bien separados:
-
-1. Análisis léxico.
-2. Análisis sintáctico.
-3. Análisis semántico.
-4. Optimizaciones.
-5. Generación de código.
-
-Esto favorece la creación de herramientas dada la facilidad de usar solamente
-la cantidad de análisis necesario para cada una (por ejemplo un editor de
-textos puede tener hasta análisis sintáctico para proveer resaltado o un
-entorno de desarrollo puede proveer herramientas para re-factorizar el código
-haciendo uso del análisis semántico).
-
-Una de las características que nunca pudo entrar en el estándar de C++ es la
-recolección de basura. D_ no comete el mismo error.
+Una gran diferencia con C++ es que el análisis sintáctico (*parsing*) se puede
+realizar sin ningún tipo de análisis semántico, dado que a diferencia de éstos
+su gramática es libre de contexto (*context-free grammar*). Esto acelera
+y simplifica considerablemente el proceso de compilación.
+
+Otra gran diferencia es que D_ decide incluir recolección de basura como parte
+del lenguaje, mientras que en el comité de estandarización de C++ nunca se
+llegó a un consenso para su incorporación.
Características del lenguaje
*mutator* requiere asignar memoria pero no hay más memoria libre conocida
disponible y el recolector se encarga de generar la información de
conectividad desde cero para determinar qué celdas son *basura*.
-
-Esta es la madre de toda clasificación, también conocidos como :ref:`conteo de
-referencias <gc_rc>` (directa) y *traicing garbage collection* (indirecta).
Prácticamente todos los recolectores menos el :ref:`conteo de referencias
-<gc_rc>` están dentro de esta última categoría (como por ejemplo, el
-:ref:`marcado y barrido <gc_mark_sweep>` y :ref:`copia de semi-espacio
-<gc_copy>`).
+<gc_rc>` están dentro de esta categoría (como por ejemplo, el :ref:`marcado
+y barrido <gc_mark_sweep>` y :ref:`copia de semi-espacio <gc_copy>`).
Otros ejemplos de recolectores modernos *directos* son el recolector de basura
de Python_ [NAS00]_ y [LINS05]_ (aunque ambos tiene un algoritmo *indirecto*
El alcance de este trabajo se limita a los siguientes puntos:
* Explorar los problemas del recolector de basura actual.
-* Evaluar cuales de estos problemas son de mayor importancia para la
+* Evaluar cuáles de estos problemas son de mayor importancia para la
comunidad de usuarios de D_.
* Analizar la viabilidad de algoritmos y optimizaciones para solucionar
o minimizar el o los problemas de mayor importancia.