Programmazione generica: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Tradotta sezione iniziale di en:Generic programming
 
Tradotta sezione "Programming language support for genericity"
Riga 32:
Le funzionalità di programmazione generica sono conosciute come ''generics'' in [[Ada (linguaggio di programmazione)|Ada]], [[C sharp|C#]], [[Delphi]], [[Eiffel (linguaggio di programmazione)|Eiffel]], [[Java (linguaggio di programmazione)|Java]], [[Nim (linguaggio di programmazione)|Nim]], [[Python]], [[Go (linguaggio di programmazione)|Go]], [[Rust (linguaggio di programmazione)|Rust]], [[Swift (linguaggio di programmazione)|Swift]], [[TypeScript]], e [[Visual Basic .NET]]. Sono conosciute come "polimorfismo parametrico" in [[ML (linguaggio di programmazione)|ML]], [[Scala (linguaggio di programmazione)|Scala]], [[Julia (linguaggio di programmazione)|Julia]] e [[Haskell (linguaggio di programazione)|Haskell]].
 
Il termine "programmazione generica" fu coniato originariamente da [[David Musser]] e [[Alexander Stepanov]]<ref name="cita Musser & Stepanov 1989">{{cita|Musser & Stepanov 1989}}.</ref> in un senso più specifico di quello descritto sopra, per descrivere un paradigma di programmazione in cui i requisiti fondamentali sui tipi sono astratti dagli esempi concreti di algoritmi e [[struttura dati|strutture dati]], e formalizzati come "[[concetti (programmazione)|concetti]]", con [[funzione (programmazione)|funzioni generiche]] implementate in termini di questi concetti, tipicamente utilizzando i meccanismi di generalizzazione dei linguaggi come descritti sopra.
 
== Supporto nei linguaggi di programmazione ==
 
Le funzionalità di programmazione generica sono presenti nei [[linguaggio di programmazione ad alto livello|linguaggi di programmazione ad alto livello]] almeno dagli anni '70, in linguaggi come [[ML (linguaggio di programmazione)|ML]], [[CLU (linguaggio di programmazione)|CLU]] e [[Ada (linguaggio di programmazione)|Ada]], e sono stati successivamente adottate da molti linguaggi [[programmazione orientata agli oggetti|orientati agli oggetti]], come [[BETA (linguaggio di programmazione)|BETA]], [[C++]], [[D (linguaggio di programmazione)|D]], [[Eiffel (linguaggio di programmazione)|Eiffel]], [[Java (linguaggio di programmazione)|Java]] e [[Owl (linguaggio di programmazione)|Trellis/Owl]].
 
La genericità è implementata e supportata differentemente nei vari linguaggi di programmazione; il termine "generico" è anche stato usato in modo diverso in vari contesti di programmazione. Per esempio, in [[Forth (linguaggio di programmazione)|Forth]] il [[compilatore]] può eseguire codice durante la compilazione e il programmatore può definire nuove ''[[parola riservata|keyword]]'' e implementazioni per queste sul momento. Esso ha poche "parole" che espongono il comportamento del compilatore e quindi offre naturalmente capacità di "generalizzazione" che, altrimenti, non sono presentate come tali in molti testi di riferimento. Similmente, i linguaggi a [[tipizzazione dinamica]], e specialmente quelli [[interprete (informatica)|interpretati]], solitamente lavorano in logica generica per default: in questi infatti sia le operazioni di [[funzione (informatica)#passaggio degli argomenti|passaggio dei valori alle funzioni]] che le assegnazioni sono indifferenti al tipo dei dati. Questo comportamento è spesso sfruttato per costruire [[astrazione (informatica)|astrazioni]] e scrivere codice conciso, ma non è tipicamente inteso come meccanismo di programmazione generica poiché è una diretta conseguenza della natura del [[sistema dei tipi]] utilizzata dal linguaggio.{{senza fonte}}
Il termine è stato usato nella [[programmazione funzionale]], specificatamente in linguaggi tipo [[Haskell (linguaggio di programmazione)|Haskell]], che usano un [[sistema dei tipi strutturale]] dove i tipi sono sempre parametrici e il codice che li utilizza è generico.
 
I [[array|vettori]] e le [[struttura (informatica)|strutture]] possono essere visti come tipi generici predefiniti. Ogni utilizzo di un tipo vettore o struttura istanzia un nuovo tipo concreto, oppure riutilizza un tipo precedentemente istanziato. I tipi elemento-vettore o elemento-struttura sono tipi parametrizzati, che sono usati per istanziare i corrispondenti tipi generici. Tutto ciò è generalmente integrato nel [[compilatore]] e la sintassi differisce da altri costrutti generici. Alcuni [[programmazione estensibile|linguaggi di programmazione estensibili]] provano ad unificare i tipi generici integrati e quelli definiti dal programmatore.
 
Di seguito verranno presentate le funzionalità di programmazione generica di diversi linguaggi di programmazione. Per uno studio specifico che compari l'adeguatezza di vari meccanismi di programmazione generica consulta il testo in nota.<ref name="cita Garcia 2007">{{cita|Garcia 2007}}.</ref>
 
-----
 
 
== Note ==
Riga 38 ⟶ 52:
 
== Bibliografia ==
 
; Libri
 
* {{cita libro
Riga 70 ⟶ 86:
|ISBN = 978-3-540-51084-0
|cid = Musser & Stepanov 1989
}}
* {{cita conferenza
|autore = [[Bjarne Stroustrup]]
|titolo = Evolving a language in and for the real world: C++ 1991-2006
|conferenza = ACM HOPL 2007
|url = https://www.research.att.com/~bs/hopl-almost-final.pdf
|organizzazione = [[Association for Computing Machinery]]
|anno = 2007
|lingua = en
}}
* {{cita libro
Riga 92 ⟶ 99:
|url = https://archive.org/details/designpatternsel00gamm
|cid = GoF 1994
}}
 
; Conferenze
 
* {{cita conferenza
|autore = [[Bjarne Stroustrup]]
|titolo = Evolving a language in and for the real world: C++ 1991-2006
|conferenza = ACM HOPL 2007
|url = https://www.research.att.com/~bs/hopl-almost-final.pdf
|organizzazione = [[Association for Computing Machinery]]
|anno = 2007
|lingua = en
}}
 
; Pubblicazioni
 
* {{cita pubblicazione
|autore = R. Garcia
|autore2 = J. Ja ̈rvi
|autore3 = A. Lumsdaine
|autore4 = J. Siek
|autore5 = J. Willcock
|titolo = An extended comparative study of language support for generic programming
|rivista = Journal of Functional Programming
|volume = 17
|numero = 2
|editore = Cambridge University Press
|data = marzo 2007
|DOI = 10.1017/S0956796806006198
|cid = Garcia 2007
}}