D (lenguaje de programación)
El lenguaje de programación D es un lenguaje de programación de sistemas orientado a objetos, imperativo y multiparadigma. El lenguaje D se originó como una reingeniería de C++, y los objetivos de diseño de D intentan combinar el rendimiento de los lenguajes compilados con la seguridad y el poder expresivo de los lenguajes dinámicos modernos. El código D nativo suele ser tan rápido como el código C++ equivalente, a la vez que es más corto y seguro para la memoria.
Ejemplos
Ejemplo 1
Este programa de ejemplo imprime sus argumentos de línea de comandos. La función main
es el punto de entrada de un programa D, y args
es una matriz de cadenas que representan los argumentos de la línea de comandos. Una cadena
en D es una matriz de caracteres, representada por char[]
en D1, o immutable(char)[]
en D2.
La sentencia foreach
puede iterar sobre cualquier colección. En este caso, está produciendo una secuencia de índices (i
) y valores (arg)
del array args
. El índice i
y el valor arg
tienen sus tipos inferidos del tipo del array args
.
Ejemplo 2
A continuación se muestran varias capacidades de D y compensaciones de diseño de D en un programa muy corto. Recorre las líneas de un archivo de texto llamado palabras.txt
que contiene una palabra diferente en cada línea, e imprime todas las palabras que son anagramas de otras palabras.
signs2words
es una matriz asociativa incorporada que asigna claves dstring (32 bits / char) a matrices de dstrings. Es similar adefaultdict(list)
en Python.lines(File())
produce líneas de forma perezosa, con la nueva línea. Luego hay que copiarlo conidup
para obtener una cadena que se utilizará para los valores de la matriz asociativa (la propiedadidup
de las matrices devuelve un duplicado inmutable de la matriz, lo que es necesario ya que el tipodstring
es en realidadinmutable(dchar)[]
). Las matrices asociativas incorporadas requieren claves inmutables.- El operador
~=
añade una nueva cadena d a los valores de la matriz dinámica asociada. toLower
,join
ychomp
son funciones de cadena que D permite utilizar con una sintaxis de método. El nombre de estas funciones suele ser muy similar al de los métodos de cadena de Python. La funcióntoLower
convierte una cadena a minúsculas,join(" ")
une una matriz de cadenas en una sola cadena usando un solo espacio como separador, ychomp
elimina una nueva línea del final de la cadena si está presente.- La
ordenación
es una función de std.algorithm que ordena el array en su lugar, creando una firma única para las palabras que son anagramas entre sí. El métodorelease()
en el valor de retorno desort()
es útil para mantener el código como una sola expresión. - El segundo
foreach
itera sobre los valores del array asociativo, es capaz de inferir el tipo depalabras
. - se asigna a una variable inmutable, su tipo se infiere.
- Se utiliza UTF-32 dchar[] en lugar de UTF-8 char[] normal, de lo contrario
sort() se
niega a ordenarlo. Hay formas más eficientes de escribir este programa, que utilizan sólo UTF-8.