Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 6

D (lenguaje de programación)

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
D
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
Características Desarrollador(es)
Orientada a objetos Digital Mars, Andrei Alexandrescu (desde
Metaprogramación 2006)
Funciones https://dlang.org
Manejo de memoria Información general
Interacción con otros sistemas Extensiones .d

Ejemplos comunes
Ejemplo 1 Paradigma multiparadigma: orientado a
objetos, imperativo,
Implementación
funcional, meta
Herramientas de desarrollo 1
Apareció en
Problemas y controversias Diseñado por Walter Bright, Andrei
Sobrecarga de operadores Alexandrescu (desde 2006)
División en la biblioteca estándar
Última versión 2.077.02 (01 de noviembre de
Soporte sin finalizar para bibliotecas estable 2017 (2 años, 4 meses y 30
compartidas/dinámicas
días)3 )
Referencias
Sistema de tipos Fuerte, Estático
Enlaces externos Implementaciones DMD, GDC (http://dgcc.sourc
eforge.net/), LDC (http://www.
dsource.org/projects/ldc)
Características Influido por C++, C, C#, Java, Eiffel,
Python, Ruby
D está siendo diseñado con lecciones aprendidas del
uso de C++ en vez de ser diseñado desde una Ha influido a MiniD, DScript, Vala, Qore,
perspectiva teórica. Aunque usa muchos de los Swift4
conceptos de C/C++ también descarta algunos, y por Sistema operativo DMD: Unix-like (FreeBSD,
lo tanto no es compatible con código escrito en C o Linux etc) , Windows, OS X
C++. D retiene la habilidad de C++ de hacer código de Licencia GPL/Artistic (DMD frontend),
bajo nivel, permitiendo incluir código en ensamblador. Boost (librerías estándar y de
La herencia múltiple de C++ es reemplazada por
tiempo de ejecución),
herencia simple e interfaces y 'mixins'. La sintaxis de código disponible (DMD
declaración y la sintaxis para las expresiones se backend),5
parecen a las de C++. Completamente open-source
(LDC u GDC)6
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

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

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 for (la construcción iterativa 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

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

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


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

Ejemplo 1

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
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
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 (http://dsource.org/projects/descent) y Mmrnmhrm.

Adicionalmente, hay IDEs escritas en el propio D como Poseidon (http://dsource.org/projects/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

Sobrecarga de operadores

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

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

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
1. «D Change Log to Nov 7 2005» (http://www.digitalmars.com/d/1.0/changelog1.html). D
Programming Language 1.0. Digital Mars. Consultado el 1 de diciembre de 2011.
2. «Change Log: 2.077.0 – D Programming Language» (http://dlang.org/changelog/2.077.0.html).
D Programming Language 2.0. D Language Foundation. Consultado el 4 de noviembre de
2017.
3. «DMD 2.077.0 Released» (https://dlang.org/blog/2017/11/03/dmd-2-077-0-released/).
Consultado el 4 de noviembre de 2017.
4. «Building assert() in Swift, Part 2: __FILE__ and __LINE__ - Swift Blog -» (https://developer.ap
ple.com/swift/blog/?id=15). 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» (https://github.com/D-Programming-Language/dmd/blob/master/src/readme.txt).
DMD source code. GitHub. Consultado el 5 de marzo de 2012.
6. FAQ de digitalmars (http://dlang.org/faq.html)
7. «Expressions» (http://dlang.org/expression.html#Lambda). Digital Mars. Consultado el 27 de
diciembre de 2012.
8. «core.memory - D Programming Language - Digital Mars» (https://web.archive.org/web/20110
828191538/http://digitalmars.com/d/2.0/phobos/std_gc.html). Archivado desde el original (htt
p://www.digitalmars.com/d/2.0/phobos/std_gc.html) el 28 de agosto de 2011. Consultado el
2009.
9. Wiki4D: Standard Lib (http://www.prowiki.org/wiki4d/wiki.cgi?StandardLib)
10. «Wiki4D: BestPractices/DLL» (http://www.prowiki.org/wiki4d/wiki.cgi?BestPractices/DLL).
Consultado el 2009.

Andrei Alexandrescu, The D Programming Language, Addison-Wesley Professional; 1ª ed. (12


de junio de 2010)

Enlaces externos
Digital Mars: D programming language (http://www.digitalmars.com/d/)
DSource, una comunidad open source del lenguaje D (http://www.dsource.org)
Wiki4D, una wiki sobre el lenguaje D (http://www.prowiki.org/wiki4d/wiki.cgi?FrontPage)
gdc (https://bitbucket.org/goshawk/gdc/wiki/Home), D front-end for GCC
The Computer Language Benchmarks Game (https://web.archive.org/web/20090714081452/ht
tp://shootout.alioth.debian.org/debian/benchmark.php?test=all&lang=all)
Tabla de las características de D (http://www.digitalmars.com/d/comparison.html)
Video de presentación de D por Walter Bright (https://web.archive.org/web/20071031071446/h
ttp://video.google.com/videoplay?docid=-7073020265668105471)
Ddbg - Depurador de D para Windows (https://web.archive.org/web/20070224161328/http://dd
bg.mainia.de/)
Computerworld Interview with Walter Bright on D Programming Language (https://web.archive.
org/web/20081222013441/http://www.computerworld.com.au/index.php/id%3B1744247671%3
Bfp%3B4194304%3Bfpid%3B1)

Obtenido de «https://es.wikipedia.org/w/index.php?title=D_(lenguaje_de_programación)&oldid=124186248»

Esta página se editó por última vez el 11 mar 2020 a las 17:18.

El texto está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0; pueden aplicarse cláusulas
adicionales. Al usar este sitio, usted acepta nuestros términos de uso y nuestra política de privacidad.
Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una organización sin ánimo de lucro.

También podría gustarte