81672 - EMERGING PROGRAMMING PARADIGMS

Anno Accademico 2018/2019

  • 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 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:

- agent based programming vs object oriented programming vs functional programming

- homoiconic languages vs higienic macros vs meta-programming vs staged programming

- type inference vs type checking

- functional constructions: first class functions, algebraic data types, pattern matching, extensible records, polymorphic variants

- different flavors of polymorphisms: parametric polymorphism vs bounded polymorphism vs dynamic dispatching vs ad-hoc polymorphism via 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

Seminari da tenersi durante il corso; consegna di mini-progetti; esame orale finale.

Link ad altre eventuali informazioni

http://www.cs.unibo.it/~sacerdot/emerging1718/

Orario di ricevimento

Consulta il sito web di Claudio Sacerdoti Coen