Haskell (linguaggio di programmazione): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Eliminato il parametro "sito_web" nel template "Linguaggio di programmazione" |
→Caratteristiche: riscrivo da enwiki Etichette: Modifica visuale Link a pagina di disambiguazione |
||
Riga 46:
== Caratteristiche ==
Tra le sue funzionalità Haskell presenta la [[valutazione pigra]], le [[Funzione anonima|espressioni lambda]], ''[[pattern matching]]'', [[comprensione di lista]], classi di tipi, e [[Polimorfismo (informatica)|polimorfismo]]. È un linguaggio puramente funzionale, il che significa che le funzioni sono in genere pure, ovvero senza [[Effetto collaterale (informatica)|effetti collaterali]]. Esiste un costrutto diverso apposta per rappresentare gli effetti collaterali, ed è ortogonale alle funzioni. Una funzione pura può restituire un effetto collaterale che è successivamente eseguito, imitando così le funzioni impure degli altri linguaggi.
Haskell ha un sistema di tipi forte e statico, basato sull'inferenza di Hindley-Milner. La principale innovazione portata in questo campo sono le classi di tipi, concepite in origine come maniera di principio per introdurre il [[Overloading|sovraccarico]],<ref name="wadler89">{{cite book|last1=Wadler|first1=P.|first2=S. |last2=Blott|title=Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages - POPL '89 |chapter=How to make ad-hoc polymorphism less ad hoc |year=1989|publisher=[[Association for Computing Machinery|ACM]]|pages=60–76|doi=10.1145/75277.75283|isbn=978-0-89791-294-5|s2cid=15327197|doi-access=free}}</ref> ma nel seguito usate in molti altri ambiti.<ref name="hallgren01">{{cite journal|last=Hallgren|first=T.|date=January 2001|title=Fun with Functional Dependencies, or Types as Values in Static Computations in Haskell|journal=Proceedings of the Joint CS/CE Winter Meeting|___location=Varberg, Sweden|url=http://www.cs.chalmers.se/~hallgren/Papers/wm01.html}}</ref>
Il costrutto che rappresenta gli effetti collaterali è un esempio di [[Monade (informatica)|monade]]: un quadro generale che può modellizzare vari calcoli come la gestione degli errori, il [[Algoritmo nondeterministico|nondeterminismo]], l'[[Parsing|analisi sintattica]] e la memoria transazionale. Sono definite come tipi di dato ordinari, ma Haskell fornisce un po' di zucchero sintattico per facilitarne l'uso.
Haskell ha una specifica aperta e pubblica e ne esistono numerose implementazioni. La principale, il [[Glasgow Haskell Compiler]] (GHC), è sia un [[Interprete (informatica)|interprete]] sia un [[compilatore]] di [[codice nativo]] e gira su molte piattaforme. GHC è noto per il suo ricco sistema di tipi che incorpora innovazioni recenti come i tipi di dati algebrici generalizzati e le famiglie di tipi. Il Computer Language Benchmarks Game ne evidenzia anche l'implementazione ad alte prestazioni della concorrenza e del parallelismo.<ref name="shootout">[https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/haskell.html Computer Language Benchmarks Game]</ref>
Intorno al linguaggio esiste una comunità attiva e in crescita e più di 5.400 librerie e strumenti liberi di terze parti sono disponibili in rete nell'archivio di pacchetti Hackage.<ref name="hackage-stats">{{cite web|url=http://hackage.haskell.org/cgi-bin/hackage-scripts/stats|archive-url=https://web.archive.org/web/20130503114836/http://hackage.haskell.org/cgi-bin/hackage-scripts/stats|archive-date=3 May 2013|title=HackageDB statistics|publisher=Hackage.haskell.org|access-date=26 June 2013}}</ref>
== Codice di esempio ==
|