Programmazione generica: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m sistemazione fonti e fix vari
Riga 2:
 
In [[informatica]], la '''programmazione generica''' è un [[paradigma di programmazione]] in cui gli [[algoritmo|algoritmi]] accettano come parametri le [[tipo di dato|tipologie di dati]] da trattare, oltre ai [[dato|dati]] veri e propri. Questo approccio, introdotto nel [[ML (linguaggio di programmazione)|linguaggio ML]] nel 1973,<ref name="Lee2008">
{{cita libro| autore = Kent D. Lee| titolo = Programming Languages: An Active Learning Approach| url = https://books.google.com/books?id=OuW5dC2O99AC&pg=PA9|data=15 dicembre 2008| editore = Springer Science & Business Media| ISBN = 978-0-387-79422-8| pp = 9–10| lingua = en}}
{{cita libro
| autore = Kent D. Lee
| titolo = Programming Languages: An Active Learning Approach
| url = https://books.google.com/books?id=OuW5dC2O99AC&pg=PA9
| data = 2008-12-15
| editore = Springer Science & Business Media
| ISBN = 978-0-387-79422-8
| pp = 9–10
| lingua = en
}}
</ref><ref>
{{cita conferenza|autore = R. Milner|autore2 = L. Morris|autore3 = M. Newey|anno = 1975|titolo = A Logic for Computable Functions with Reflexive and Polymorphic Types|titolo-libro = Proceedings of the Conference on Proving and Improving Programs|lingua = en}}
{{cita conferenza
|autore = R. Milner
|autore2 = L. Morris
|autore3 = M. Newey
|anno = 1975
|titolo = A Logic for Computable Functions with Reflexive and Polymorphic Types
|titolo-libro = Proceedings of the Conference on Proving and Improving Programs
|lingua = en
}}
</ref>
permette di scrivere codice generico, del quale possono essere auto-generate multiple versioni specializzate che differiscono solo per i tipi di dati trattati, riducendo così la necessità di scrivere codici essenzialmente duplicati.
Riga 29 ⟶ 12:
Nuove tecniche vennero introdotte da [[Andrei Alexandrescu]] nel suo libro ''[[Modern C++ Design: Generic Programming and Design Patterns Applied]]'' del 2001. Successivamente il [[D (linguaggio di programmazione)|linguaggio D]] implementò le stesse idee.
 
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.
Riga 89 ⟶ 72:
 
A partire da [[C++11]] il linguaggio supporta i ''template'' variadici, ovvero ''template'' che accettano un numero variabile di parametri.<ref>
{{Cita web|url=http://www.jot.fm/issues/issue_2008_02/article2/|titolo=Variadic Templates for C++0x|autore=Douglas Gregor e Jaakko Järvi|lingua=en}}
{{Cita web
|url=http://www.jot.fm/issues/issue_2008_02/article2/
|titolo=Variadic Templates for C++0x
|autore=Douglas Gregor e Jaakko Järvi
|lingua=en
}}
</ref>
Questa funzionalità permette di gestire in maniera ''type-safe'' tutte quelle situazioni che classicamente avrebbero richiesto una "semplice" [[funzione variadica]], con tutte le restrizioni e i compromessi del caso.<ref>
{{Cita libro|autore=[[Bjarne Stroustrup]]|titolo=C++ Linguaggio, libreria standard, principi di programmazione|edizione=4|capitolo=28.6 Template Variadici|anno=2015|editore=Pearson Italia|isbn=9788865184486}}
{{Cita libro
|autore=[[Bjarne Stroustrup]]
|titolo=C++ Linguaggio, libreria standard, principi di programmazione
|edizione=4
|capitolo=28.6 Template Variadici
|anno=2015
|editore=Pearson Italia
|isbn=9788865184486
}}
</ref>
 
Riga 115 ⟶ 85:
; Libri
 
* {{cita libro|autore = Joseph Albahari|titolo = C# 10 in a Nutshell|editore = O'Reilly|iSBN = 978-1-098-12195-2|edizione = 1|anno = 2022|lingua = en}}
* {{cita libro
* {{cita libro|autore = Joshua Bloch|titolo = Effective Java: Programming Language Guide|editore = Addison-Wesley|edizione = 3|ISBN = 978-0134685991|anno = 2018|lingua = en}}
|autore = Joseph Albahari
* {{cita libro|autore = [[David Musser]]|autore2 = [[Alexander Stepanov]]|titolo = Symbolic and Algebraic Computation: International symposium ISSAC 1988|capitolo = Generic programming|serie = Lecture Notes in Computer Science|volume = 358|pp = 13–25|anno = 1989|lingua = en|doi = 10.1007/3-540-51084-2_2|ISBN = 978-3-540-51084-0|cid = Musser & Stepanov 1989}}
|titolo = C# 10 in a Nutshell
* {{cita libro|autore = Erich Gamma|autore2 = Richard Helm|autore3 = Ralph Johnson|autore4 = John Vlissides|data = 1994|titolo = Design Patterns|editore = Addison-Wesley|lingua = en|ISBN = 0-201-63361-2|url = https://archive.org/details/designpatternsel00gamm|cid = GoF 1994}}
|editore = O'Reilly
|iSBN = 978-1-098-12195-2
|edizione = 1
|anno = 2022
|lingua = en
}}
* {{cita libro
|autore = Joshua Bloch
|titolo = Effective Java: Programming Language Guide
|editore = Addison-Wesley
|edizione = 3
|ISBN = 978-0134685991
|anno = 2018
|lingua = en
}}
* {{cita libro
|autore = [[David Musser]]
|autore2 = [[Alexander Stepanov]]
|titolo = Symbolic and Algebraic Computation: International symposium ISSAC 1988
|capitolo = Generic programming
|serie = Lecture Notes in Computer Science
|volume = 358
|pp = 13–25
|anno = 1989
|lingua = en
|DOI = 10.1007/3-540-51084-2_2
|ISBN = 978-3-540-51084-0
|cid = Musser & Stepanov 1989
}}
* {{cita libro
|autore = Erich Gamma
|autore2 = Richard Helm
|autore3 = Ralph Johnson
|autore4 = John Vlissides
|data = 1994
|titolo = Design Patterns
|editore = Addison-Wesley
|lingua = en
|ISBN = 0-201-63361-2
|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}}
* {{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|lingua = en|doi = 10.1017/S0956796806006198|cid = Garcia 2007}}
* {{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
|lingua = en
|DOI = 10.1017/S0956796806006198
|cid = Garcia 2007
}}
 
== Voci correlate ==
Riga 203 ⟶ 109:
* {{cita web|url=http://www.stepanovpapers.com/|urlarchivio=https://web.archive.org/web/20240309092114/http://www.stepanovpapers.com/|titolo=Raccolta delle pubblicazioni di Alexander A. Stepanov|lingua=en}}
 
{{Portale|Informaticainformatica}}
 
[[Categoria:Programmazione generica]]