Progetti individuali

I seguenti progetti sono proposti dal docente per la modalità "individuale" del progetto d'esame. Si rimanda alla pagina apposita 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. Realizzare bene la sperimentazione (con un caso non banale, ma anzi particolarmente interessante) è cruciale al fine della valutazione. Si noti che alcuni di questi progetti sono stati già assegnati in passato, quindi è possibile che il docente fornisca materiale pregresso, per successive sperimentazioni.

  • 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.
  • Dotty and Scala 3.0. In questo progetto si analizzeranno le novità (di linguaggio e framework) di Dotty, ossia Scala 3.0, con particolare riferimento agli aspetti di programmazione funzionale avanzati.
  • 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.
  • 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.
  • 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.
  • Monads. Sviluppare monadi innovative e interessanti, con possibili applicazioni utili.
  • 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.
  • 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.
  • Distributed comuting. Vari framework per sistemi distribuiti (Akka, Spark, ..) sono realizzati in Scala. In questo progetto se ne prenderà uno a campione, se ne studieranno aspetti linguistici, la sua organizzazione interna, e se ne realizzerà un caso prototipo -- l'obiettivo è porre le basi per futuri framework per computazione distribuita che si ispirino a Spark.
  • ScaFi libraries. ScaFi è un framework Scala per Aggregate Computing, un paradigma di recente invenzione per lo sviluppo di sistemi puramente funzionale (in Scala) di algoritmi distribuiti. In questo progetto l'obiettivo è sviluppare la libreria standard di Scafi per includere nuove funzionalità (in parte già esistenti e scritte in altri linguaggi -- questo progetto insisterà su aspetti avanzati di design di API e su questioni scientifiche di sistemi distribuiti.