Está en la página 1de 13

D (lenguaje de programación)

Ir a la navegaciónIr a la búsqueda

Desarrollador(es)

Digital Mars, Andrei Alexandrescu (desde 2006)


https://dlang.org

Información general

Extensiones .d
comunes

Paradigma multiparadigma: orientado a


objetos, imperativo, funcional, meta

1
Apareció en

Diseñado por Walter Bright, Andrei Alexandrescu (desde


2006)

Última versión 2.077.02 (01 de noviembre de 2017 (1 año, 11


estable meses y 17 días)3)

Sistema de tipos Fuerte, Estático


Implementaciones DMD, GDC, LDC

Influido por C++, C, C#, Java, Eiffel, Python, Ruby

Ha influido a MiniD, DScript, Vala, Qore, Swift4

Sistema operativo DMD: Unix-like (FreeBSD, Linux etc)


, Windows, OS X

Licencia GPL/Artistic (DMD frontend),


Boost (librerías estándar y de tiempo de
ejecución),
código disponible (DMD backend),5
Completamente open-source (LDC u
GDC)6

[editar datos en Wikidata]

D es un lenguaje de programación de propósito general desarrollado por Walter


Bright cuya primera versión apareció en 1999. Se origina como un rediseño de C++, con
un enfoque más pragmático, pero no es un lenguaje puramente derivado del anterior. D
ha mantenido algunas características de C++ y también está influido por otros conceptos
de otros lenguajes como Java, C# y Eiffel. Una versión estable fue lanzada el 2 de enero
de 2007.

Índice

 1Características
o 1.1Orientada a objetos
o 1.2Metaprogramación
o 1.3Funciones
o 1.4Manejo de memoria
o 1.5Interacción con otros sistemas
 2Ejemplos
o 2.1Ejemplo 1
 3Implementación
 4Herramientas de desarrollo
 5Problemas y controversias
o 5.1Sobrecarga de operadores
o 5.2División en la biblioteca estándar
o 5.3Soporte sin finalizar para bibliotecas compartidas/dinámicas
 6Referencias
 7Enlaces externos
Características[editar]
D está siendo diseñado con lecciones aprendidas del uso de C++ en vez de ser diseñado
desde una perspectiva teórica. Aunque usa muchos de los conceptos de C/C++ también
descarta algunos, y por lo tanto no es compatible con código escrito en C o C++. D
retiene la habilidad de C++ de hacer código de bajo nivel, permitiendo incluir código en
ensamblador. La herencia múltiple de C++ es reemplazada por herencia simple e
interfaces y 'mixins'. La sintaxis de declaración y la sintaxis para las expresiones se
parecen a las de C++.
El soporte del lenguaje ensamblador demuestra una de las diferencias entre D con
respecto a otros lenguajes como Java y C#. Esto permite incluir código específico de la
máquina con código D, una técnica comúnmente usada por programadores de software
de sistema para acceder a características de bajo nivel necesarias para interactuar
directamente con el hardware, permitiendo escribir software como sistemas operativos y
drivers.
D incluye soporte para comentarios de documentación, pero hasta ahora sólo el
compilador entregado por Digital Mars implementa un generador de documentación.
Orientada a objetos[editar]
La programación orientada a objetos está basada en herencia simple, con todas las
clases derivadas de la clase Object. D no soporta herencia múltiple; en vez de eso, usa
interfaces parecidas a las de Java, que son comparables a las clases abstractas de C++.
Metaprogramación[editar]
La Metaprogramación está soportada por una combinación de plantillas, la ejecución de
funciones en tiempo de compilación, tuplas y 'mixins' de cadenas. Soporta CTFE
(evaluación de funciones en tiempo de compilación). Los siguientes ejemplos demuestran
algunas de las características en tiempo de ejecución del lenguaje D.
Las plantillas en D se pueden escribir en más de un estilo imperativo comparado con el
estilo funcional de las plantillas de C++. El siguiente ejemplo es una función regular que
calcula el producto factorial de un número:

ulong factorial(ulong n)
{
ulong Producto = 1;
for(ulong i = 2; i <= n; i++){
Producto *= i;
}
return Producto;
}

Aquí, se muestra el uso de la palabra reservada static if (la construcción condicional


en tiempo de ejecución en D), para construir una plantilla que es capaz de realizar el
mismo cálculo:

template Factorial(ulong n)
{
ulong Producto = 1;
static for(i = 2; i <= n; i++){
Producto *= i;
}
return Producto;
}
En los siguientes dos ejemplos, la plantilla y la función definidas arriba se utilizan para
calcular factoriales. No es necesario especificar explícitamente los tipos de las
constantes cuando el compilador infiere sus tipos desde el lado derecho de
las asignaciónes:

enum fact_7 = Factorial!(7);

Este es un ejemplo de una función en tiempo de ejecución. Las funciones ordinarias


pueden usar constantes, aunque expresiones en tiempo de ejecución deben reunir ciertos
criterios:

enum fact_9 = factorial(9);

La función std.string.format , del estilo printf , sirve para dar formato a los datos
(también en tiempo de ejecución, a través de CTFE (ejecución de función en tiempo de
ejecución), y el pragma "msg" (directiva) que muestra el resultado en tiempo de
ejecución:

import std.string : format;


pragma(msg, format("7! = %s", fact_7));
pragma(msg, format("9! = %s", fact_9));

Los "mixins" de cadenas, combinadas con las CTFE, permiten generar código D usando
operaciones expresadas en cadenas de caracteres, en tiempo de ejecución. Puede ser
utilizado para análisis sintáctico de un lenguaje específico del dominio hacia código D, el
cual se compila como parte del programa:

import FooToD; // Modulo hipotetico que contiene una funcion que analiza el
código fuente Foo
// y devuelve el código D equivalente
void main()
{
mixin(fooToD(import("example.foo")));
}

Funciones[editar]
D soporta características de programación funcional tal como funciones
anónimas, clausuras, objetos recursivamente immutables y el uso de funciones de orden
superior. Hay dos sintaxis para funciones anónimas, incluyendo una forma de
declaración múltiple y una notación abreviada de expresiones simples:7

int function(int) g;
g = (x) { return x * x; }; // forma larga
g = (x) => x * x; // forma abreviada

Manejo de memoria[editar]
La memoria es usualmente manejada por un recolector de basura, pero objetos
específicos pueden ser finalizados inmediatamente cuando salen del ámbito. Es posible
el manejo de memoria explícito usando los operadores sobrecargados new y delete, y
simplemente llamando las funciones malloc y free de C directamente. La recolección de
basura puede ser controlada: los programadores pueden agregar y excluir rangos de
memoria de ser observados por el recolector, pueden pausar y reanudar el recolector y
forzar un ciclo generacional o de recolección completa.8 El manual da muchos ejemplos
de cómo implementar diferentes esquemas de manejo de memoria altamente optimizados
para cuando la recolección de basura es inadecuada para el programa.
Interacción con otros sistemas[editar]
La API de C es admitida, al igual que todos los tipos fundamentales y derivados de C,
permitiendo acceso directo al código existente escrito en C y bibliotecas. La biblioteca
estándar de C es parte del D estándar. A menos que se usen namespaces muy explícitos
puede ser de alguna forma difícil de acceder, como se puede observar en módulos
escritos en D que hagan uso de dicha característica. Pero la biblioteca estándar de D es
usualmente suficiente.

Ejemplos[editar]
Ejemplo 1[editar]
Este programa imprime sus argumentos de la línea de comandos. La función
principal main es el punto de inicio de un programa en D, y args es un arreglo de cadena
de caracteres que representa los argumentos de línea de comandos. En D, string es un
arreglo de caracteres, que se representa con char[] en D1, o immutable(char)[] en
D2.

1 import std.stdio: writefln;


2
3 void main(string[] args)
4 {
5 efln("args[%d] = '%s'", i, arg);
6 }

La palabra reservada foreach puede iterar cualquier colección. En este caso, produce
una sucesión de índices ( i ) y valores ( arg ) desde el arreglo args . El índice i y el
valor arg tiene sus tipos inferidos desde del tipo del arreglo args .

Implementación[editar]
Las implementaciones actuales de D compilan el código directamente a código máquina
para lograr una ejecución eficiente.
Cambios al lenguaje no se hacen regularmente desde la versión 1.0. El diseño está
virtualmente congelado, y nuevos lanzamientos se concentran en resolver bugs
existentes. El compilador oficial de Walter Bright define el lenguaje.

 DMD: El compilador de Digital Mars, el compilador oficial de D. El front end está bajo
la licencia Artistic License y la licencia GNU GPL; las fuentes para el front end son
distribuidas con los binarios del compilador. El back end es propietario, pero el
código es abierto.
 GDC: Un front end para el back end GCC, construido usando las fuentes del
compilador DMD. Snapshots soportan la versión 2.0 del lenguaje.
 LDC: Un compilador basado en DMD y usa LLVM como back end. El
backend LLVM permite que LDC logre optimizar el código alcanzando rendimiento
similar a C/C++ e incluso superándolo en ocasiones.

Herramientas de desarrollo[editar]
D todavía no está soportado en muchos entornos de desarrollo, lo cual es un problema
esencial para muchos usuarios. Editores que pueden ser usados incluyen a Entice
Designer, emacs, vim, SciTE y Zeus entre otros. Vim soporta el resaltado de sintaxis y
completado de código (a través de ctags parcheados). Code::Blocks incluye soporte
parcial del lenguaje.
Hay dos plu-gins en desarrollo para Eclipse, Descent y Mmrnmhrm.
Adicionalmente, hay IDEs escritas en el propio D como Poseidon, que incluye completado
de código, resaltado de sintaxis y depurador.
Aplicaciones escritas en D pueden ser depuradas con cualquier depurador de C o C++,
como GDB o WinDbg, aunque soporte para varias características fundamentales de D es
limitado. Un depurador con soporte explícito para D es Ddbg para Windows. El depurador
comercial ZeroBUGS para Linux tiene soporte experimental para D. Ddbg puede ser
usado con varios IDEs o desde la línea de comandos, ZeroBUGS tiene su propia interfaz
gráfica.

Problemas y controversias[editar]
Sobrecarga de operadores[editar]
La sobrecarga de operadores en D a veces son menos poderosas que las de C++. Un
ejemplo es el opIndex, que sufre porque D no permite regresar referencias. Esto hace
operaciones como obj[i]++; imposibles. La solución parcial de D es el
operador opIndexAssign, que solo repara casos donde la expresión indexeada es solo un
valor L como obj[i] = 5 pero no los casos originales.
División en la biblioteca estándar[editar]
La biblioteca estándar en D es llamada Phobos. Algunos miembros de la comunidad
piensan que Phobos es demasiado simple y que posee numerosos problemas, por lo cual
un reemplazo llamado Tango fue escrito.9 Sin embargo, Tango y Phobos eran
incompatibles debido a varias diferencias (soporte de hilos, recolector de basura, etc). La
existencia de dos bibliotecas, ambas de uso elevado, llevó a problemas significativos
donde algunos paquetes usan Phobos y otros usan Tango. Este problema fue resuelto
con la versión 2.0 del lenguaje.
Soporte sin finalizar para bibliotecas compartidas/dinámicas[editar]
Bibliotecas compartidas ELF de Unix son soportadas hasta un punto usando el
compilador GDC. En Windows, DLLs son soportadas y permiten a objetos recolectados
por el recolector de basura de ser seguramente pasados a funciones de C, ya que el
recolector de basura revisa el stack por punteros. Sin embargo, todavía hay limitaciones
con DLLs en D incluyendo el hecho de que la información en tiempo de ejecución de
clases definidas en la DLL es incompatible con esas definidas en el ejecutable, y que
cualquier objeto creado desde la DLL debe ser finalizado antes de que la DLL sea
descargada.10

Referencias[editar]
1. ↑ «D Change Log to Nov 7 2005». D Programming Language 1.0. Digital Mars. Consultado
el 1 de diciembre de 2011.
2. ↑ «Change Log: 2.077.0 – D Programming Language». D Programming Language 2.0. D
Language Foundation. Consultado el 4 de noviembre de 2017.
3. ↑ «DMD 2.077.0 Released». Consultado el 4 de noviembre de 2017.
4. ↑ «Building assert() in Swift, Part 2: __FILE__ and __LINE__ - Swift Blog -». Apple
Developer. Consultado el 26 de septiembre de 2014. «Swift borrows a clever feature from
the D language: these identifiers expand to the location of the caller when evaluated in a
default argument list.»
5. ↑ «readme.txt». DMD source code. GitHub. Consultado el 5 de marzo de 2012.
6. ↑ FAQ de digitalmars
7. ↑ «Expressions». Digital Mars. Consultado el 27 de diciembre de 2012.
8. ↑ «core.memory - D Programming Language - Digital Mars». Archivado desde el original el
28 de agosto de 2011. Consultado el 2009.
9. ↑ Wiki4D: Standard Lib
10. ↑ «Wiki4D: BestPractices/DLL». Consultado el 2009.

 Andrei Alexandrescu, The D Programming Language, Addison-Wesley Professional;


1ª ed. (12 de junio de 2010)

Enlaces externos[editar]
 Digital Mars: D programming language
 DSource, una comunidad open source del lenguaje D
 Wiki4D, una wiki sobre el lenguaje D
 gdc, D front-end for GCC
 The Computer Language Benchmarks Game
 Tabla de las características de D
 Video de presentación de D por Walter Bright
 Ddbg - Depurador de D para Windows
 Computerworld Interview with Walter Bright on D Programming Language

D (lenguaje de programación)
Ir a la navegaciónIr a la búsqueda

Desarrollador(es)

Digital Mars, Andrei Alexandrescu (desde 2006)


https://dlang.org

Información general
Extensiones .d
comunes

Paradigma multiparadigma: orientado a


objetos, imperativo, funcional, meta

1
Apareció en

Diseñado por Walter Bright, Andrei Alexandrescu (desde


2006)

Última versión 2.077.02 (01 de noviembre de 2017 (1 año, 11


estable meses y 17 días)3)

Sistema de tipos Fuerte, Estático

Implementaciones DMD, GDC, LDC

Influido por C++, C, C#, Java, Eiffel, Python, Ruby

Ha influido a MiniD, DScript, Vala, Qore, Swift4

Sistema operativo DMD: Unix-like (FreeBSD, Linux etc)


, Windows, OS X

Licencia GPL/Artistic (DMD frontend),


Boost (librerías estándar y de tiempo de
ejecución),
código disponible (DMD backend),5
Completamente open-source (LDC u
GDC)6

[editar datos en Wikidata]

D es un lenguaje de programación de propósito general desarrollado por Walter


Bright cuya primera versión apareció en 1999. Se origina como un rediseño de C++, con
un enfoque más pragmático, pero no es un lenguaje puramente derivado del anterior. D
ha mantenido algunas características de C++ y también está influido por otros conceptos
de otros lenguajes como Java, C# y Eiffel. Una versión estable fue lanzada el 2 de enero
de 2007.

Índice

 1Características
o 1.1Orientada a objetos
o 1.2Metaprogramación
o 1.3Funciones
o 1.4Manejo de memoria
o 1.5Interacción con otros sistemas
 2Ejemplos
o 2.1Ejemplo 1
 3Implementación
 4Herramientas de desarrollo
 5Problemas y controversias
o 5.1Sobrecarga de operadores
o 5.2División en la biblioteca estándar
o 5.3Soporte sin finalizar para bibliotecas compartidas/dinámicas
 6Referencias
 7Enlaces externos

Características[editar]
D está siendo diseñado con lecciones aprendidas del uso de C++ en vez de ser diseñado
desde una perspectiva teórica. Aunque usa muchos de los conceptos de C/C++ también
descarta algunos, y por lo tanto no es compatible con código escrito en C o C++. D
retiene la habilidad de C++ de hacer código de bajo nivel, permitiendo incluir código en
ensamblador. La herencia múltiple de C++ es reemplazada por herencia simple e
interfaces y 'mixins'. La sintaxis de declaración y la sintaxis para las expresiones se
parecen a las de C++.
El soporte del lenguaje ensamblador demuestra una de las diferencias entre D con
respecto a otros lenguajes como Java y C#. Esto permite incluir código específico de la
máquina con código D, una técnica comúnmente usada por programadores de software
de sistema para acceder a características de bajo nivel necesarias para interactuar
directamente con el hardware, permitiendo escribir software como sistemas operativos y
drivers.
D incluye soporte para comentarios de documentación, pero hasta ahora sólo el
compilador entregado por Digital Mars implementa un generador de documentación.
Orientada a objetos[editar]
La programación orientada a objetos está basada en herencia simple, con todas las
clases derivadas de la clase Object. D no soporta herencia múltiple; en vez de eso, usa
interfaces parecidas a las de Java, que son comparables a las clases abstractas de C++.
Metaprogramación[editar]
La Metaprogramación está soportada por una combinación de plantillas, la ejecución de
funciones en tiempo de compilación, tuplas y 'mixins' de cadenas. Soporta CTFE
(evaluación de funciones en tiempo de compilación). Los siguientes ejemplos demuestran
algunas de las características en tiempo de ejecución del lenguaje D.
Las plantillas en D se pueden escribir en más de un estilo imperativo comparado con el
estilo funcional de las plantillas de C++. El siguiente ejemplo es una función regular que
calcula el producto factorial de un número:

ulong factorial(ulong n)
{
ulong Producto = 1;
for(ulong i = 2; i <= n; i++){
Producto *= i;
}
return Producto;
}

Aquí, se muestra el uso de la palabra reservada static if (la construcción condicional


en tiempo de ejecución en D), para construir una plantilla que es capaz de realizar el
mismo cálculo:

template Factorial(ulong n)
{
ulong Producto = 1;
static for(i = 2; i <= n; i++){
Producto *= i;
}
return Producto;
}

En los siguientes dos ejemplos, la plantilla y la función definidas arriba se utilizan para
calcular factoriales. No es necesario especificar explícitamente los tipos de las
constantes cuando el compilador infiere sus tipos desde el lado derecho de
las asignaciónes:

enum fact_7 = Factorial!(7);

Este es un ejemplo de una función en tiempo de ejecución. Las funciones ordinarias


pueden usar constantes, aunque expresiones en tiempo de ejecución deben reunir ciertos
criterios:

enum fact_9 = factorial(9);

La función std.string.format , del estilo printf , sirve para dar formato a los datos
(también en tiempo de ejecución, a través de CTFE (ejecución de función en tiempo de
ejecución), y el pragma "msg" (directiva) que muestra el resultado en tiempo de
ejecución:

import std.string : format;


pragma(msg, format("7! = %s", fact_7));
pragma(msg, format("9! = %s", fact_9));

Los "mixins" de cadenas, combinadas con las CTFE, permiten generar código D usando
operaciones expresadas en cadenas de caracteres, en tiempo de ejecución. Puede ser
utilizado para análisis sintáctico de un lenguaje específico del dominio hacia código D, el
cual se compila como parte del programa:
import FooToD; // Modulo hipotetico que contiene una funcion que analiza el
código fuente Foo
// y devuelve el código D equivalente
void main()
{
mixin(fooToD(import("example.foo")));
}

Funciones[editar]
D soporta características de programación funcional tal como funciones
anónimas, clausuras, objetos recursivamente immutables y el uso de funciones de orden
superior. Hay dos sintaxis para funciones anónimas, incluyendo una forma de
declaración múltiple y una notación abreviada de expresiones simples:7

int function(int) g;
g = (x) { return x * x; }; // forma larga
g = (x) => x * x; // forma abreviada

Manejo de memoria[editar]
La memoria es usualmente manejada por un recolector de basura, pero objetos
específicos pueden ser finalizados inmediatamente cuando salen del ámbito. Es posible
el manejo de memoria explícito usando los operadores sobrecargados new y delete, y
simplemente llamando las funciones malloc y free de C directamente. La recolección de
basura puede ser controlada: los programadores pueden agregar y excluir rangos de
memoria de ser observados por el recolector, pueden pausar y reanudar el recolector y
forzar un ciclo generacional o de recolección completa.8 El manual da muchos ejemplos
de cómo implementar diferentes esquemas de manejo de memoria altamente optimizados
para cuando la recolección de basura es inadecuada para el programa.
Interacción con otros sistemas[editar]
La API de C es admitida, al igual que todos los tipos fundamentales y derivados de C,
permitiendo acceso directo al código existente escrito en C y bibliotecas. La biblioteca
estándar de C es parte del D estándar. A menos que se usen namespaces muy explícitos
puede ser de alguna forma difícil de acceder, como se puede observar en módulos
escritos en D que hagan uso de dicha característica. Pero la biblioteca estándar de D es
usualmente suficiente.

Ejemplos[editar]
Ejemplo 1[editar]
Este programa imprime sus argumentos de la línea de comandos. La función
principal main es el punto de inicio de un programa en D, y args es un arreglo de cadena
de caracteres que representa los argumentos de línea de comandos. En D, string es un
arreglo de caracteres, que se representa con char[] en D1, o immutable(char)[] en
D2.

1 import std.stdio: writefln;


2
3 void main(string[] args)
4 {
5 efln("args[%d] = '%s'", i, arg);
6 }
La palabra reservada foreach puede iterar cualquier colección. En este caso, produce
una sucesión de índices ( i ) y valores ( arg ) desde el arreglo args . El índice i y el
valor arg tiene sus tipos inferidos desde del tipo del arreglo args .

Implementación[editar]
Las implementaciones actuales de D compilan el código directamente a código máquina
para lograr una ejecución eficiente.
Cambios al lenguaje no se hacen regularmente desde la versión 1.0. El diseño está
virtualmente congelado, y nuevos lanzamientos se concentran en resolver bugs
existentes. El compilador oficial de Walter Bright define el lenguaje.

 DMD: El compilador de Digital Mars, el compilador oficial de D. El front end está bajo
la licencia Artistic License y la licencia GNU GPL; las fuentes para el front end son
distribuidas con los binarios del compilador. El back end es propietario, pero el
código es abierto.
 GDC: Un front end para el back end GCC, construido usando las fuentes del
compilador DMD. Snapshots soportan la versión 2.0 del lenguaje.
 LDC: Un compilador basado en DMD y usa LLVM como back end. El
backend LLVM permite que LDC logre optimizar el código alcanzando rendimiento
similar a C/C++ e incluso superándolo en ocasiones.

Herramientas de desarrollo[editar]
D todavía no está soportado en muchos entornos de desarrollo, lo cual es un problema
esencial para muchos usuarios. Editores que pueden ser usados incluyen a Entice
Designer, emacs, vim, SciTE y Zeus entre otros. Vim soporta el resaltado de sintaxis y
completado de código (a través de ctags parcheados). Code::Blocks incluye soporte
parcial del lenguaje.
Hay dos plu-gins en desarrollo para Eclipse, Descent y Mmrnmhrm.
Adicionalmente, hay IDEs escritas en el propio D como Poseidon, que incluye completado
de código, resaltado de sintaxis y depurador.
Aplicaciones escritas en D pueden ser depuradas con cualquier depurador de C o C++,
como GDB o WinDbg, aunque soporte para varias características fundamentales de D es
limitado. Un depurador con soporte explícito para D es Ddbg para Windows. El depurador
comercial ZeroBUGS para Linux tiene soporte experimental para D. Ddbg puede ser
usado con varios IDEs o desde la línea de comandos, ZeroBUGS tiene su propia interfaz
gráfica.

Problemas y controversias[editar]
Sobrecarga de operadores[editar]
La sobrecarga de operadores en D a veces son menos poderosas que las de C++. Un
ejemplo es el opIndex, que sufre porque D no permite regresar referencias. Esto hace
operaciones como obj[i]++; imposibles. La solución parcial de D es el
operador opIndexAssign, que solo repara casos donde la expresión indexeada es solo un
valor L como obj[i] = 5 pero no los casos originales.
División en la biblioteca estándar[editar]
La biblioteca estándar en D es llamada Phobos. Algunos miembros de la comunidad
piensan que Phobos es demasiado simple y que posee numerosos problemas, por lo cual
un reemplazo llamado Tango fue escrito.9 Sin embargo, Tango y Phobos eran
incompatibles debido a varias diferencias (soporte de hilos, recolector de basura, etc). La
existencia de dos bibliotecas, ambas de uso elevado, llevó a problemas significativos
donde algunos paquetes usan Phobos y otros usan Tango. Este problema fue resuelto
con la versión 2.0 del lenguaje.
Soporte sin finalizar para bibliotecas compartidas/dinámicas[editar]
Bibliotecas compartidas ELF de Unix son soportadas hasta un punto usando el
compilador GDC. En Windows, DLLs son soportadas y permiten a objetos recolectados
por el recolector de basura de ser seguramente pasados a funciones de C, ya que el
recolector de basura revisa el stack por punteros. Sin embargo, todavía hay limitaciones
con DLLs en D incluyendo el hecho de que la información en tiempo de ejecución de
clases definidas en la DLL es incompatible con esas definidas en el ejecutable, y que
cualquier objeto creado desde la DLL debe ser finalizado antes de que la DLL sea
descargada.10

Referencias[editar]
1. ↑ «D Change Log to Nov 7 2005». D Programming Language 1.0. Digital Mars. Consultado
el 1 de diciembre de 2011.
2. ↑ «Change Log: 2.077.0 – D Programming Language». D Programming Language 2.0. D
Language Foundation. Consultado el 4 de noviembre de 2017.
3. ↑ «DMD 2.077.0 Released». Consultado el 4 de noviembre de 2017.
4. ↑ «Building assert() in Swift, Part 2: __FILE__ and __LINE__ - Swift Blog -». Apple
Developer. Consultado el 26 de septiembre de 2014. «Swift borrows a clever feature from
the D language: these identifiers expand to the location of the caller when evaluated in a
default argument list.»
5. ↑ «readme.txt». DMD source code. GitHub. Consultado el 5 de marzo de 2012.
6. ↑ FAQ de digitalmars
7. ↑ «Expressions». Digital Mars. Consultado el 27 de diciembre de 2012.
8. ↑ «core.memory - D Programming Language - Digital Mars». Archivado desde el original el
28 de agosto de 2011. Consultado el 2009.
9. ↑ Wiki4D: Standard Lib
10. ↑ «Wiki4D: BestPractices/DLL». Consultado el 2009.

 Andrei Alexandrescu, The D Programming Language, Addison-Wesley Professional;


1ª ed. (12 de junio de 2010)

Enlaces externos[editar]
 Digital Mars: D programming language
 DSource, una comunidad open source del lenguaje D
 Wiki4D, una wiki sobre el lenguaje D
 gdc, D front-end for GCC
 The Computer Language Benchmarks Game
 Tabla de las características de D
 Video de presentación de D por Walter Bright
 Ddbg - Depurador de D para Windows
 Computerworld Interview with Walter Bright on D Programming Language

También podría gustarte