Introducción al lenguaje D

Programación

D es un lenguaje relativamente nuevo. De hecho, podríamos decir que es joven y, en algunos aspectos, quizá hasta algo inmaduro. Sin embargo, D proviene de una larga experiencia heredada programando. D pretende ofrecer determinadas construcciones de alto nivel de lenguajes como Java, Python u otros, pero sin dejar de ofrecer acceso "al metal" como C o C++ y compilando a código nativo. A la vez, pretende eliminar lo que sus autores consideran los errores o limitaciones de diseño que arrastra C++ por su herencia. Es, sin duda, un lenguaje que intenta establecerse como un sucesor de C y C++ en la mayoría de sus campos, e incluso ser alternativa de Java y C# en determinados escenarios

Ideas básicas

D pretende ofrecer determinadas construcciones de alto nivel de lenguajes como Java, Python u otros, pero sin dejar de ofrecer acceso "al metal" como C o C++ y compilando a código nativo. A la vez, pretende eliminar lo que sus autores consideran los errores o limitaciones de diseño que arrastra C++ por su herencia. Es, sin duda, un lenguaje que intenta establecerse como un sucesor de C y C++ en la mayoría de sus campos, e incluso ser alternativa de Java y C# en determinados escenarios.

El lenguaje en sí tiene, ahora mismo, dos ramas definidas. La rama estable es D1, la primera especificación del lenguaje que apenas cuenta con una estabilidad de unos dos años. Por otro lado D2 añade una lista de mejoras que incluyen, por ejemplo, soporte completo de closures, invariantes y algunas más que tienden a hacer el lenguaje más abierto a un estilo más funcional. La pega es que esta versión 2 aún no es estable; la especificación está aún en desarrollo.

Como idea general D se plantea ofrecer:

Un lenguaje de más alto nivel que C++, eliminando donde sea necesario parte de la complejidad de este, pero manteniendo sin embargo, la posibilidad de acceder directamente al S.O o incluso al hardware. D es compilado, no se interpreta ni ejecuta dentro de una máquina virtual.

Un lenguaje práctico. Tomando lo necesario de lenguajes existentes, pero moldeándolos desde la experiencia adquirida por sus autores. Esto lleva a que el propio lenguaje implementa bastantes características que en otras plataformas se añaden a través de librerías adicionales o que tenemos que escribir nosotros mismos. Como ejemplo, D soporta en el propio lenguaje la definición de tests, la programación por contrato o la ejecución de funciones en tiempo de compilación (en lugar de recurrir a preprocesadores o macros).

Un lenguaje fácil de aprender. Al menos para aquellos que vengan con una experiencia en lenguajes de la familia de C. No se mantiene compatibilidad con C, pero la sintaxis hace de D, sin duda, un lenguaje de esta familia.

D descarta algunas de las características de C++ que considera innecesarias o que perjudican la practicidad del lenguaje. Así D no tiene herencia múltiple sino que propone, al estilo de Java, el uso de interfaces. D también abandona el uso de namespaces, del preprocesador y los namespaces.

También abandona el uso de declaraciones y ficheros de cabeceras. En su lugar D utiliza un sistema de importación al estilo del de Java, pero algo más sofisticado. Igualmente, aunque D soporta el uso de punteros, también ofrece otro tipo de valor llamado referencia y implementa recolección de basura en lugar de dejar al programador la responsabilidad de asignar y liberar memoria (en la mayoría de casos).

Conserva, por otra parte, otros aspectos como los templates o la sobrecarga de operadores.

En general, D es un lenguaje más explícito. Nos obliga a declarar de manera patente y sin lugar a equívocos muchos de los comportamientos que en C++ eran tratados más de una vez como magia. Así se hace necesario, por ejemplo, declarar explícitamente que queremos acceder a métodos de una clase padre que hemos sobrecargado en la clase hija. A cambio, él es capaz de identificar tipos o nos permite tratar accesores (vulgarmente getters y setters) como las mismas propiedades que representan asignando o leyendo el valor, en lugar de utilizarlos como funciones.

Estado, soporte, comunidad, librerías... Como decía al principio, D es un lenguaje joven aún. Su desarrollo está fuertemente ligado a Digital Mars, la empresa que lo creó. Aunque existe también un compilador GNU, GDC (en realidad un frontend para GCC), este se encuentra normalmente por detrás del que proporciona Digital Mars, el DMD.

Además de esto, existe el tema de las dos versiones. D2 aporta algunas soluciones interesantes, pero actualmente se encuentra en estado experimental y no se recomienda su uso en producción. Es más, D2 es en gran medida irrelevante mientras las librerías existentes no decidan soportarlo oficialmente. Y este caso aún no se da.

En cuanto a librerías, de nuevo nos encontramos con una peculiar dicotomía. Por un lado está la librería estándar "oficial", Phobos, ofrecida por Digital Mars, pero que tradicionalmente no ha sido del agrado de la comunidad, principalmente por problemas en las contribuciones. Así que existe también Tango la otra librería estándar, pero "no oficial". Tango es claramente la opción más recomendable, aportando más funcionalidad que Phobos (lo cual es natural dado que Phobos es desarrollada por una única persona, Tango por la comunidad), pero no es compatible -aún- con D2, haciendo que no pueda pretender convertirse en la librería estándar.

Existen además una buena colección de librerías y, sobretodo, de enlaces con librerías existentes en C y/o C++.

La comunidad alrededor de D es pequeña y -en mi modesta opinión- no es fácil encontrar la información que buscas rápidamente. Existen principalmente 2 sitios donde se reúne la mayor parte de la información: el Wiki4D y dsource. En el primero podemos encontrar sobretodo bastantes enlaces útiles como los de los tutoriales o listas de herramientas, editores y demás, que siempre son una buena ayuda al empezar. dsource por su parte ofrece unos foros, no siempre demasiado activos, y sobretodo una larga lista de proyectos en diversos estados de desarrollo. También dsource tiene una buena colección de tutoriales y es interesante seguir PlanetD, un resumen de diversos blogs sobre D que existen.

Otra fuente interesante es D Programming con algunos proyectos y tutoriales más. Y por supuesto está el propio sitio de Digital Mars, que mantiene también foros, grupos de noticias, algunas listas de enlaces imprescindibles y la documentación oficial con una buena colección de artículos interesantes.

En general, la sensación que da la comunidad alrededor de D es de ser pequeña y de no tener una gran actividad. Ojo, tiene actividad, pero dista bastante de las que existen alrededor de otros lenguajes. Sin embargo, tras cierto esfuerzo, es posible encontrar toda la información necesaria.

Fuera de la red, existen un par de libros sobre D, pero salvo que sepáis alemán o japonés, el único que os queda es Learn to Tango with D (APress), un libro sencillo pero bastante completo.

Más Información: DebugModeon

Tema Relacionado: Programación