Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lide SSD
Lide SSD
Ir a la navegaciónIr a la búsqueda
Desarrollador(es)
Información general
Extensiones .d
comunes
Apareció en 1
Í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;
}
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:
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:
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:
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.
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.
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.
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.
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)
Información general
Extensiones .d
comunes
Apareció en 1
Í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;
}
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:
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:
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:
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.
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.
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.
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.
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