Sono sempre esistiti diversi approcci nello sviluppo software: i paradigmi di pro­gram­ma­zio­ne de­ter­mi­na­no, ad esempio, il modo in cui i programmi vengono scritti e i codici di programma strut­tu­ra­ti. Uno degli approcci più popolari è la pro­gram­ma­zio­ne fun­zio­na­le, che a sua volta è una sotto-forma dell’approccio di­chia­ra­ti­vo in cui sono descritti solo i risultati e non i passaggi che conducono ad essi. Un rap­pre­sen­tan­te affermato di questa categoria è il lin­guag­gio di pro­gram­ma­zio­ne Haskell, che ha preso il nome dal ma­te­ma­ti­co sta­tu­ni­ten­se Haskell Brooks Curry.

Nel nostro articolo vi spie­ghe­re­mo cos’è esat­ta­men­te Haskell, in che modo questo lin­guag­gio dif­fe­ri­sce dagli altri linguaggi di pro­gram­ma­zio­ne e per quali progetti è più adatto.

Che cos’è Haskell?

Haskell è un lin­guag­gio di pro­gram­ma­zio­ne puramente fun­zio­na­le, la cui prima versione è stata pub­bli­ca­ta nel 1990 e che prende il nome dal ma­te­ma­ti­co Haskell Brooks Curry, il quale gettò le basi per i linguaggi di pro­gram­ma­zio­ne fun­zio­na­le con il suo lavoro sulla logica com­bi­na­to­ria (tra il 1920 e il 1960). Haskell si basa sul calcolo lambda (lin­guag­gio formale per l’analisi delle funzioni), motivo per cui la lettera greca lambda adorna anche il logo ufficiale del lin­guag­gio.

I programmi scritti in Haskell sono sempre rap­pre­sen­ta­ti come funzioni ma­te­ma­ti­che, per cui queste funzioni non hanno mai effetti col­la­te­ra­li o secondari. Con lo stesso input, ogni funzione uti­liz­za­ta fornisce sempre lo stesso risultato e non cambia mai lo stato di un programma. Il valore di un’espres­sio­ne o il risultato di una funzione dipende pertanto solo dai parametri di input correnti. Non ci sono co­stru­zio­ni lin­gui­sti­che im­pe­ra­ti­ve per pro­gram­ma­re una sequenza di istru­zio­ni in Haskell.

Dopo la sua pub­bli­ca­zio­ne, Haskell è diventato una sorta di standard per i linguaggi di pro­gram­ma­zio­ne fun­zio­na­le. In seguito sono stati svi­lup­pa­ti numerosi derivati del lin­guag­gio fun­zio­na­le, tra cui Parallel Haskell, Eager Haskell, Haskell++ o Eden, stret­ta­men­te correlati ad Haskell. Anche alcuni linguaggi di pro­gram­ma­zio­ne com­ple­ta­men­te nuovi si basano su Haskell. Tra questi troviamo, ad esempio, il lin­guag­gio uni­ver­sa­le Python, uno dei più im­por­tan­ti e moderni linguaggi di pro­gram­ma­zio­ne Internet, il quale ha adottato la notazione lambda e la sintassi dell’ela­bo­ra­zio­ne dell’elenco Haskell.

Che cosa si può fare con il lin­guag­gio di pro­gram­ma­zio­ne Haskell?

Per svi­lup­pa­re e mantenere grandi progetti software sono necessari molto lavoro, tempo e denaro. I linguaggi di pro­gram­ma­zio­ne fun­zio­na­le come Haskell possono fornire sollievo in merito. Haskell sa essere par­ti­co­lar­men­te con­vin­cen­te grazie ai seguenti vantaggi:

  • la pro­dut­ti­vi­tà degli svi­lup­pa­to­ri può essere no­te­vol­men­te aumentata
  • il codice del software Haskell è breve, chiaro e di facile ma­nu­ten­zio­ne
  • le ap­pli­ca­zio­ni Haskell sono meno soggette ad errori e offrono un’elevata af­fi­da­bi­li­tà
  • il divario “semantico” tra pro­gram­ma­to­re e lin­guag­gio è minimo

Haskell è quindi ideale come lin­guag­gio di pro­gram­ma­zio­ne per una vasta gamma di ap­pli­ca­zio­ni, ad esempio, si adatta par­ti­co­lar­men­te ai programmi che do­vreb­be­ro offrire un alto grado di mo­di­fi­ca­bi­li­tà e facilità di ma­nu­ten­zio­ne. I suoi punti di forza diventano evidenti anche quando si tratta di svi­lup­pa­re spe­ci­fi­che o prototipi che possono essere ef­fet­ti­va­men­te eseguiti e quindi testati e sot­to­po­sti a debug.

In par­ti­co­lar modo nei settori in cui è richiesta la mappatura esatta degli algoritmi ma­te­ma­ti­ci, la scelta del lin­guag­gio di pro­gram­ma­zio­ne ricade spesso su Haskell. Esempi tipici sono le ap­pli­ca­zio­ni per la sicurezza della rete, i framework di spe­ci­fi­che per sistemi integrati o i programmi per la mo­del­la­zio­ne di calcoli ma­te­ma­ti­ci complessi.

N.B.

Haskell non è una scelta adatta per la pro­gram­ma­zio­ne di programmi semplici.

In che modo Haskell dif­fe­ri­sce dagli altri linguaggi di pro­gram­ma­zio­ne?

Come lin­guag­gio di pro­gram­ma­zio­ne puramente fun­zio­na­le Haskell si distingue da molti altri linguaggi. Sono si­gni­fi­ca­ti­ve, in special modo, le dif­fe­ren­ze con i linguaggi che si basano sul paradigma della pro­gram­ma­zio­ne im­pe­ra­ti­va: i programmi scritti in linguaggi im­pe­ra­ti­vi eseguono sequenze di istru­zio­ni. Lo stato di queste istru­zio­ni può cambiare durante l’ese­cu­zio­ne, ad esempio cambiando le variabili. Le strutture del flusso di controllo ga­ran­ti­sco­no che le istru­zio­ni possano essere eseguite più volte.

Nell’approccio fun­zio­na­le su cui si basa Haskell, il software non fornisce istru­zio­ni dirette al computer su come fare qualcosa. Al contrario, viene descritto il problema o la sua soluzione. Le variabili non sono dinamiche: una variabile con il valore “1” ha un valore per­ma­nen­te di “1” in Haskell e in altri linguaggi fun­zio­na­li e non può essere sem­pli­ce­men­te mo­di­fi­ca­ta. Le funzioni servono solo allo scopo di calcolare ed emettere il risultato.

Scoprire Haskell: requisiti, sug­ge­ri­men­ti e un primo esempio

L’ap­pren­di­men­to di Haskell può ripagare per diversi motivi: da un lato, permette di pro­gram­ma­re le proprie soluzioni software in Haskell, a con­di­zio­ne che il lin­guag­gio sia adatto come base. Dall’altro lato, se ci si deve occupare di ap­pli­ca­zio­ni di terze parti scritte in Haskell si arriva preparati. Poiché Haskell è anche una specie di standard per i linguaggi di pro­gram­ma­zio­ne fun­zio­na­le, vale la pena imparare anche se si desidera svi­lup­pa­re un know-how generale nella pro­gram­ma­zio­ne fun­zio­na­le.

Come in molti altri linguaggi, sono di­spo­ni­bi­li due opzioni per l’ela­bo­ra­zio­ne del codice Haskell: in batch con un com­pi­la­to­re e in modo in­te­rat­ti­vo con un in­ter­pre­te. Un sistema in­te­rat­ti­vo ha il vantaggio di fornire una riga di comando adatta in cui è possibile spe­ri­men­ta­re e valutare di­ret­ta­men­te le espres­sio­ni. Per una semplice in­tro­du­zio­ne al lin­guag­gio di pro­gram­ma­zio­ne Haskell, è quindi pre­fe­ri­bi­le in ogni caso. Uno dei rap­pre­sen­tan­ti più noti del programma, è l’in­ter­pre­te Hugs che non è più at­ti­va­men­te svi­lup­pa­to. In al­ter­na­ti­va GHC (Glasgow Haskell Compiler) offre il pratico pacchetto completo, composto da un in­ter­pre­te e un com­pi­la­to­re Haskell.

Consiglio

Il nostro articolo “Com­pi­la­to­re vs in­ter­pre­te – Spie­ga­zio­ne e dif­fe­ren­za” mostra come dif­fe­ri­sco­no il modo di lavorare e di fun­zio­na­re di in­ter­pre­ti e com­pi­la­to­ri.

Il seguente codice snippet fornisce un semplice esempio di come funziona Haskell:

add :: Integer -> Integer -> Integer --function declaration
add x y = x + y --function definition
main = do 
 putStrLn "La somma dei due numeri è:"
 print(add 2 5) --calling a function

Nella riga 1 del codice viene di­chia­ra­ta la funzione Haskell, che dovrebbe avere integer (numeri interi) come valori di input e output. La funzione è spe­ci­fi­ca­ta­men­te definita nella riga 2: vengono aggiunti due argomenti, il risultato dell’aggiunta deve essere mostrato. I due valori “2” e “5” sono forniti come input. L’ese­cu­zio­ne di questo snippet porta al seguente output:

La somma dei due numeri è: 7
Consiglio

Potete trovare ulteriori sug­ge­ri­men­ti e trucchi per iniziare con la sintassi e la fun­zio­na­li­tà di Haskell nel nostro ampio tutorial Haskell.

Vai al menu prin­ci­pa­le