Corso di Linguaggi di Programmazione
Anno Accademico 2021/2022
Docente:
Pietro Cenciarelli
Ultima modifica: 3 ottobre 2021
Introduzione
Nel corso di Linguaggi
di Programmazione viene approfondito lo studio di alcune
nozioni fondamentali nell'ambito dei linguaggi di programmazione:
dalle più elementari, come quella di variabile, o di
parametro, a concetti più complessi come quello di
polimorfismo o di sottotipo, che hanno particolare
rilevanza nella verifica di proprietà di correttezza e
sicurezza dei programmi. Queste nozioni
assumono forme diverse nei diversi paradigmi di programmazione. In
particolare, nella prima parte del corso vengono considerati e messi
a confronto il paradigma imperativo, funzionale e ad
oggetti, facendo riferimento rispettivamente a linguaggi
Algol-like, ad ML ed a Java. Mentre si assumono
esperienza nella programmazione imperativa (ad esempio in "C") e
rudimenti di Java, non è richiesta alcuna conoscenza
preliminare di ML.
Scopo del corso non è quello di insegnare nuovi linguaggi, ma di
guidare lo studente alla comprensione dei fondamenti teorici che
stanno alla base dei moderni linguaggi di programmazione.
A tale scopo, nella
parte di corso relativa ai paradigmi di programmazione, viene
utilizzata la semantica operazionale, che consente di definire
formalmente i diversi meccanismi di scoping e passaggio dei
parametri. Analogamente, i concetti di funzione di ordine superiore,
polimorfismo e sottoclasse vengono spiegatiti mediante altrettanti
sistemi formali dei tipi. Il corso comprende infine un nutrito
programma di
esercitazioni
ed attività di programmazione da svolgere in laboratorio.
Linguaggi di Programmazione è formalmente
equiparato al corso di Linguaggi di Programmazione I: Paradigmi
del vecchio ordinamento. Il corso è fortemente consigliato per
chi, intendendo proseguire nella Laurea Magistrale, volesse scegliere
il curriculum di Metodi Formali per il Software, o fosse
comunque interessato a gettare uno sguardo sui fondamenti teorici
dell'informatica.
Gli argomenti trattati nel corso di Linguaggi di Programmazione sono
descritti, insieme a molti altri, in questa
mappa
concettuale interattiva.
Il corso si avvale di un supporto di e-learning basato su piattaforma Moodle, al quale
è fortemente consigliato iscriversi. Lì troverete i forum del corso, avvisi importanti
(che potrebbero non essere riportati in questa pagina web), registrazioni di eventi
telematici, incluse le lezioni registrate in era Covid, e molto altro. Trovate le istruzioni
per iscrivervi nella sezione Miscellanea.
Programmi svolti nei passati anni accademici:
Materiale e testi di consultazione
Altri testi
Programming Languages,
Principles and Paradigms, A. Tucker e R. Noonan, McGraw-Hill 2002.
Programming
Languages Design and Implementation (Fourth Edition),
T.W. Pratt e M.V. Zelkowitz, Prentice-Hall, 2001.
The Java Programming Language, K.Arnold e J.Gosling.
Addison-Wesley 1998. Esistono numerosi tutorial su Java in rete,
per esempio sul sito della
Sun (dove si può scaricare
anche il compilatore).
LISP Primer,
Colin Allen, Maneesh Dhagat: un breve corso introduttivo al Lisp
sotto forma di ipertesto.
Letture consigliate
-
Selected
Writings on Computing: a Personal Perspective
E.W. Dijkstra, 1982.
-
Why Functional Programming
Matters?
John Hughes, 1989
Interessante articolo sulle virtù composizionali della
programmazione funzionale, con particolare accento all'ordine superiore e
alla lazy evaluation. Da leggere.
-
Why no one Uses Functional Languages
Philip Wadler, 1998
Breve ed amara analisi critica, direttamente dalla penna di un grande guru
della programmazione funzionale: nessuna paura, la tesi implicita è
che in realtà non sarebbe poi difficile evangelizzare il
mondo! A patto di non occuparsi solo di cercare il linguaggio perfetto, ma
arricchendo le distribuzioni dei linguaggi funzionali con gli usuali
strumenti offerti dai compilatori: debugger, librerie, comunicazione con
software scritto in altri linguaggi...
-
Can Programming Be Liberated from the von
Neumann Style? A Functional Style and Its Algebra of Programs
John Backus, 1978
Un grande classico che ha riacceso l'interesse per il lambda
calcolo come fondamento della programmazione, in alternativa
all'imperante modello imperativo.
Ravvedutosi sulla via del Turing Award, il progettista del FORTRAN, nella
dissertazione in occasione del ricevimento del più prestigioso
riconoscimento scientifico in informatica, ripropone i linguaggi
funzionali, ponendo l'accento sulla facilità di analizzare i
programmi funzionali con ragionamenti di tipo algebrico. Un
pò datato e di difficile lettura.
-
To Iterate is Human, to Recurse, Divine
James O. Coplien, 1998
Brevissimo e divertente pamphlet divulgativo che ripropone gli argomenti
delle altre letture. Contiene un'analisi, anche estetica,
dello stile di programmazione funzionale e un confronto con lo stile
imperativo/iterativo.
Orari
-
Lezioni: orari ed aule delle lezioni sono riportati nelle pagine della didattica del Dipartimento di Informatica.
-
Ricevimento studenti: si tiene presso lo studio del docente in Via Salaria 113,
terzo piano, stanza 310, il lunedì, ore 16.00 - 18.00, su appuntamento fissato via mail
(cenciarelli@di.uniroma1.it).
Modalità d'esame
Il corso prevede attività di verifica dell'apprendimento e di approfondimento:
due prove di esonero (la prima a novembre, la seconda prima della prova orale)
ed un progetto da svolgere in gruppo. L'esame consite in una prova scritta (solo
per chi non ha svolto, o non intende far valere, gli esoneri) ed una orale, nel
corso della quale verranno discussi anche esoneri (o scritto) e progetto
(se svolto).
Prove scritte, esoneri, progetti
- Testi di prove scritte passate
- 10 gennaio 2001 (postscript,
dvi).
-
7 febbraio 2001 (postscript,
dvi).
-
21 febbraio 2001 (postscript,
dvi).
-
19 giugno 2001 (postscript,
dvi).
Soluzioni: postscript,
dvi
-
26 settembre 2001 (postscript,
dvi).
Soluzioni: postscript,
dvi
-
9 gennaio 2002 (postscript,
dvi).
-
23 gennaio 2002 (postscript,
dvi). Soluzioni:
postscript,
dvi.
-
3 luglio 2002 (postscript,
dvi).
-
9 giugno 2004 (pdf).
- Testi di esoneri passati
- Progetti assegnati
- Homepage del progetto Mini-Java (2005-06)
Esercitazioni
Torneo dei tipi
Nel torneo dei tipi i concorrenti si sfidano ponendosi reciprocamente
problemi di tipaggio di termini ML. Il torneo funziona ad eliminazione diretta.
La finale si celebra il giorno del primo appello
orale. Il vincitore verbalizza immediatamente un 30 senza
dover sostenere prova scritta né orale. Può comunque
chiedere di sostenere l'orale per avere la lode.
Valutazione del corso
Ecco come gli studenti hanno valutato questo corso
(sono file .slk, un formato per spreadsheet che si apre con Excel,
o con Open Office.)
Istruzioni per la compilazione del modulo di rilevazione delle opinioni
Miscellanea
Registrazione al supporto di e-learning del corso di Linguaggi basato su piattaforma Moodle. Praticamente obbligatorio iscriversi! E' necessario avere un accout sulla piattaforma Moodle di Sapienza (gli studenti Sapienza ce l'hanno automaticamente; altrimenti, per crearlo, è necessario impostare una password e fornire un indirizzo di posta elettronica, al quale riceverete un messaggio dal sistema di supporto e-learning Sapienza contenente un collegamento da clickare per completare la registrazione). Una volta in possesso di un account dovete cercare il corso di Linguaggi di Programmazione (selezionando facoltà e corso) e finalmente clickare su iscrivimi. Se non siete studenti di Sapienza è necessaria una chiave di iscrizione (contattatemi nel caso), altrimenti no. Se desiderate potete procedere modificando il vostro profilo.
Avvisi
Nell'anno accademico 2020-21 il corso è erogato in modalità mista (presenza e telematica).
Link e credenziali di accesso per partecipare in modalità telematica (riunione in Zoom) sono
pubblicate sulla bacheca del docente accessibile dal catalogo dei corsi di studio:
https://corsidilaurea.uniroma1.it/it/users/pietrocenciarelliuniroma1it