Está en la página 1de 14

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

Apareció en 1

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
D

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

Apareció en 1

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