]> git.llucax.com Git - z.facultad/75.00/informe.git/commitdiff
Corregir errores de tipeo y similares
authorLeandro Lucarella <llucax@gmail.com>
Sun, 5 Jul 2009 00:08:15 +0000 (21:08 -0300)
committerLeandro Lucarella <llucax@gmail.com>
Sun, 5 Jul 2009 00:08:15 +0000 (21:08 -0300)
Este parche corrige algunos errores de tipeo y aclara algunos puntos
confusos en base a algunas observaciones que gentilmente Albertito me hizo
sobre el documento.

La revisión se realizó hasta la sección "El lenguaje de programación D"
inclusive.

source/d.rst
source/intro.rst
source/links.rst
source/resumen.rst

index 35591d4a2dbbf301ee0acb5653175c9e0e7f0c92..87acdccf1934aed819c08a421778716108c9085d 100644 (file)
@@ -2,7 +2,7 @@
 .. Introducción y breve reseña del lenguaje de programación D. También
    se presentan las necesidades particulares de D con respecto al
    recolector de basura y su estado actual.
-   ESTADO: TERMINADO, CORREGIDO
+   ESTADO: TERMINADO, CORREGIDO, REVISADO
 
 
 .. _d_lang:
@@ -56,15 +56,15 @@ y funciones *puras* [#dpure]_ (a mediados de 2007).
    estilo funcional en D_.
 
 A partir de este momento la versión 1.0 quedó *teóricamente* congelada,
-introduciendo solo cambios que arreglen errores (*bug fixes*), introduciendo
-todos las nuevas características solamente en la versión 2.0 del lenguaje. La
-realidad es que se hicieron cambios incompatibles a la versión 1.0 del
-lenguaje en reiteradas ocasiones, pero se fue tendiendo a cada vez introducir
-menos cambios incompatibles. Sin embargo al día de hoy el compilador de
-referencia sigue teniendo algunas características presentes en la
-especificación del lenguaje sin implementar, por lo que todavía no hay una
-implementación completa de la versión 1.0 del lenguaje, siendo esta etiqueta
-todavía un poco arbitraria.
+introduciendo solo cambios que arreglen errores (*bug fixes*), agregando
+nuevas características solamente en la versión 2.0 del lenguaje. La realidad
+es que se hicieron cambios incompatibles a la versión 1.0 del lenguaje en
+reiteradas ocasiones, pero se fue tendiendo a cada vez introducir menos
+cambios incompatibles. Sin embargo al día de hoy el compilador de referencia
+sigue teniendo algunas características presentes en la especificación del
+lenguaje sin implementar, por lo que todavía no hay una implementación
+completa de la versión 1.0 del lenguaje, siendo esta etiqueta todavía un poco
+arbitraria.
 
 El lenguaje ha sido, hasta el desarrollo de la versión 2.0 al menos, un
 esfuerzo unipersonal de `Walter Bright`_, dados sus problemas a la hora de
@@ -91,20 +91,20 @@ de cohesión. Finalmente a principios de 2007, coincidiendo por casualidad con
 la aparición de D_ 1.0, se anuncia el resultado de este combinación bajo el
 nombre de Tango_, proveyendo una alternativa completa y madura a la biblioteca
 estándar de D_ Phobos_.  A principios de 2008 los principales desarrolladores
-de Tango_ (Kris Bell, Sean Kelly, Lars Ivar Igesund y Michael Parker publican
+de Tango_ (Kris Bell, Sean Kelly, Lars Ivar Igesund y Michael Parker) publican
 el libro llamado `Learn to Tango with D`_.
 
 Esto por un lado fue un gran avance porque dio un impulso muy considerable al
 lenguaje pero por otro un gran retroceso, porque todavía al día de hoy D_ 1.0
-tiene 2 bibliotecas base, una estándar pero de peor calidad y menos mantenida
-y una alternativa de mayor calidad y apertura a la 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 no trivial en asegurarse de
-que funcione con ambas).
+tiene dos bibliotecas base, una estándar pero de peor calidad y menos
+mantenida y una alternativa de mayor calidad y apertura a la 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).
 
 Esto hace que la compatibilidad de programas y bibliotecas esté muy
-fragmentada entre las 2 bibliotecas base. Si bien no parece que vaya a haber
+fragmentada entre las dos bibliotecas base. Si bien no parece que vaya a haber
 solución alguna a este problema para D 1.0, D 2.0 va en camino a solucionar
 este problema ya que utiliza DRuntime_, un nuevo intento de Sean Kelly por
 proveer una biblioteca *runtime* bien organizada y mantenida, que es una
@@ -270,7 +270,7 @@ Iteración sobre colecciones (``foreach``):
 
 Instanciación implícita de funciones generalizadas:
    el lenguaje es capaz de deducir los parámetros siempre que no hayan
-   ambigüedades
+   ambigüedades.
 
    Ejemplo::
 
@@ -310,15 +310,15 @@ Tipos, valores (incluyendo *strings*) y *templates* como parámetros:
 
       template hash(string s, uint so_far=0) {
          static if (s.length == 0)
-            const hash = sofar;
+            const hash = so_far;
          else
-            const hash = hash!(s[1 .. length], sofar * 11 + s[0]);
+            const hash = hash!(s[1 .. length], so_far * 11 + s[0]);
       }
       string s = hash!("hola"); // calculado en tiempo de compilación
 
 Cantidad de parámetros variables para *templates*:
    Esto permite implementar tuplas u otros algoritmos que inherentemente deben
-   tomar parámetros variables en tiempo de compilación.
+   tomar una cantidad variable de parámetros en tiempo de compilación.
 
    Ejemplo::
 
@@ -490,8 +490,8 @@ Objetos y arreglos *livianos*:
 
 Rendimiento:
    la :ref:`d_generic` permite realizar muchas optimizaciones ya que se
-   resuelve en tiempo de compilación y por lo tanto aumentando la
-   rendimiento en la ejecución.
+   resuelve en tiempo de compilación y por lo tanto aumenta el rendimiento en
+   la ejecución.
 
 Número de punto flotante de 80 bits:
    El tipo ``real`` de D_ tiene precisión de 80 bits si la plataforma lo
@@ -518,12 +518,12 @@ Programación de alto nivel
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Programación de alto nivel se refiere a construcciones más avanzadas que una
-sentencia para iterar; expresiones con una semántica más ricas que permiten
+sentencia para iterar; expresiones con una semántica más ricas que proveen de
 mayor expresividad al programador o le permiten focalizarse de mejora manera
 en los algoritmos independizándose del *hardware* o de como funciona una
 computadora. Es exactamente el opuesto a :ref:`d_low_level`.
 
-En general estas características tiene como efecto secundario una mejora de la
+En general estas características tienen como efecto secundario una mejora de la
 productividad de los programadores. D_ adopta herramientas de muchos lenguajes
 de alto nivel, como Java_ y Python_, por ejemplo:
 
@@ -531,7 +531,7 @@ Manejo automático de memoria:
    al igual que C/C++ y prácticamente cualquier lenguaje imperativo maneja
    automáticamente el *stack*, pero a diferencia de la mayoría de los
    lenguajes de bajo nivel, D_ permite manejar el *heap* de manera automática
-   también a través de un *recolección de basura*.
+   también a través de un *recolector de basura*.
 
 Sistema de paquetes y módulos (similar a Java_ o Python_):
    un módulo es una unidad que agrupa clases, funciones y cualquier otra
@@ -592,7 +592,7 @@ Funciones y delegados:
 
       bool buscar(T[] arreglo, T item, bool delegate(T x, T y) igual) {
          foreach (t, arreglo)
-            if (igual(t, elemento))
+            if (igual(t, item))
                return true;
          return false;
       }
@@ -666,7 +666,7 @@ Arreglos *dinámicos* y arreglos asociativos:
       foo(a);
 
 Documentación embebida:
-   D_ provee un sistema de documentación embebida, análogo a lo que provee
+   D_ provee un sistema de documentación embebida, análogo a lo que proveen
    Java_ o Python_ en menor medida. Hay comentarios especiales del código que
    pueden ser utilizados para documentarlo de forma tal que luego el
    compilador pueda extraer esa información para generar un documento.
@@ -814,8 +814,8 @@ Propiedades (*properties*):
       estamos ante un valor inválido.
 
    ``stringof``:
-      representación textual del tipo (ejemplo: ``(1+2).stringof`` -> ``"1
-      + 2"``).
+      representación textual del símbolo o expresión (ejemplo:
+      ``(1+2).stringof`` -> ``"1 + 2"``).
 
    ``mangleof``:
       representación textual del tipo *mutilado* [#dmangle]_.
@@ -1069,17 +1069,26 @@ abandonado. No hay un *release* desde agosto de 2007 y no hay actualizaciones
 serias del código desde mediados de 2008, por lo que no parece haber muchas
 probabilidades de que se siga manteniendo.
 
-LDC_ es lo opuesto; un compilador joven, nacido a mediados de 2007 (aunque vio
-la luz un año después aproximadamente), su primer *release* fue a principios
-de 2009 y tuvo un crecimiento excepcional. En la actualidad inclusive pasa más
-pruebas de estrés que el compilador de referencia DMD_.  Como *back-end*
-utiliza LLVM_, otro proyecto joven y con una tasa de crecimiento muy alta.
+LDC_ es lo opuesto; un compilador joven, nacido a mediados de 2007 como un
+proyecto personal y privado de Tomas Lindquist Olsen, que estuvo trabajando de
+forma privada en el proyecto hasta mediados de 2008, momento en que decide
+publicar el código mediante una licencia libre. Para ese entonces el
+compilador era todavía inestable y faltaban implementar varias cosas, pero el
+estado era lo suficientemente bueno como para captar varios colaboradores muy
+capaces, como `Christian Kamm`_ y Frits Van Bommel que rápidamente se
+convirtieron en parte fundamental del proyecto. El primer *release* (0.9) de
+una versión relativamente completa y estable fue a principios de 2009 que fue
+seguido por la versión 0.9.1 que como puntos más salientes agregó soporte para
+x86-64 y assembly embebido. El compilador tuvo y sigue teniendo un crecimiento
+excepcional. En la actualidad inclusive pasa más pruebas de estrés que el
+compilador de referencia DMD_. Como *back-end* utiliza LLVM_, otro proyecto
+joven y con una tasa de crecimiento muy alta.
 
 Además de estos compiladores hay varios otros experimentales, pero ninguno de
 ellos de calidad suficiente todavía. Por ejemplo hay un compilador
 experimental que emite *CIL* (*Common Intermediate Language*), el *bytecode*
-de `.NET`_, llamado DNet_. También hay un *fron-end* escrito en D_, llamado
-Dil_
+de `.NET`_, llamado DNet_. También hay un *front-end* escrito en D_, llamado
+Dil_.
 
 Originalmente, dado que GDC_ estaba siendo mantenido y que LDC_ no existía,
 este trabajo iba a ser realizado utilizando GDC_ como compilador, dado que al
index 900ac5c9199c1fc4bc55f30940e7c97aa96c0f7b..342d577f2dc1c70a1c6c955bb87d6e3b9de19710 100644 (file)
@@ -1,7 +1,7 @@
 
 .. Introducción al trabajo, objetivos, alcance, limitaciones y organización
    del documento.
-   ESTADO: TERMINADO, CORREGIDO
+   ESTADO: TERMINADO, CORREGIDO, REVISADO
 
 
 .. _intro:
@@ -28,14 +28,14 @@ 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
+disponibles en otros lenguajes. Sin embargo los lenguajes funcionales y/o 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
+que se desprendieron de Java_ o de las otras categorías 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
@@ -44,15 +44,16 @@ 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.
+Haskell_, etc.) y los de muy bajo nivel (como C y C++). 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.
 
 
 
@@ -63,10 +64,10 @@ 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_.
+de la comunidad del lenguaje para poder desarrollar una mejora que sea
+aceptada y utilizada por dicha comunidad. 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_.
 
 
 
index c658a3a71cbf9ea83af9b17d43eadbcb05ba44df..ce5e648fed7fdbf5efbc8683315a0ae8d619f2a0 100644 (file)
@@ -38,6 +38,7 @@
 .. Personas:
 .. _`Walter Bright`: http://www.walterbright.com/
 .. _`John McCarthy`: http://en.wikipedia.org/wiki/John_McCarthy_%28computer_scientist%29
+.. _`Christian Kamm`: http://www.ckamm.de/
 
 
 .. Misc:
index a781c2a18ab9d96abf7d950970da152952efd1d6..1a58b3c454fc40aefadc1ee8bf855bdad490b61a 100644 (file)
@@ -1,6 +1,6 @@
 
 .. Resumen del trabajo
-   ESTADO: TERMINADO, CORREGIDO
+   ESTADO: TERMINADO, CORREGIDO, REVISADO
 
 
 .. _resumen:
@@ -11,17 +11,17 @@ Resumen
 **RESUMEN**
 
 El problema del manejo de memoria ha sido un factor clave en los lenguajes de
-programación desde que empezaron a forjarse los primero lenguajes con un
+programación desde que empezaron a forjarse los primeros lenguajes con un
 mínimo nivel de abstracción, dado que la administración de memoria explícita
 ha sido un flagelo constante en el mundo de la informática, provocando
 pérdidas de memoria que degradan el rendimiento de programas de larga vida
-y siendo la principal fuente de problemas de seguridad, entre otros problemas.
+y siendo la principal fuente de problemas de seguridad, entre otros.
 
-Es por esto que se desde la primera aparición de lenguajes de más alto nivel,
-se buscó abstraer al programador de administrar la memoria explícitamente,
+Es por esto que desde la primera aparición de lenguajes de alto nivel, se
+buscó abstraer al programador de administrar la memoria explícitamente,
 desarrollando un área de investigación por mérito propio denominada
 **recolección de basura** (o *garbage collection* en inglés). Se trata de un
-servicio provisto (generalmente por el lenguaje) que permite auto-detectar
+servicio (provisto generalmente por el lenguaje) que permite auto-detectar
 cuando una celda de memoria ha dejado de ser utilizada por el programa para
 poder ser reciclada en el futuro, liberando al programador de llevar cuenta
 del tiempo de vida de una celda y su liberación explícita cuando ésta deja de