]> git.llucax.com Git - z.facultad/75.00/informe.git/blobdiff - source/d.rst
Reacomodar texto de ejemplo de RC
[z.facultad/75.00/informe.git] / source / d.rst
index 1fd5436e06810253f642cc0b342e0e03bd69aeca..b4af95dc42de9436f3147fea3bec2b502c025eeb 100644 (file)
@@ -173,6 +173,7 @@ A continuación se enumeran las principales características de D_,
 agrupadas por unidades funcional o paradigmas que soporta:
 
 
 agrupadas por unidades funcional o paradigmas que soporta:
 
 
+
 .. _ref_d_generic:
 
 Programación genérica y meta-programación
 .. _ref_d_generic:
 
 Programación genérica y meta-programación
@@ -452,11 +453,14 @@ Provee acceso a *assembly*:
 ``goto``:
    al igual que C y C++, D_ provee la flexibilidad del uso de ``goto``.
 
 ``goto``:
    al igual que C y C++, D_ provee la flexibilidad del uso de ``goto``.
 
-Compatibilidad con C
+Compatibilidad con C:
    soporta todos los tipos de C y es ABI [#abi]_ compatible con éste. Esto
    permite enlazar archivos objeto estándar de C y D_ en un mismo programa.
    Además permite interoperar con C a través de ``extern (C)``.
 
    soporta todos los tipos de C y es ABI [#abi]_ compatible con éste. Esto
    permite enlazar archivos objeto estándar de C y D_ en un mismo programa.
    Además permite interoperar con C a través de ``extern (C)``.
 
+   .. [#abi] Interfaz de Aplicación Binaria (del inglés *Application Binary
+      Interface*).
+
    Ejemplo::
 
       extern (C) printf(const char* format, ...);
    Ejemplo::
 
       extern (C) printf(const char* format, ...);
@@ -519,9 +523,6 @@ Control de alineación de miembros de una estructura:
       // paquete_de_red.sizeof == 3
 
 
       // paquete_de_red.sizeof == 3
 
 
-.. [#abi] Interfaz de Aplicación Binaria (del inglés *Application Binary
-    Interface*).
-
 
 .. _ref_d_high_level:
 
 
 .. _ref_d_high_level:
 
@@ -592,6 +593,14 @@ Funciones y delegados:
    evaluados de forma perezosa no son más que un delegado que se ejecuta
    solo cuando es necesario.
 
    evaluados de forma perezosa no son más que un delegado que se ejecuta
    solo cuando es necesario.
 
+   .. [#1stclasscity] Por ciudadano de primera clase se entiende que se trata
+      de un tipo soportado por completo por el lenguaje, disponiendo de
+      expresiones literales anónimas, pudiendo ser almacenados en variables,
+      estructuras de datos, teniendo una identidad intrínseca, más allá de un
+      nombre dado, etc. En realidad los arreglos asociativos no pueden ser
+      expresados como literales anónimos pero sí tienen una sintaxis especial
+      soportada directamente por el lenguaje.
+
    Ejemplo::
 
       bool buscar(T[] arreglo, T item, bool delegate(T x, T y) igual) {
    Ejemplo::
 
       bool buscar(T[] arreglo, T item, bool delegate(T x, T y) igual) {
@@ -688,14 +697,6 @@ Números complejos:
       float   re = 1.0;
       cfloat c   = re + im; // c == 1.0 + 5.0i
 
       float   re = 1.0;
       cfloat c   = re + im; // c == 1.0 + 5.0i
 
-.. [#1stclasscity] Por ciudadano de primera clase se entiende que se
-    trata de un tipo soportado por completo por el lenguaje, disponiendo de
-    expresiones literales anónimas, pudiendo ser almacenados en variables,
-    estructuras de datos, teniendo una identidad intrínseca, más allá
-    de un nombre dado, etc. En realidad los arreglos asociativos no pueden
-    ser expresados como literales anónimos pero sí tienen una sintaxis
-    especial soportada directamente por el lenguaje.
-
 
 
 Programación orientada a objetos
 
 
 Programación orientada a objetos
@@ -716,6 +717,20 @@ Objetos *pesados*:
    problemas con los que se enfrenta C++ (como *slicing* [#dslicing]_)
    debido a que permite semántica por valor [#dvalsem]_.
 
    problemas con los que se enfrenta C++ (como *slicing* [#dslicing]_)
    debido a que permite semántica por valor [#dvalsem]_.
 
+   .. [#drefsem] Semántica de referencia significa que el tipo es tratado como
+      si fuera un puntero. Nunca se hacen copias del objeto, siempre se pasa
+      por referencia.
+
+   .. [#dslicing] Este problema se da en C++ cuando se pasa una clase derivada
+      a una función que acepta una clase base por valor como parámetro. Al
+      realizarse una copia de la clase con el constructor de copia de la clase
+      base, se pierden (o *rebanan*) los atributos de la clase derivada, y la
+      información de tipos en tiempo de ejecución (*RTTI*).
+
+   .. [#dvalsem] Semántica de valor significa que el tipo es tratado como si
+      fuera un valor concreto. En general se pasa por valor y se hacen copias
+      a menos que se utilice explícitamente un puntero.
+
    D_ además soporta tipos de retorno covariantes para funciones virtuales.
    Esto significa que una función sobreescrita por una clase derivada puede
    retornar un tipo que sea derivado del tipo retornado por la función
    D_ además soporta tipos de retorno covariantes para funciones virtuales.
    Esto significa que una función sobreescrita por una clase derivada puede
    retornar un tipo que sea derivado del tipo retornado por la función
@@ -812,6 +827,9 @@ Propiedades (*properties*):
       valor de inicialización por omisión (ejemplo: ``float.init`` -> *NaN*
       [#dnan]_).
 
       valor de inicialización por omisión (ejemplo: ``float.init`` -> *NaN*
       [#dnan]_).
 
+   .. [#dnan] Del inglés *Not A Number*, es un valor especial que indica que
+      estamos ante un valor inválido.
+
    ``stringof``:
       representación textual del tipo (ejemplo: ``(1+2).stringof`` -> ``"1
       + 2"``).
    ``stringof``:
       representación textual del tipo (ejemplo: ``(1+2).stringof`` -> ``"1
       + 2"``).
@@ -819,6 +837,13 @@ Propiedades (*properties*):
    ``mangleof``:
       representación textual del tipo *mutilado* [#dmangle]_.
 
    ``mangleof``:
       representación textual del tipo *mutilado* [#dmangle]_.
 
+   .. [#dmangle] *Name mangling* es el nombre dado comunmente a una técnica
+      necesaria para poder sobrecargar nombres de símbolos. Consiste en
+      codificar los nombres de las funciones tomando como entrada el nombre de
+      la función y la cantidad y tipo de parámetros, asegurando que dos
+      funciones con el mismo nombre pero distintos parámetros (sobrecargada)
+      tengan nombres distintos.
+
    ``alignof``
       alineación de una estructura o tipo.
 
    ``alignof``
       alineación de una estructura o tipo.
 
@@ -831,26 +856,6 @@ Propiedades (*properties*):
    http://www.digitalmars.com/d/1.0/property.html
 
 
    http://www.digitalmars.com/d/1.0/property.html
 
 
-.. [#drefsem] Semántica de referencia significa que el tipo es tratado como
-   si fuera un puntero. Nunca se hacen copias del objeto, siempre se pasa
-   por referencia.
-.. [#dslicing] Este problema se da en C++ cuando se pasa una clase derivada
-   a una función que acepta una clase base por valor como parámetro. Al
-   realizarse una copia de la clase con el constructor de copia de la clase
-   base, se pierden (o *rebanan*) los atributos de la clase derivada, y la
-   información de tipos en tiempo de ejecución (*RTTI*).
-.. [#dvalsem] Semántica de valor significa que el tipo es tratado como
-   si fuera un valor concreto. En general se pasa por valor y se hacen
-   copias a menos que se utilice explícitamente un puntero.
-.. [#dnan] Del inglés *Not A Number*, es un valor especial que indica que
-   estamos ante un valor inválido.
-.. [#dmangle] *Name mangling* es el nombre dado comunmente a una técnica
-   necesaria para poder sobrecargar nombres de símbolos. Consiste en
-   codificar los nombres de las funciones tomando como entrada el nombre de
-   la función y la cantidad y tipo de parámetros, asegurando que dos
-   funciones con el mismo nombre pero distintos parámetros (sobrecargada)
-   tengan nombres distintos.
-
 
 Programación confiable
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Programación confiable
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -1058,6 +1063,15 @@ Artistic_/GPL_ y es utilizado por los otros dos compiladores, por lo
 tanto en realidad hay solo un compilador disponible con 3 *back-ends*
 [#backend]_ diferentes.
 
 tanto en realidad hay solo un compilador disponible con 3 *back-ends*
 [#backend]_ diferentes.
 
+.. [#frontend] *Front-end* es la parte del compilador encargada de hacer el
+   análisis léxico, sintáctico y semántico del código fuente, generando una
+   representación intermedia que luego el *back-end* convierte a código de
+   máquina.
+
+.. [#backend] El *back-end* es la parte del compilador encargada de convertir
+   la representación intermedia generada por el *front-end* a código de
+   máquina.
+
 Con `DMD 1.041`__ se publicó el código fuente completo del compilador,
 pero con una licencia muy restrictiva para uso personal, por lo que el
 único efecto logrado por esto es que la gente pueda mandar parches
 Con `DMD 1.041`__ se publicó el código fuente completo del compilador,
 pero con una licencia muy restrictiva para uso personal, por lo que el
 único efecto logrado por esto es que la gente pueda mandar parches
@@ -1092,14 +1106,6 @@ gracias a la excepcional tasa de crecimiento de LDC_ y al abandono de GDC_
 se terminó desarrollando el trabajo utilizando LDC_.
 
 
 se terminó desarrollando el trabajo utilizando LDC_.
 
 
-.. [#frontend] *Front-end* es la parte del compilador encargada de hacer el
-   análisis léxico, sintáctico y semántico del código fuente, generando una
-   representación intermedia que luego el *back-end* convierte a código de
-   máquina.
-.. [#backend] El *back-end* es la parte del compilador encargada de
-   convertir la representación intermedia generada por el *front-end*
-   a código de máquina.
-
 
 .. include:: links.rst
 
 
 .. include:: links.rst