Haskell (linguaggio di programmazione): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
→Caratteristiche: riscrivo da enwiki Etichette: Modifica visuale Link a pagina di disambiguazione |
m sistemazione fonti e fix vari |
||
Riga 9:
|estensione = .hs, .lhs
|influenzato_da = Clean, FP, Gofer, Hope e Hope+, Id, ISWIM, KRC, [[Lisp]], Miranda, ML e Standard ML, Orwell, SASL, SISAL, [[Scheme]]
|ha_influenzato = Agda, Bluespec, [[C++11]]/Concepts, [[C sharp|C#]]/[[LINQ]], CAL, Cayenne, Clean, [[Clojure]], CoffeeScript, Curry, [[D (linguaggio)|D]], Elm, Epigram, Escher, [[F Sharp|F#]], Isabelle, [[Java (linguaggio di programmazione)|Java]]/[[Generics Java|Generics]], Kaya, [[Mercury (linguaggio)|Mercury]], Omega, [[Perl 6]], [[Python]], Qi, [[Scala (linguaggio di programmazione)|Scala]], Timber, [[Visual Basic|Visual Basic 9.0]], [[Rust (linguaggio di programmazione)
|sistema_operativo = [[Multipiattaforma]]
}}
Riga 16:
== Storia ==
=== L'inizio della programmazione funzionale ===
{{Per approfondire|Programmazione funzionale}}Tutto iniziò nel [[1978]] con il discorso di John Backus intitolato ''"Can Programming be liberated from the Von Neumann style?"''<ref>
Tra gli anni [[Anni 1970|settanta]] ed [[Anni 1980|ottanta]] del [[XX secolo]], vennero implementati diversi linguaggi funzionali, seppur ancora strettamente legati ai linguaggi imperativi, che si basavano più sul concetto computazionale del [[lambda calcolo]]. Alcuni esempi possono essere [[Scheme]], e i vari dialetti [[ML (linguaggio di programmazione)|ML]] di questo periodo.
Riga 33:
* Basato su idee con ampio consenso;
* Ridurre la diversità nei linguaggi funzionali.
Dopo due anni, cioè il 1º aprile [[1990]], venne pubblicata la prima versione del linguaggio che verrà chiamata Haskell 1.0 in onore a [[Haskell Curry]], e l'inizio della pubblicazione inizia proprio con una citazione del famoso matematico statunitense<ref>
=== Haskell 98 ===
Riga 41:
=== Haskell 2010 ===
Nel [[2006]] fu creato il comitato '''Haskell Prime''' ('''Haskell'''')<ref>{{Cita web|url = https://prime.haskell.org/|titolo = Haskell Prime|accesso = 31 gennaio 2016|sito = prime.haskell.org|urlarchivio = https://web.archive.org/web/20160220103915/https://prime.haskell.org/
Nel [[2009]] è stata annunciata una nuova versione di Haskell chiamata Haskell 2010<ref>{{Cita web|nome = Simon|cognome = Marlow|url = https://mail.haskell.org/pipermail/haskell/2009-November/021750.html|titolo = [Haskell] Announcing Haskell 2010|accesso = 30 gennaio 2016|data = 24 novembre 2009}}</ref>. Le modifiche principali apportate furono la rimozione dell'''n+k pattern'' e l'implementazione di numerose espressioni semplificate o anche chiamate [[zucchero sintattico]] (''syntactic sugar''), come la notazione ''do'', le ''guards'', l'espressione ''if then else''.
Riga 49:
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">{{
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">
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">{{
== Codice di esempio ==
Riga 135:
== Implementazioni ==
* '''''[[Glasgow Haskell Compiler]]''''' (
* [[Utrecht Haskell Compiler]] ('''UHC'''), sviluppato dall'[[Università di Utrecht]].
=== Implementazioni obsolete ===
Segue un elenco di implementazioni diventate ormai obsolete:
* '''''[[Hugs]]''''' (
* '''''nhc98''''' (
* '''''yhc''''' (
* '''''jhc''''' (
== Applicazioni ==
Riga 161:
Tra le librerie per lo sviluppo lato server troviamo:
* wai: Haskell Web Application Interface, un insieme di interfacce per lo sviluppo di applicazioni web;<ref>
* warp: un web server veloce e leggero per applicazioni che implementano le interfacce di wai;<ref>
* scotty: un framework web ispirato da Sinatra, pensato per essere semplice;<ref>
* spock: più leggero dei framework detti enterprise, ma avente più funzionalità di scotty;<ref>
* yesod: un framework enterprise per lo sviluppo di applicazioni web;<ref>
* snap: un altro framework enterprise;<ref>
* happstack-server: un altro framework enterprise;<ref>
* servant: una libreria che usa i tipi per definire le interfacce REST.<ref>
Librerie grafiche e lo sviluppo di videogiochi:
Riga 181:
== Bibliografia ==
* {{Cita testo|autore = Paul Hudak, John Hughes, Simon Peyton Jones, Philip Wadler|titolo = A history of Haskell: Being Lazy With Class|editore = |città = San Diego, CA|data = 2007}}
* {{Cita libro|autore = Graham Hutton|titolo = Programming in Haskell|url = https://archive.org/details/programminghaske00libg|anno = 2007|editore = Cambridge University Press|città = |pp =
== Voci correlate ==
Riga 204:
== Collegamenti esterni ==
* {{Collegamenti esterni}}
*
*
=== Tutorial ===
* {{Cita web|autore = |url = https://github.com/bitemyapp/learnhaskell/blob/master/guide-it.md|titolo = Learn Haskell|accesso = |data = }}
* {{cita web|url=https://www.haskell.org/haskellwiki/|titolo=The Haskell Wiki|lingua=en}}
*
=== Libri di testo ===
* {{cita web|url=http://learnyouahaskell.com/chapters|titolo=Learn You a Haskell for Great Good!|lingua=en}}
*
=== Community ===
|