Paradigmi di Programmazione e Sviluppo 2018/2019
Main | News | Info | Projects | Exam |
I seguenti progetti sono proposti dal docente per la modalità "individuale" del progetto d'esame. Si rimanda alla pagina esame per ulteriori informazioni. Si noti che in generale questi progetti sono di tipo esplorativo + sperimentativo, ossia si esplora una tecnologia/libreria, si relazionano i suoi principali aspetti, e poi si realizza una breve sperimentazione, contrattata col docente.
- Meta, reflection, annotations, and the available libraries. In questo progetto si analizzeranno e relazioneranno i vari tool disponibili per meta-programmazione in Scala (disponibili nel SDK o come librerie esterne), come scalameta, annotazioni e core reflection, e si svilupperà un mini-progetto dimostrativo da concordare col docente.
- Constraining Scala programs via annotations and compiler-plugins. In questo progetto si analizzeranno le modalità con cui è possibile estendere il compilatore di Scala per fornire supporti specifici utili a librerie e DSL (ad es., customizzazioni del type checking, rimozione di costrutti o combinazioni di costrutti dal linguaggio).
- ASSIGNED: Collection library structure and types. In questo progetto si analizzeranno gli internals del collection framework di Scala per comprenderne design, aspetti implementativi, pattern, e idiomi di programmazione -- questi includono infatti aspetti avanzati molto rilevanti.
- ASSIGNED Cats (I/O monad and concurrency). Cats è una libreria Scala che fornisce astrazioni per programmazione funzionale (e.g., monoidi, funtori, monadi). In questo progetto l'obiettivo è studiare e presentare l'API, con focus particolare sui supporti per gestione dell'I/O e concorrenza -- questo progetto "fonde" aspetti PPS con aspetti PCD.
- ASSIGNED Scalaz-zio and/or advanced concurrency abstractions for Scala. Scalaz-io è una libreria Scala che fornisce astrazioni per programmazione funzionale per gestire aspetti di side-effect, gestione dell'I/O e concorrenza -- questo progetto "fonde" aspetti PPS con aspetti PCD.
- ASSIGNED: Shapeless. Shapeless è una libreria Scala dove tipi, generici, impliciti e typeclass sono utilizzati al massimo della loro espressività; l'obiettivo è manipolare dati a livello di tipi e costruire rappresentazioni generiche per esprimere tanto con poco codice. In questo progetto si studierà questa libreria, mostrandone il potenziale.
- A full DSL support in Scala. In questo progetto, si realizzerà un DSL/API in Scala. L'idea di quale DSL può venire da docenti o studenti.
- ASSIGNED: Prolog To Scala, by translation. In questo progetto si realizzerà (in Scala) un traduttore da Prolog (o un suo più semplice frammento) verso un equivalente programma Scala, sulla falsariga di quanto mostrato a lezione.
- Prolog To Scala, as a DSL. In questo progetto si realizzerà un DSL Scala che imiti il Prolog (o un suo più semplice frammento), così da fornire un diretto supporto alla programmazione logica in Scala.
- ASSIGNED Spark (external/internal analysis). Spark è un famoso framework Scala per big-data e cluster computing. In questo progetto si studieranno aspetti linguistici di questo framework, e la sua organizzazione interna -- l'obiettivo è porre le basi per futuri framework per computazione distribuita che si ispirino a Spark.
- Rewrite Protelis lang into scala for ScaFi. ScaFi è un framework Scala per Aggregate Computing, un paradigma di recente invenzione per lo sviluppo di sistemi a larga scala. In questo progetto l'obiettivo è sviluppare la libreria standard di scafi per includere le funzionalità implementate nella libreria standard di Protelis (un DSL standalone, o esterno, per Aggregate Computing). L'obiettivo non è solo tradurre l'implementazione da Protelis a un suo equivalente Scala, ma anche rifinire l'API utilizzando la potenza espressiva di Scala -- questo progetto insisterà su aspetti avanzati di design di API e su questioni scientifiche di sistemi distribuiti.
Nuove proposte
- Shapeless-based frameworks. La libreria Shapeless consente con semplicità di realizzare codice type-dependent, ossia di realizzare "algoritmi" che dipendono dalla parametrizzazione di tipo in input, che può essere ispezionata con flessibilità. Molti framework sono stati costruiti su Shapeless, che in questo progetto potrebbero essere visti in rassegna, per poi approfondirne qualcuno e fare esperimenti. Uno particolarmente interessante è https://github.com/jedesah/computation-expressions, che sembra permetta di ridefinirsi le for comprehensions.