Home | Search | Help  
Home Page Università di Genova
DISI -> People -> Faculty -> Giovanni Lagorio

Proposte di Prove Finali e Tesi del gruppo Design and foundations of object-oriented and component-based languages

(ultimo aggiornamento: Giugno 2010)

Nota importante: quelle che seguono sono solo proposte indicative (e, ahinoi, raramente aggiornate) ... se siete interessati a una prova finale/tesi su queste tematiche, contattateci.

  • Analisi statica basata su sistemi di tipo coinduttivi
    La nozione di sistema di tipo coinduttivo [ALZ09, AL09] è uno dei più recenti e interessanti contributi del nostro gruppo di ricerca nell'ambito dei linguaggi orientati agli oggetti e dei sistemi di tipo per l'analisi statica dei programmi. Si tratta di una nuova metodologia per la specifica di sistemi di tipo basata su codifica dei programmi in formule di Horn interpretate rispetto al modello di Herbrand co-induttivo. Tale codifiche permettono la specifica di sistemi di tipo molto espressivi in grado non solo di garantire l'assenza dei più classici errori di tipo, ma anche di analizzare altre proprietà interessanti come l'occupazione dello spazio di memoria, l'assenza di side-effect, la validità di invarianti, ecc. Essendo un argomento di ricerca nuovo e interessante, ci sono svariati aspetti, che spaziano dalle problematiche più teoriche (solo tesi) a quelle più implementative (sia prove finali, sia tesi) che vorremmo approfondire. Quelli che seguono sono possibili temi oggetto di un lavoro di tesi/prova finale con uno dei seguenti relatori: Ancona D., Lagorio, Zucca
    • Miglioramento del meta-interprete Prolog per gli aspetti di efficenza, completezza e terminazione (tesi teorica/implementativa)
    • Estensione del meta-interprete Prolog con la nozione di subtyping (tesi teorica/implementativa)
    • Definizione di un meta-interprete Prolog basato su ricerca breadth-first (tesi teorica/implementativa)
    • Risultati di decidibilità (tesi teorica/implementativa)
    • Tecniche di prove di soundness basate su semantica co-induttiva (tesi teorica)
    • Risultati su proprietà di principalità (tesi teorica)
    • Studio di codifiche estese a caratteristiche non ancora trattate: aggiunta di costrutti, eccezioni, side-effect, ecc. (tesi teorica/implementativa)
    • Studio di codifiche per provare proprietà interessanti: occupazione dello spazio di memoria, assenza di side-effect, ecc. (tesi teorica/implementativa)
    • Estensione del prototipo: realizzazione di una GUI, interfacciamento Java/Prolog (prova finale implementativa)
    • Estensione del prototipo: trattamento degli errori (prova finale implementativa)

  • Porting semi-automatico di programmi Java tramite matching di ontologie
    L'obiettivo di questa ricerca è l'integrazione di analisi di tipo con algoritmi per matching di ontologie, per permettere l'adattamento semi-automatico di programmi Java, al fine di risolvere inconsistenze dovute a modifiche di librerie. Tale adattamento è ottenuto attraverso una traduzione [AM08], dopo un'analisi sia di tipo sia semantica delle due versioni, quella vecchia e quella nuova, della libreria. L'analisi di tipo è basata sulla nozione di matching. L'analisi semantica consiste nell'estrazione di due ontologie e nell'utilizzo di un algoritmo di matching per trovare un allineamento tra esse. I possibili relatori sono Ancona D., Mascardi. Argomenti proposti:
    • Implementazione di un prototipo per l'estrazione di ontologie da un programma Java (prova finale o tesi, dipende dal sottoinsieme di Java considerato)
    • Validazione e implementazione dell'algoritmo di estrazione di matching di tipo tra due librerie Java (tesi)
    • Traduzione di una libreria Java guidata da un matching funzionale di tipo (prova finale)
    • Implementazione del raffinamento del matching di tipo parametrica rispetto all'algoritmo di matching di ontologie (tesi)
    • Realizzazione dell'applicazione completa (assemblando le componenti sviluppate ai punti precedenti) e sperimentazione con vari algoritmi di matching tra ontologie (tesi)

  • Sviluppo di (piccoli) interpreti o compilatori
    La nostra attività di ricerca consiste spesso nel design di calcoli o linguaggi giocattolo, allo scopo di studiare "in piccolo" il comportamento di costrutti linguistici e/o la possibilità di estendere linguaggi reali (tipicamente Java). Siamo interessati a sviluppare dei prototipi per tali calcoli/linguaggi giocattolo, o sotto forma di interpreti (come visto nel laboratorio del corso di LP), o di traduttori che producano codice Java standard, o di compilatori che producano direttamente bytecode. In particolare in questo momento siamo interessati ai seguenti prototipi:
    • Interprete o compilatore per FJig [prova finale o tesi]
      FJig è il più recente linguaggio giocattolo che abbiamo sviluppato. Si tratta un calcolo piccolo ma potente che permette di codificare vari meccanismi per la composizione del software in linguaggi class-based (per esempio, ereditarietà, classi mixin, trait, ecc.).
      In una precedente prova finale è stato sviluppato un interprete del livello core di FJig. Nuove prove finali potrebbero sviluppare un traduttore da linguaggio ad alto livello a core o un traduttore da FJig a Java. Possibili relatori: Lagorio e Zucca
    • Linguaggio Fickle [prova finale]
      Un oggetto è detto riclassificabile quando è possibile cambiare la sua classe di appartenenza (con conseguente modifica del suo stato e del suo comportamento), senza modificarne l'identità. Fickle è un semplice linguaggio che fornisce un meccanismo per la riclassificazione degli oggetti in un contesto Java-like. La sua implementazione può essere realizzata tramite un'opportuna traduzione in Java dei programmi Fickle [AADDZ06]; un prototipo di traduzione è stato già realizzato, ma c'è spazio per diversi miglioramenti ed estensioni. In particolare:
      1. Testing del prototipo esistente, con conseguenti correzioni, e stesura di un'opportuna documentazione
      2. Estensione del prototipo esistente per implementare FickleII
      3. Refactoring del prototipo in Java 5.0
      (ognuna di queste attività corrisponde a una possibile prova finale). Possibili relatori: Ancona D.
    • Interprete per un calcolo di processi che scambiano codice [prova finale o tesi]
      In [FZ07] e [AFZ08] abbiamo definito un semplice calcolo di processi che si scambiano codice in modo "safe", effettuando cioè dei controlli a runtime che garantiscono che il codice ricevuto abbia un tipo compatibile con quello atteso. La prova finale (o tesi a seconda dell'approfondimento) consiste nella realizzazione di un prototipo per il calcolo. La gestione dell'aspetto concorrente può effettuarsi per esempio utilizzando i thread di Java. Possibili relatori: Ancona D., Zucca

  • Sviluppo di un plugin per Eclipse [tesi o prova finale]
    Lo scopo è integrare, all'interno del noto IDE, uno dei prototipi già esistenti per calcoli/linguaggi giocattolo. Questa integrazione può avvenire a vari livelli: come minimo si tratterà di avere la sintassi evidenziata, fino ad avere un supporto completo per il debugging, profiling e refactoring.
    Questa attività si presta a essere svolta in una tesi, sviluppando un plugin ragionevolmente completo, o suddivisa in una serie di prove finali (ognuna delle quali aggiungerà funzionalità).
    Aggiornamento (giugno 2010): forse si potrebbe studiare e usare Xtext
    Possibili relatori: Lagorio

  • Studio di nuovi linguaggi e tecnologie OO e confronto con Java [prova finale]
    Scopo delle seguenti prove finali è studiare tecnologie o tool, sviluppare qualche esempio per metterle a confronto e infine riassumerne pregi e difetti.
  • Emulazione macchine VM-2, VM-R [prova finale o tesi]
    Siamo interessati allo sviluppo di emulatori per queste macchine e, successivamente, a strumenti di sviluppo (dis/assemblatori, compilatori, ecc.).
    L'attività di sviluppo potrà avvenire come una serie di prove finali o come una tesi (che includerà, quindi, non solo l'emulatore ma anche qualche strumento di sviluppo)
    Possibili relatori: Ancona D. e Lagorio