Linguaggi di programmazione

Linguaggi di programmazione

Corso di laurea in Informatica


Docente

Finalità del corso

Scopo del corso è approfondire le conoscenze relative ai linguaggi di programmazione. Usando come base le conoscenze già acquisite, negli anni passati, su diversi linguaggi di programmazione, vengono presentate nozioni e principi "universali" che guidano la definizione e l'implementazione dei moderni linguaggi di programmazione.
Acquisire una solida base di conoscenze generali permette di muoversi con una certa disinvoltura tra i vari linguaggi di programmazione e permette di apprendere in maniera rapida ed efficace nuovi linguaggi. La conoscenza degli aspetti implementativi permette di avere una stima del costo di esecuzione dei diversi costrutti di un linguaggio, e quindi fornisce le informazioni base per la scrittura di codice efficiente.
Nel corso particolare risalto viene dato al paradigma di programmazione funzionale per le sue caratteristiche di pulizia ed espressività. Viene presentato il linguaggio funzionale Haskell e si mostra quindi come meccanismi quali high-order e non-determinismo possano essere sfruttate per scrivere codice compatto, elegante e flessibile (riutilizzabile).

Programma del CORSO

  • Macchine astratte, interpretazione e compilazione. Introduzione alla struttura dei compilatori.
  • Descrivere un linguaggio di programmazione: sintassi, semantica, pragmatica.
  • Analisi lessicale. Analisi sintattica. Generatori di analizzatori, lessicali e sintattici: Lex, Alex, Yacc, Happy.
  • I nomi e l'ambiente.
  • La gestione della memoria.
  • Strutturare il controllo.
    Astrarre sul controllo: procedure e funzioni.
  • Strutturare i dati: i tipi di dati nei linguaggi di programmazione.
  • Paradigma orientato agli oggetti
  • Paradigma funzionale.
    Introduzione alla programmazione funzionale. Il linguaggio Haskell.
  • Sistemi di assegnazione di tipo, descrizione formale.
  • Programmazione concorrente.

Libri di testo

Testi adottati

Altri documenti e testi di possibile consultazione

Gli argomenti trattati nel corso sono reperibili su diversi libri di testo, piuttosto simili tra di loro per contenuti e struttura.
  • In particolare, questo corso prende ispirazione anche da:
    Michael Scott. Programming language pragmatics. Morgan Kaufmann.
  • Un libro di testo analogo, facilmente reperibile in rete:
    Robert W. Sebesta. Concepts of Programming Languages. Pearson. ISBN-13: 978-0131395312

LUCIDI presentati a lezione e riferimenti ai testi

Introduzione
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 1-5,9-24, 42-47. da [GM].
Sintassi
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 25-42, 47-49, 51-57, 71-76, 83-85, 90-92, 100-101, 108-110, 129-133 da [GM]. Per gli interessati, [YA] e, più estesamente, [Ni] offrono un approfondimento di Lex/YACC.
Nomi e ambiente
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 143-161, 354-356 da [GM].
Gestione della memoria
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Capito 7 da [GM].
Strutture di controllo
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Capitolo 8 da [GM].
Astrarre sul controllo
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Capitolo 9 da [GM].
Astrarre sui dati
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 279-329 da [GM].
Tipi di dati astratti
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 347-354 da [GM].
Paradigma ad oggetti
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 359-384 da [GM].
Paradigma funzionale
Lucidi in formato pdf: [1 per pagina], [4 per pagina],
Esempi di codice presentati a lezione.
Pag. 415-419 da [GM]. Tutto "A gentle introduction to Haskell '98" tranne le sezioni 4.4 e 13. Gli argomenti della sezione 9.3 sono stati svolto usando un diverso esempio guida.
Analizzatori lessicali e sintattici in Haskell
Lucidi in formato pdf: [1 per pagina], [4 per pagina],
Esempi di codice.
Da sezione 2 a sezione 5.3.3 nel manuale Alex [Al]. Da sezione 2.1 a sezione 2.4 nel manuale Happy [Ha].
Sistemi di assegnazione di tipo
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Dal capitolo "Type System" [Car], le sezioni 2-4. È consigliata la lettura della sezione 1 che costituisce un'interessante introduzione ai sistemi di tipi.
Concorrenza
Lucidi in formato pdf: [1 per pagina], [4 per pagina].
Pag. 493-525 da [GM].
Alcuni esercizi presentati a lezione
Lucidi in formato pdf: [1 per pagina], [4 per pagina],
Esempi di codice Haskell presentati a lezione.

Modalità di svolgimento dell'esame

L'esame si compone di una prova scritta e di una prova orale. Per poter accedere alla prova orale è necessario avere svolto, a casa nei tempi desiderati, una serie di esercizi; una breve presentazione di alcune delle soluzioni svolte verrà richiesta durante l'orale.
Esercizi a casa:
Per completare la preparazione delle parti di programma relative alla programmazione Haskell e all'uso degli strumenti software Alex ed Happy viene chiesto allo studente di svolgere per conto proprio una serie di esercizi di programmazione. Gli esercizi svolti vanno consegnati via web, caricandoli attraverso il sito di e-learning del corso (cartelle in fondo alla pagina). Il sistema accetta la consegna di un unico file di testo, quindi per ciascuno dei due argomenti, le diverse soluzioni vanno inserite in un unico file. La consegna fa fatta prima dell'esame orale e fino alla data dell'orale è possibile modificare il lavoro consegnato ricaricandolo. Si avverte che attraverso il software Turnitin viene svolto un controllo antiplagio.

Gli esercizi da svolgere sono:

Haskell:
dall'elenco, reperibile nella pagina web del corso, nel sito e-learning, cartella "Materiale didattico", file "Esercizi-di-Programmazione-Haskell.pdf", svolgere almeno una ventina di esercizi, possibilmente 2 per ogni categoria. Naturalmente viene valutato positivamente l'aver risolto esercizi più avanzati nelle varie categorie (vedi le note introduttive nell'elenco). Viene inoltre valutato positivamente il presentare più soluzioni, che fanno usato tecniche di programmazione diverse, per lo stesso esercizio. È comunque sufficiente risolvere gli esercizi più semplici o versioni semplificate degli esercizi proposti. Nota. In alcuni esercizi (esempio 2.7) si richiede l'uso di tecniche non spiegate a lezione, queste richieste possono essere ignorate.
Analizzatori lessicali e sintattici:
Vedi elenco
Prova Scritta:
L'esame scritto prevede:
  • lo svolgimento di una serie di esercizi analoghi a quelli presentati durante le esercitazioni e reperibili nell'ultimo dei lucidi elencati di sopra. Più nel dettaglio l'esame prevede:
    • un esercizio sulle grammatiche: da una specifica definire una grammatica formale, e da questa una serie di regole per la costruzione di un analizzatore lessicale o sintattico, con gli strumenti Lex, Alex, Yacc, Happy.
    • uno o due esercizi sullo scope e sullo stack di attivazione, gli esercizi consistono nel determinare il risultato della computazione di un semplice programma imperativo, mostrando come variano stack di attivazione ed valori assegnati alle variabili
    • un esercizio di programmazione in Haskell
    • un esercizio di derivazione formale del tipo di un espressione
    • un eventuale esercizio sulla rappresentazione dei tipi di dato
  • la risposta ad una serie di domande riguardanti gli argomenti trattati a lezione. Durante questa parte della prove scritta non sarà possibile consultare il libro di testo o gli appunti.
Prova Orale:
La prova orale, obbligatoria per tutti, solitamente consiste in poche e brevi domande sugli argomenti trattati a lezione. Per poter sostenere la prova orale è necessario aver superato l'esame scritto con un voto maggiore o uguale a 16. Si richiede inoltre che la prova scritta sia stata superata da meno di un anno. Nel caso la prova orale non venga superata o si decida di non accettare il voto, la prova scritta resta valida, è quindi possibile ripetere la sola prova orale.
Nota:
L'iscrizione all'esame su Esse3 è necessaria anche per motivi organizzativi, in questo senso, iscriversi all'esame e non presentarsi crea quasi gli stessi inconvenienti di presentarsi all'esame senza essersi iscritti. Pertanto chi rinunciasse a presentarsi ad una prova d'esame è caldamente invitato ad annullare la propria iscrizione su Esse3.
Gli studenti che non dispongano di un account su Esse3 possono iscriversi mandandomi un messaggio di posta elettronica all'indirizzo "pietro.digianantonio at uniud.it".
Periodo di validità delle prove:
Le prove scritte mantengono la loro validità per un anno, ossia una volta superato lo scritto lo studente ha un anno di tempo per completare l'esame sostenendo le rimanenti prove.

Modalità svolgimento prove esame via telematica.

A partire dagli appelli di giugno 2021, gli esami si svolgeranno di regola in presenza. In alcuni casi. come da regolamento d'ateneo, c'è la possibilità di fare richiesta per svolgere l'esame per via telematica. Per l'esame scritto, il testo da svolgere nelle due modalità sarà identico. L'esame orale sarà più approfondito nel caso lo scritto sia svolto in via telematica.

Esame scritto

Per gli esami scritti svolti in via telematica valgono le seguenti regole.
Il candidato deve essere dotato di quanto segue:
  • (IMPORTANTE) una connessione Internet affidabile;
  • un dispositivo (preferibilmente laptop / PC) con videocamera, microfono e altoparlante (non posso essere utilizzate cuffie) per la sorveglianza durante l'intera sessione d'esame. Nel dispositivo deve avere installato l'applicativo Teams, la fotocamera deve garantire la capacità di mostrare, all'inizio del test o su richiesta, il contenuto dell'intera stanza in cui si svolgerà l'esame, ossia il candidato deve essere in grado di spostare la telecamera e mostrare l'ambiente circostante; durante lo svolgimento dell'esame la telecamera deve essere posizionata di lato o preferibilmente ALLE SPALLE del candidato, e dovrà inquadrare: il candidato, la scrivania e la porta d’ingresso; la fotocamera deve garantire un certo livello di qualità (deve almeno consentire di identificare il candidato controllando il documento di identità);
  • un dispositivo, tipacamente lo stesso di sopra, con un'applicazione per visualizzare, e eventualmente stampare il file pdf. Il candidato potrà quindi stampare il testo d'esame o in alternativa avrà 10 minuti di tempo per copiare il testo su carta Una volta completata la copiatura, non dovranno esserci schermi video accessi e facilmente visibili al candidato, nella sostanza è accettabile uno schermo acceso, collegato alla videocamera, posizionato almeno lievemente alle spalle del candidato, non uno posizionato di fronte;
  • una stanza in cui il candidato deve essere solo per l'intera durata dell'esame;
  • sulla scrivania in cui gli unici oggetti ammessi sono:
    • fogli A4 vuoti (al massimo 10),
    • penne blu / nere (al massimo 5, si consiglia di avere almeno 3 penne, quindi    una sostituzione nel caso in cui uno smetta di funzionare),
    • un documento di identità valido;
    • la stampa del manuali haskell e dei file pdf presentati a lezione relativi a sistemi di assegnazione di tipo
  • uno scanner o un'app scanner installata sul telefono cellulare per scansionare il testo, che deve essere inviato via e-mail all'indirizzo pietro.digianantonio@uniud.it (si suggerisce di scaricare l'app "CamScanner"). È importante che la soluzione sia spedita immediatamente alla fine dell'esame, eventualmente a scapito della qualità. Il compito d'esame deve essere poi conservato, nella sua versione originale, in modo che, in caso di problemi di leggibilità, possa essere spedita una seconda migliore scansione del compito. In caso si usi un telefono cellulare come scanner, questo deve essere tenuto, durante l'esame in una posizione non immediatamente raggiungibile.
Modalità esame

Durante l'esame il candidato deve trovarsi nel raggio della videocamera e del microfono; il al candidato non è consentito utilizzare alcun dispositivo elettronico.

Gli insegnanti si riservano il diritto di chiedere un controllo video, audio (ad es al candidato potrebbe essere chiesto di parlare per verificare che il microfono sia acceso e / o a mostra l'ambiente circostante usando la fotocamera).

Non sono ammesse interruzioni per i servizi igienici.

Se si verificano problemi tecnici per un breve periodo, al massimo 5 minuti, la prova può continuare, ma il candidato dovrà sostenere una prova orale più completa. Se il problema tecnico dura di più, il compito può essere annullato.

Se un candidato completa il test prima dell'ora di consegna, deve rimanere comunque sotto sorveglianza se non diversamente indicato.

Nel caso ci siano difficoltà a soddisfare alcune delle condizioni di cui sopra, informatemi e vedremo di concordare una soluzione.

Esame orale

Come da regolamento d'ateneo, anche l'esame orale potrà eventualmente svolgersi tramite Teams. Anche per l'orale online valgono alcuni dei vincoli per lo scritto: il candidato deve essere da solo all'interno della stanza, la stanza deve essere esaminabile. L'esame orale è pubblico quindi chi lo desidera può seguire l'esame via Teams.

TEMI D'ESAME proposti in appelli precedenti

  • Testi esame (lista di file pdf)