81672 - EMERGING PROGRAMMING PARADIGMS

Anno Accademico 2022/2023

  • Modalità didattica: Convenzionale - Lezioni in presenza
  • Campus: Bologna
  • Corso: Laurea Magistrale in Informatica (cod. 8028)

Conoscenze e abilità da conseguire

Negli ultimi anni, anche a seguito dell'avvento dei processori multicore e della necessità di trovare linguaggi di programmazione che ne semplifichino lo sfruttamento, si osserva un rinnovato fermento riguardo allo sviluppo di nuovi linguaggi di programmazione. Go, Scala, Erlang, Clojure, Rust sono alcuni esempi di linguaggi che stanno attirando l'interesse della comunità industriale e che attingono sia da nuovi paradigmi di programmazione, sia da paradigmi più tradizionali, ma precedentemente di nicchia, che stanno aumentando la loro visibilità. Al termine del corso lo studente conosce i principali paradigmi emergenti di programmazione e i loro relativi vantaggi e svantaggi e comprende la semantica e l'applicazione di nuovi costrutti di programmazione. È in grado di scegliere i migliori paradigmi e i migliori linguaggi di programmazione da utilizzare in un determinato contesto e di simulare costrutti di un paradigma in un altro.

Contenuti

Durante il corso verranno presentati diversi linguaggi di programmazione mettendo in risalto i principi e le caratteristiche che sono i punti di forza o che sono comunque peculiarità del linguaggio (es. gestione degli errori in Erlang, gestione della memoria in Rust, etc.).

Verranno inoltre presentati problemi ricorrenti nell'ambito della programmazione, confrontando le soluzioni linguistiche che i vari linguaggi mettono a disposizione.

La lista degli argomenti trattati comprenderà almeno:

- actor based programming e sua implementazione

- blockchains e smart contracts

- functional programing construcs e loro implementazione: closures, algebraic data types, pattern matching, extensible records, polymorphic variants

- variazioni del polimorfismo e loro implementazione: parametric polymorphism vs bounded polymorphism vs dynamic dispatching

- traits, type classes

- monads and monad transformers

Testi/Bibliografia

Non vi è un testo di riferimento.

Il docente fornirà i lucidi presentati a lezione.

Si farà inoltre riferimento a manuali e altro materiale on-line indicato di volta in volta a lezione.

Metodi didattici

Il corso prevede lezioni frontali nelle quali verranno presentati lucidi oppure verrà scritto codice. Ad ogni studente verrà chiesto di approfondire un paio di linguaggi di programmazione e, successivamente, di presentarli agli altri studenti sotto forma di seminari o di sessioni di discussione.

Potranno essere assegnati problemi da risolvere individualmente o a gruppi sotto forma di mini-progetto, al fine di mettere in luce le differenze fra i diversi paradigmi di programmazione e linguaggi adottati.

Modalità di verifica e valutazione dell'apprendimento

Esame orale.

Orario di ricevimento

Consulta il sito web di Claudio Sacerdoti Coen