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 comunes .d

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 meses y 17

estable 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

1.1Orientada a objetos

1.2Metaprogramación

1.3Funciones

1.4Manejo de memoria

1.5Interacción con otros sistemas

2Ejemplos

2.1Ejemplo 1

3Implementación

4Herramientas de desarrollo

5Problemas y controversias

5.1Sobrecarga de operadores

5.2División en la biblioteca estándar

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;

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]

↑ «D Change Log to Nov 7 2005». D Programming Language 1.0. Digital Mars. Consultado el 1 de diciembre de 2011.

↑ «Change Log: 2.077.0 – D Programming Language». D Programming Language 2.0. D Language Foundation. Consultado el 4 de noviembre de

2017.

↑ «DMD 2.077.0 Released». Consultado el 4 de noviembre de 2017.

↑ «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.»
↑ «readme.txt». DMD source code. Github. Consultado el 5 de marzo de 2012.

↑ FAQ de digitalmars

↑ «Expressions». Digital Mars. Consultado el 27 de diciembre de 2012.

↑ «core.memory - D Programming Language - Digital Mars». Archivado desde el original el 28 de agosto de 2011. Consultado el 2009.

↑ Wiki4D: Standard Lib

↑ «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 comunes .d

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 meses y 17

estable 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
1.1Orientada a objetos

1.2Metaprogramación

1.3Funciones

1.4Manejo de memoria

1.5Interacción con otros sistemas

2Ejemplos

2.1Ejemplo 1

3Implementación

4Herramientas de desarrollo

5Problemas y controversias

5.1Sobrecarga de operadores

5.2División en la biblioteca estándar

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;

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]

↑ «D Change Log to Nov 7 2005». D Programming Language 1.0. Digital Mars. Consultado el 1 de diciembre de 2011.

↑ «Change Log: 2.077.0 – D Programming Language». D Programming Language 2.0. D Language Foundation. Consultado el 4 de noviembre de

2017.

↑ «DMD 2.077.0 Released». Consultado el 4 de noviembre de 2017.

↑ «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.»

↑ «readme.txt». DMD source code. Github. Consultado el 5 de marzo de 2012.

↑ FAQ de digitalmars

↑ «Expressions». Digital Mars. Consultado el 27 de diciembre de 2012.

↑ «core.memory - D Programming Language - Digital Mars». Archivado desde el original el 28 de agosto de 2011. Consultado el 2009.

↑ Wiki4D: Standard Lib

↑ «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