Il corso insegna i concetti fondamentali dei linguaggi di programmazione, quali funzioni, tipi, gestione della memoria, e controllo. L'obbiettivo è dare agli studenti una comprensione approfondita dei problemi e dei compromessi che si incontrano nella progettazione di linguaggi di programmazione. Questa comprensione permette agli studenti di cogliere vantaggi e svantaggi dei linguaggi che usano, in modo da saper valutare la scelta del linguaggio di programmazione rispetto all'applicazione che si vuole realizzare. Prerequisiti: qualche conoscenza di almeno un linguaggio di programmazione a oggetti (e.g., Java), qualche conoscenza di almeno un linguaggio di programmazione procedurale (e.g., C), qualche esperienza con semplici analisi di algoritmi e strutture di dati.
Funzioni. Un esempio storico: cenni al linguaggio Lisp. Macchine astratte: interpreti e compilatori. Descrizione di un linguaggio di programmazione: sintassi e semantica. Semantica operazionale strutturata: sistemi di transizione. Il linguaggio ML. Ambiente: nomi, tipi, inferenza di tipo e polimorfismo in ML. Gestione della memoria: regole di "scope", funzioni e procedure, regole per il passaggio di parametri. Controllo: strutturazione ed astrazione, eccezioni in ML. Dati: astrazione e modularità, moduli in ML. Approfondimenti del paradigma orientato a oggetti (opzionale). Cenni di programmazione concorrente e distribuita in ML o Java (opzionale).
Autore | Titolo | Casa editrice | Anno | ISBN | Note |
John C. Mitchell | Concepts in Programming Languages (Edizione 1) | Cambridge University Press | 2003 | 0-521-7809 | Testo adottato |
Jeffrey D. Ullman | Elements of ML Programming (Edizione 2) | Prentice Hall | 1998 | 0-13-79038 | Riferimento principale per il linguaggio ML |
Maurizio Gabbrielli, Simone Martini | Linguaggi di programmazione: principi e paradigmi (Edizione 2) | McGraw Hill | 2011 | 88-386-626 | Testo di ulteriore riferimento generale |
Lawrence C. Paulson | ML for the Working Programmer (Edizione 2) | Cambridge University Press | 1996 | 0-521-5654 | Altro libro per il linguaggio ML |
Guy Cousineau, Michel Mauny | The functional approach to programming (Edizione 1) | Cambridge University Press | 1998 | 0-521-5768 | Per il linguaggio OCAML |
Esame mediante prove parziali: questa modalità vale solo per il primo appello dopo la fine delle lezioni, ovvero per la sessione di dicembre 2006, essendo il corso nel I quadrimestre. In questa modalità, l'esame consta di due compiti in classe di due ore ciascuno (C1 e C2) ed alcuni compiti a casa (A). Il voto d'esame è dato da: 40% C1 + 40% C2 + 20% A. Passato il primo appello dopo la fine delle lezioni, le prove parziali (compiti in classe e compiti a casa) non valgono più nulla. Chi sostiene l'esame mediante prove parziali deve iscriversi all'esame della sessione di dicembre 2006.
Esame senza prove parziali: in questa modalità, l'esame consta di un unico compito scritto (E), di difficoltà tale da uguagliare C1 + C2 + A, il cui voto determina il voto d'esame. Questa modalità vale per tutti gli appelli, incluso il primo dopo la fine delle lezioni. Tuttavia, se uno studente sostenesse C1 + C2 + A e poi anche E, perderebbe il voto maturato con 40% C1 + 40% C2 + 20% A. In altre parole, non è permesso sostenere sia C1 + C2 + A che E e poi scegliere il voto migliore.
Nota: i compiti a casa saranno assegnati a lezione insieme con la data a cui consegnarli; il primo compito in classe (C1) si terrà il 31 ottobre 2006; il secondo compito in classe (C2) si terrà nella stessa data, ora e luogo dell'esame E della sessione di dicembre (naturalmente contenuto e durata di C2 ed E saranno diversi).
Registrazione: a ogni sessione la data dell'esame è la data dello scritto (E); per registrare il voto basta iscriversi allo scritto. La data per la registrazione del voto sarà annunciata negli avvisi per studenti. Poichè i voti si registrano sul registro anche in assenza degli studenti, tutti i voti saranno registrati.
Regolamento: tutti gli elaborati sono individuali; è severamente vietato copiare e scambiare, passare o condividere codice. Tutti gli elaborati che mostrano di essere stati copiati ricevono voto 0, senza distinzione tra chi copia e chi fa copiare.
******** CSS e script comuni siti DOL - frase 9957 ********p>