fbpx
Wikipedia

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

D
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 1999
Diseñado por Walter Bright, Andrei Alexandrescu (desde 2006)
Última versión estable 2.096.0[1](11 de marzo de 2021 (4 meses y 23 días)[2]​)
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, Swift[3]
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),[4]
Completamente open-source (LDC u GDC)[5]

Características

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

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:[6]

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.[7]​ 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.

import std.stdio: writefln;  void main(string[] args) {  efln("args[%d] = '%s'", i, arg); } 

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

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.[8]​ 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.[9]

Referencias

  1. «Change Log: 2.096.0 – D Programming Language». D Programming Language 2.0. D Language Foundation. Consultado el 6 de abril de 2021. 
  2. «D 2.096.0 Released and Other News». Consultado el 6 de abril de 2021. 
  3. «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.» 
  4. «readme.txt». DMD source code. GitHub. Consultado el 5 de marzo de 2012. 
  5. FAQ de digitalmars
  6. «Expressions». Digital Mars. Consultado el 27 de diciembre de 2012. 
  7. . Archivado desde el original el 28 de agosto de 2011. Consultado el 2009. 
  8. Wiki4D: Standard Lib
  9. «Wiki4D: 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
  • DSource, una comunidad open source del lenguaje D
  • Wiki4D, una wiki sobre el lenguaje D
  • Uso incorrecto de la plantilla enlace roto (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última)., D front-end for GCC
  • Tabla de las características de D
  •   Datos: Q319268

lenguaje, programación, lenguaje, programación, propósito, general, desarrollado, walter, bright, cuya, primera, versión, apareció, 1999, origina, como, rediseño, enfoque, más, pragmático, pero, lenguaje, puramente, derivado, anterior, mantenido, algunas, cara. D es un lenguaje de programacion de proposito general desarrollado por Walter Bright cuya primera version aparecio en 1999 Se origina como un rediseno de C con un enfoque mas pragmatico pero no es un lenguaje puramente derivado del anterior D ha mantenido algunas caracteristicas de C y tambien esta influido por otros conceptos de otros lenguajes como Java C y Eiffel Una version estable fue lanzada el 2 de enero de 2007 DDesarrollador es Digital Mars Andrei Alexandrescu desde 2006 https dlang orgInformacion generalExtensiones comunes dParadigmamultiparadigma orientado a objetos imperativo funcional metaAparecio en1999Disenado porWalter Bright Andrei Alexandrescu desde 2006 Ultima version estable2 096 0 1 11 de marzo de 2021 4 meses y 23 dias 2 Sistema de tiposFuerte EstaticoImplementacionesDMD GDC LDCInfluido porC C C Java Eiffel Python RubyHa influido aMiniD DScript Vala Qore Swift 3 Sistema operativoDMD Unix like FreeBSD Linux etc Windows OS XLicenciaGPL Artistic DMD frontend Boost librerias estandar y de tiempo de ejecucion codigo disponible DMD backend 4 Completamente open source LDC u GDC 5 editar datos en Wikidata Indice 1 Caracteristicas 1 1 Orientada a objetos 1 2 Metaprogramacion 1 3 Funciones 1 4 Manejo de memoria 1 5 Interaccion con otros sistemas 2 Ejemplos 2 1 Ejemplo 1 3 Implementacion 4 Herramientas de desarrollo 5 Problemas y controversias 5 1 Sobrecarga de operadores 5 2 Division en la biblioteca estandar 5 3 Soporte sin finalizar para bibliotecas compartidas dinamicas 6 Referencias 7 Enlaces externosCaracteristicas EditarD esta siendo disenado con lecciones aprendidas del uso de C en vez de ser disenado desde una perspectiva teorica Aunque usa muchos de los conceptos de C C tambien descarta algunos y por lo tanto no es compatible con codigo escrito en C o C D retiene la habilidad de C de hacer codigo de bajo nivel permitiendo incluir codigo en ensamblador La herencia multiple de C es reemplazada por herencia simple e interfaces y mixins La sintaxis de declaracion 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 codigo especifico de la maquina con codigo D una tecnica comunmente usada por programadores de software de sistema para acceder a caracteristicas de bajo nivel necesarias para interactuar directamente con el hardware permitiendo escribir software como sistemas operativos y drivers D incluye soporte para comentarios de documentacion pero hasta ahora solo el compilador entregado por Digital Mars implementa un generador de documentacion Orientada a objetos Editar La programacion orientada a objetos esta basada en herencia simple con todas las clases derivadas de la clase Object D no soporta herencia multiple en vez de eso usa interfaces parecidas a las de Java que son comparables a las clases abstractas de C Metaprogramacion Editar La Metaprogramacion esta soportada por una combinacion de plantillas la ejecucion de funciones en tiempo de compilacion tuplas y mixins de cadenas Soporta CTFE evaluacion de funciones en tiempo de compilacion Los siguientes ejemplos demuestran algunas de las caracteristicas en tiempo de ejecucion del lenguaje D Las plantillas en D se pueden escribir en mas de un estilo imperativo comparado con el estilo funcional de las plantillas de C El siguiente ejemplo es una funcion regular que calcula el producto factorial de un numero ulong factorial ulong n ulong Producto 1 for ulong i 2 i lt n i Producto i return Producto Aqui se muestra el uso de la palabra reservada static for la construccion iterativa en tiempo de ejecucion en D para construir una plantilla que es capaz de realizar el mismo calculo template Factorial ulong n ulong Producto 1 static for i 2 i lt n i Producto i return Producto En los siguientes dos ejemplos la plantilla y la funcion definidas arriba se utilizan para calcular factoriales No es necesario especificar explicitamente los tipos de las constantes cuando el compilador infiere sus tipos desde el lado derecho de las asignaciones enum fact 7 Factorial 7 Este es un ejemplo de una funcion en tiempo de ejecucion Las funciones ordinarias pueden usar constantes aunque expresiones en tiempo de ejecucion deben reunir ciertos criterios enum fact 9 factorial 9 La funcion std string format del estilo printf sirve para dar formato a los datos tambien en tiempo de ejecucion a traves de CTFE ejecucion de funcion en tiempo de ejecucion y el pragma msg directiva que muestra el resultado en tiempo de ejecucion 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 codigo D usando operaciones expresadas en cadenas de caracteres en tiempo de ejecucion Puede ser utilizado para analisis sintactico de un lenguaje especifico del dominio hacia codigo D el cual se compila como parte del programa import FooToD Modulo hipotetico que contiene una funcion que analiza el codigo fuente Foo y devuelve el codigo D equivalente void main mixin fooToD import example foo Funciones Editar D soporta caracteristicas de programacion funcional tal como funciones anonimas clausuras objetos recursivamente immutables y el uso de funciones de orden superior Hay dos sintaxis para funciones anonimas incluyendo una forma de declaracion multiple y una notacion abreviada de expresiones simples 6 int function int g g x return x x forma larga g x gt x x forma abreviada Manejo de memoria Editar La memoria es usualmente manejada por un recolector de basura pero objetos especificos pueden ser finalizados inmediatamente cuando salen del ambito Es posible el manejo de memoria explicito usando los operadores sobrecargados new y delete y simplemente llamando las funciones malloc y free de C directamente La recoleccion 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 recoleccion completa 7 El manual da muchos ejemplos de como implementar diferentes esquemas de manejo de memoria altamente optimizados para cuando la recoleccion de basura es inadecuada para el programa Interaccion 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 codigo existente escrito en C y bibliotecas La biblioteca estandar de C es parte del D estandar A menos que se usen namespaces muy explicitos puede ser de alguna forma dificil de acceder como se puede observar en modulos escritos en D que hagan uso de dicha caracteristica Pero la biblioteca estandar de D es usualmente suficiente Ejemplos EditarEjemplo 1 Editar Este programa imprime sus argumentos de la linea de comandos La funcion 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 linea de comandos En D string es un arreglo de caracteres que se representa con char en D1 o immutable char en D2 import std stdio writefln void main string args efln args d s i arg La palabra reservada foreach puede iterar cualquier coleccion En este caso produce una sucesion de indices i y valores arg desde el arreglo args El indice i y el valor arg tiene sus tipos inferidos desde del tipo del arreglo args Implementacion EditarLas implementaciones actuales de D compilan el codigo directamente a codigo maquina para lograr una ejecucion eficiente Cambios al lenguaje no se hacen regularmente desde la version 1 0 El diseno esta 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 esta 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 codigo es abierto GDC Un front end para el back end GCC construido usando las fuentes del compilador DMD Snapshots soportan la version 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 codigo alcanzando rendimiento similar a C C e incluso superandolo en ocasiones Herramientas de desarrollo EditarD todavia no esta 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 codigo a traves 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 codigo 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 caracteristicas fundamentales de D es limitado Un depurador con soporte explicito 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 linea de comandos ZeroBUGS tiene su propia interfaz grafica Problemas y controversias EditarSobrecarga 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 solucion parcial de D es el operador opIndexAssign que solo repara casos donde la expresion indexeada es solo un valor L como obj i 5 pero no los casos originales Division en la biblioteca estandar Editar La biblioteca estandar 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 8 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 llevo a problemas significativos donde algunos paquetes usan Phobos y otros usan Tango Este problema fue resuelto con la version 2 0 del lenguaje Soporte sin finalizar para bibliotecas compartidas dinamicas 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 todavia hay limitaciones con DLLs en D incluyendo el hecho de que la informacion en tiempo de ejecucion 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 9 Referencias Editar Change Log 2 096 0 D Programming Language D Programming Language 2 0 D Language Foundation Consultado el 6 de abril de 2021 D 2 096 0 Released and Other News Consultado el 6 de abril de 2021 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 EditarDigital Mars D programming language DSource una comunidad open source del lenguaje D Wiki4D una wiki sobre el lenguaje D Uso incorrecto de la plantilla enlace roto enlace roto disponible en Internet Archive vease el historial la primera version y la ultima D front end for GCC The Computer Language Benchmarks Game Tabla de las caracteristicas de D Video de presentacion de D por Walter Bright Ddbg Depurador de D para Windows Computerworld Interview with Walter Bright on D Programming Language Datos Q319268Obtenido de https es wikipedia org w index php title D lenguaje de programacion amp oldid 134849722, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos