D (linguaggio di programmazione)

D è un linguaggio di programmazione orientato agli oggetti creato da Walter Bright nel 2001.

D è un linguaggio di programmazione orientato agli oggetti creato da Walter Bright nel 2001.

Considerato un'evoluzione dei linguaggi C e C++, si distingue per le seguenti caratteristiche: gestione più semplice delle classi e dei template rispetto al C++, un garbage collector come in Java, supporto a RTTI (Runtime type information), introduzione del tipo intero a 128 bit (non ancora utilizzabile), una gestione a moduli simile a quella di Python al posto dei file header, array associativi (oltre ai classici in stile puntatore, statici, dinamici) e molto altro. Inoltre permette la chiamata alle API di Windows, e la chiamata alle funzioni scritte in C (usando la parola chiave extern).

Al momento è possibile utilizzarlo per i sistemi Windows, Linux x86 e PPC, macOS, AIX e FreeBSD tramite un frontend del compilatore GCC chiamato GDC. Su Windows è spesso preferibile usare DMD.

Origine del nome e storia

Il D è un linguaggio di programmazione ideato dalla DigitalMars; il nome deriva dal fatto che si è originato da una re-ingegnerizzazione di C++, rendendolo un linguaggio che si Distingue. Il suo obiettivo è raggiungere la potenza e le alte prestazioni dei linguaggi di basso livello, ma con la grande produttività e semplice portabilità di linguaggi di alto livello come C#, Java, Perl, Python, Ruby e simili.

In particolare la sintassi e le caratteristiche tecniche del compilatore riprendono C/C++, C# e Java.

Caratteristiche del compilatore

Il compilatore D è strutturato in modo diverso rispetto ai linguaggi principali, ereditando punti di forza creando un linguaggio estremamente originale. Tra le più importanti caratteristiche, ricordiamo

Veloce nella compilazione, più di quello Java e C++

Utilizzo della garbage collector simile a .NET e Java (ma generalmente molto meno efficiente)

Si basa su una libreria nativa detta Phobos, ricca di funzioni (supporta socket, thread, zip, base64, funzioni linux, funzioni windows, md5), inoltre supporta la libreria C direttamente. Spesso oggi molti progetti utilizzano una libreria esterna detta Tango, creata e mantenuta dalla comunità degli utilizzatori di D.

Il compilatore riconosce l'HTML presente nel codice sorgente ignorandolo e permettendo comunque la compilazione (molto utile per documentare un programma, realizzando una forma di literate programming)

Nonostante le somiglianze con C# e Java non necessita di installare separatamente degli interpreti, tutto il necessario sta nel binario senza che assuma dimensioni spropositate.

Esiste un compilatore per Win32 e Linux su x86, ma su Sourceforge c'è un progetto detto GDC, che supporta anche altri OS

Il codice supporta i codici stile sh, quindi i file sorgenti possono cominciare su unix con #! /usr/bin/dmd -run per esempio

Nested Functions

Come in Pascal una funzione può contenere a sua volta le dichiarazioni di altre funzioni, rispettando comunque le regole generali dello scope per il loro uso. Un esempio:

La funzione più interna ha accesso a tutte quelle esterne, ma una funzione esterna non può accedere alle funzioni interne di una sua funzione interna. Anche l'ordine delle funzioni è fondamentale. Un altro esempio:

Si può notare come la reciproca chiamata di funzione non è possibile, in quanto nella compilazione di foo() la funzione bar non è stata ancora definita. La soluzione in D è usare i delegate (che sono differenti dai delegate del C#):

Un'altra caratteristica è che una funzione annidata può accedere ai campi di quella esterna, se la funzione è static anche il campo deve essere static.

Nella versione sperimentale 2.07, sono state introdotte delle vere closure nel linguaggio.

Function literals

Questo permette di creare un puntatore a funzione o un delegato direttamente in un'espressione, quindi invece di fare così:

si può fare così:

Questo vale anche per i delegate, quindi si può utilizzare questo codice:

Array ridimensionabili

Gli array sono implementati con nuove funzionalità rispetto a quelli in stile C e C++ (in C++ sono comunque disponibili funzionalità analoghe utilizzando i container della STL).

Tramite il campo length è possibile accedere alla dimensione di un array e ridimensionarlo, senza ricorrere all'allocazione dinamica come new, malloc e realloc.

Slicing

Permette di creare un nuovo riferimento ad un subarray. La sua sintassi è:

Array associativi

Detti anche mappe o dizionari in altri linguaggi, permettono di associare il valore di un elemento di un array ad un altro tipo di dato o oggetto, quindi potremo avere:

Strong typedefs

Consideriamo il seguente alias:

alias int myint;

È possibile dichiarare una funzione che accetta int come argomento e poi passargli un myint senza che il compilatore generi un errore: ossia il compilatore è in grado di risolvere i riferimenti alias in tipi di dato fondamentali.

Se invece si vuole che una funzione accetti solo e sempre un int, e che quindi i typedef debbano essere considerati come tipi di dati diversi, si può utilizzare, al posto di alias l'istruzione typedefs. Ad esempio:

typedef int myint;

Farà in modo che utilizzando myint in una funzione che accetta un int dia un errore di compilazione. È anche possibile creare dei typedef con valori visualizzati costanti:

typedef int myint = 9718;

myint i; //inizializzato a 9718

Mixin

Un mixin permette di ottenere un set di dichiarazioni da un template specificato e conservarle da un'altra parte.

Questo vale anche per le funzioni:

posso specificare il tipo del template

ed ecco un ultimo esempio:

Static If

Lo static if è stato progettato per sostituire le direttive preprocessore. Questa istruzione valuta un'espressione a tempo di compilazione, senza creare un nuovo scope. Un esempio:

Di conseguenza, esiste anche un'assert statico. In D esistono modi per eseguire semplici funzioni a tempo di compilazione, usando la normale sintassi, senza ricorrere a template come in C++.

Servizi correlati

Altre voci

Samsung GalaxyS

Samsung Galaxy

Samsung Galaxy è una serie di dispositivi di elaborazione mobili progettati, prodotti e commercializzati da Samsung Electronics.

Leggi la voce →
F

FOMO

La FOMO (fear of missing out - trad. it. paura di perdersi qualcosa) è un fenomeno psicologico descritto per la prima volta nel 2013. Si tratta di una sensazione di apprensione che nasce dal timore di perdere esperienze gratificanti vissute da altri, spesso amplificata dall'uso dei social media.…

Leggi la voce →
G

Google Classroom

Google Classroom è un servizio web gratuito sviluppato da Google, per le scuole e le università, mirante a semplificare la creazione e la distribuzione di materiale didattico, l'assegnazione e la valutazione di compiti online. Lo scopo principale di Google Classroom è quello di semplificare il…

Leggi la voce →
P

Paessler PRTG

PRTG (Paessler Router Traffic Grapher fino alla versione 7) è un software di monitoraggio di rete agentless di Paessler AG. Diverse versioni software sono raccolte sotto il termine ombrello Paessler PRTG. Può monitorare e classificare condizioni di sistema come utilizzo di banda o tempo di…

Leggi la voce →
N

Nokia 3310

Il Nokia 3310 (pron.: trentatré-dieci) è un telefono cellulare annunciato il 1º settembre 2000 e prodotto dalla Nokia a partire da ottobre dello stesso anno. Lanciato con lo slogan «Connecting People» (in italiano: Connettere le persone), il modello 3310 è stato uno dei cellulari di maggior…

Leggi la voce →
R

Ruby (linguaggio di programmazione)

Ruby è un linguaggio di programmazione interpretato open source completamente a oggetti. Nato nel 1995 come progetto personale del giapponese Yukihiro Matsumoto (spesso chiamato semplicemente Matz), prende spunto da altri linguaggi come Perl, SmallTalk, Eiffel, Ada e Lisp con lo scopo di…

Leggi la voce →