81672 - EMERGING PROGRAMMING PARADIGMS

Anno Accademico 2024/2025

  • Moduli: Claudio Sacerdoti Coen (Modulo 1) Luca Padovani (Modulo 2)
  • Modalità didattica: Convenzionale - Lezioni in presenza (Modulo 1) Convenzionale - Lezioni in presenza (Modulo 2)
  • Campus: Bologna
  • Corso: Laurea Magistrale in Informatica (cod. 5898)

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 sarà a conoscenza dei principali paradigmi emergenti, sapendone valutare criticamente vantaggi e svantaggi, e avrà acquisito nuove competenze di programmazione.

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.

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.

Persone con disabilità e DSA

Le persone con disabilità o disturbi specifici dell’apprendimento hanno diritto a speciali adattamenti in relazione alla loro condizione, previa valutazione del Servizio d’ateneo per le studentesse e gli studenti con disabilità e DSA. Si prega di non rivolgersi al/la docente, ma di contattare il Servizio per un appuntamento. Sarà cura del Servizio stabilire quali adattamenti si rendono opportuni. Maggiori informazioni alla pagina https://site.unibo.it/studenti-con-disabilita-e-dsa/it/per-studenti.

Strumenti a supporto della didattica

Lucidi, registrazione delle lezioni, siti on-line che forniscono Repl (Read-Eval-Print-Loop) per alcuni dei linguaggi visti a lezione

Orario di ricevimento

Consulta il sito web di Claudio Sacerdoti Coen

Consulta il sito web di Luca Padovani