Linguaggi di programmazione avanzati

Lezioni: II Semestre

Docenti

Maurizio Gabbrielli e Davide Sangiorgi
 

Obiettivi del corso

Questo corso si propone di introdurre le nozioni di base di alcuni linguaggi di programmazione avanzati quali i inguaggi logici, i linguaggi con vincoli e i linguaggi concorrenti, tre aree importanti, sia per la ricerca che per le applicazioni pratiche, che nei corsi del triennio non vengono studiate adeguatamente.

Descrizione degli argomenti del corso

La programmazione logica, basata sull'uso esplicito della logica come strumento di programmazione, e' usata principalmente in intelligenza artificiale, mentre la programmazione (logica) con vincoli e' una estensione che permette di manipolare esplicitamente vincoli (cioe' relazioni) su opportuni domini sia simbolici che numerici e trova numerose applicazioni pratiche negli ambiti piu' diversi (ad esempio bio-informatica, ottimizzazione, analisi finanziaria ecc.).

La programmazione concorrente invece si occupa della programmazione di sistemi concorrenti, ovvero di quei sistemi formati da piu' processi che eseguono le proprie attivita' contemporaneamente e che cosí facendo possono interagire fra di loro. Grazie alle macchine con processori multipli e sopratutto ai sistemi distribuiti costituiti da macchine collegate in rete, la programmazione concorrente e' sempre piu' importante (si pensi per esempio alle applet e ai thread di Java).  La programmazione concorrente e' piu' delicata della programmazione sequenziale standard, e per essere realizzata efficacemente richiede costrutti e concetti nuovi.
 

Programma del Corso

Programmazione logica: nozioni di base; la risoluzione; l'unificazione; cenni al Prolog.
Vincoli: la nozione di vincolo e valutazione; vincoli su alcuni domini specifici sia numerici che simbolici; vincoli su domini finiti; risolutori di vincoli.Programmazione logica con vincoli: nozioni di base; semantica operazionale; controllo della ricerca; efficienza. Modellizazione: esempi pratici di problemi modellati con vincoli; uso di strutture dati; labelling.

Programmazione concorrente: costrutti di base della programmazione concorrente; come creare attivita' concorrenti e come sincronizzarle; meccanismi per la composizione di processi semplici; meccanimsi per risolvere problemi piu' complessi; esempi in Java.
 

Bibliografia

   K. Marriott e Peter Stuckey. Programming with constraints.  MIT Press

I lucidi usati a lezione (di K. Marriott, leggermente modificati):

     Chapter 1: Constraints
     Chapter 2: Simplification, Optimization and Implication
     Chapter 3: Finite Domain Constraints
     Chapter 4: Constraint Logic Programs
     Chapter 5: Modeling
     Chapter 6: Data  Structures
     Chapter 7: Controling search
     Chapter 8: Finite Domains
 
 

Un survey su CLP:

J. Jaffar and M.J. Maher. Constrain Logic Programming: a survey.

Lucidi su concorrenza:

 Parte 1
 Parte 2