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, C++) e procedurale (e.g., C), e qualche esperienza con semplici analisi di algoritmi e strutture di dati.
Funzioni. Un esempio storico: cenni al linguaggio Lisp. Macchine virtuali: interpreti e compilatori. Descrizione di un linguaggio di programmazione: sintassi e semantica. Semantica operazionale strutturata: sistemi di transizione. Il linguaggio ML. Sistema dei tipi, inferenza di tipo e polimorfismo in ML. Gestione della memoria: regole di visibilità, funzioni e procedure, passaggio di parametri. Controllo: strutturazione ed astrazione, eccezioni in ML. Dati: astrazione e modularità, il sistema dei moduli in ML.
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 | Testo di supporto per il linguaggio ML |
Lawrence C. Paulson | ML for the Working Programmer (Edizione 2) | Cambridge University Press | 1996 | 0-521-5654 | Testo di supporto per il linguaggio ML |
Guy Cousineau, Michel Mauny | The functional approach to programming (Edizione 1) | Cambridge University Press | 1998 | 0-521-5768 | Testo di supporto per il linguaggio ML |
Esame mediante prove parziali: vale solo per il primo appello dopo la fine delle lezioni, ovvero per la sessione di dicembre, essendo il corso nel I quadrimestre. L'esame consta di due compiti in classe (C1 e C2) e di alcuni compiti a casa (A). Il voto d'esame è dato da: 20% A + 40% C1 + 40% C2. Passato il primo appello dopo la fine delle lezioni, le prove parziali non valgono più. Chi sostiene l'esame mediante prove parziali si iscrive all'esame della sessione di dicembre.
Esame senza prove parziali: l'esame consta di un unico compito scritto (E), di difficoltà tale da uguagliare A + C1+C2, il cui voto determina il voto d'esame. Questa modalità vale per tutti gli appelli.
Nota: 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. Tutti i voti vengono registrati. Lo studente insoddisfatto dell'andamento dell'esame può ritirarsi: per questo è sufficiente non consegnare C2 o E.
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 ********