• Non ci sono risultati.

FiorentiniAlberto Programmazione funzionale

N/A
N/A
Protected

Academic year: 2021

Condividi "FiorentiniAlberto Programmazione funzionale"

Copied!
24
0
0

Testo completo

(1)

Programmazione funzionale

Presentazione

25/02/2019

Camillo Fiorentini Alberto Momigliano

Dimenticate (quasi) tutto quello che sapete di programmazione

(2)

Attenzione

Questa è l’ultima edizione del corso di FP

Dall’anno prossimo, il corso sarà Programmazione Dichiarativa

Introducendo elementi di programmazione logica

Per tanto, il corso di quest’anno è in fieri e

regole/modalità potranno cambiare

(3)

Organizzazione

Sito del corso: ariel

Lezioni:

Lunedì: 10:30 – 13:30, laboratorio gamma.

Venerdì: 9:30 – 12:30, laboratorio omega.

Non faremo sempre 3 ore, dipende da se ci sono esercizi

Struttura del corso:

Prima parte di introduzione a FP

Seconda parte serie di lezioni monografiche (8 ore ca)

Dimostrazione automatica in logica proposizionale

Type inference in MiniML

Property-based testing applicato alla compilazione

(4)

Esami

Per frequentanti:

Un compitino in itinere su PC a metà del corso, più esercizi per la parte monografica

Per non frequentanti

Appello su PC, forse qualche domanda aperta

Per chi sta seguendo/ha seguito corsi di Cazzola:

Altri requisiti TBA

(5)

Regole

Possibilità per i frequentanti di un P

rogetto per alzare il voto:

Argomento proposto dallo studente

da consegnare entro 15 giorni dalla pubblicazione del voto

Esami

Chi è gravemente insuff (<=12) nel primo compitino deve fare appello standard.

Gravemente insuff in appello standard insuff

fortemente incoraggiato a salto di appello

Dopo 2 ritiri/no show in appello consecutivi, salto

(6)

Libro di Testo

Per la parte instituzionale:

Michael R. Hansen and Hans Rischel, CUP (in inglese)

Potete portarvi il libro agli esami

Altro materiale:

Pagina wiki sulla programmazione in F#

Blog: F# for fun and profit

Bob Harper. Programming in Standard ML

Per la parte monografica:

Dispense e materiali secondari vari

(7)

Software: F# 4.1 sotto Linux

F# su mono: open source version of .NET

MonoDevelop come IDE

Scaricate F# lang binding

Altre IDE: vscode, (scaricate ionide), Tsunami e Xamarin

ottimo supporto emacs

.Net Core: Microsoft cross-platform implementation of .Net

Se volete usare Windows, scaricate Visual

Studio Community version

(8)

Why FP?

(9)

Elevator pitch 1

[ Tratto da: “How to make money with FP”, by John Amstrong]

You can write program quicker:

First to market

Programs are shorter and with less errors

Reduced costs for maintainence

Why did Facebook bought WhatsApp for

$19 billions?

(10)

Elevator pitch 2

With only 55 engineers and more of a billion users, one WhatsApp developer supports ca 20 million active users, a ratio unheard of in the industry.

WhatsApp’s support team is even smaller

“This crew has built a reliable, low-latency service that processes 50 billion messages every day

across seven platforms using Erlang”

[a (concurrent) FP language]

(11)

IMP vs FP

Un programma imperativo consiste essenzialmente di una sequenza di comandi che assegnano variabili

meccanismi come jump, branching, sono astratti in for, while, switch etc

Vi sono altre astrazioni, come procedure, oggetti etc., ma alla fine si programma

modificando variabili in memoria

(12)

IMP: problemi

Visione esplicita della memoria (aliasing,

null pointers etc.) prona all'errore e ostacolo alla concorrenza

Ordine di esecuzione fisso (parallelismo?)

Poca astrazione (es aritmetica dei puntatori)

Semantica non sempre precisa: 191

comportamenti non definiti in C (stand c99)

Più difficile (ma fattibile) applicare tecniche

formali per la correttezza del software

(13)

FP 1

Modello di computazione: valutazione di espressioni, non esecuzione di comandi

Focus: costruire funzioni.

Il programmatore dichiara cosa (non come) fa il programma definendo una funzione che mappa input a output.

Si costruiscono funzioni complesse a

partire da più semplici componendole nel

senso matematico del termine

(14)

FP 2

Computazione è passare argomenti a funzioni (pure, se possibile)

Programmare è dichiarare tipi di dati (la cui rappresentazione è lasciata al compilatore) e delle funzioni che li manipolano

Invece di loop, funzioni ricorsive e higher order (map)

Nozione matematica di variabile

immutabile (referential transparency)

(15)

FP: tipicamente tipato

Tipo = insieme di valori + operazioni

int, list<T>, queue<T>

queue ops: enqueue, dequeue, is_empty …

Tipo è una “predizione” del valore che ha un'espressione (se converge)

Static vs. dynamic typing

Phase distinction

Errrori trovati a compile time

Type checking (tipi espliciti) vs. type

inference (tipi impliciti)

(16)

FP: vantaggi

Semantica precisa e semplice

Ordine flessibile di esecuzione

Le funzioni operano isolatamente

Parallelismo naturale

Ricchi meccanismi di astrazione

Valori non sono celle in memoria, ma

entità osservabili che includono anche first class funzioni, strutture infinite...

Garbage collection

Possibilità di sistemi di tipi avanzati

(17)

FP: svantaggi (?)

Minor controllo della CPU e della memoria:

Programmi occasionalmente poco efficienti

Uso non ottimale della memoria (raro in linguaggi strict come F#)

Certi programmi sono essenzialmente procedurali

Programmazione monadica per ciò

comunque posso parte imperativa di .NET

(18)

Perché F#

Sviluppato da Microsoft Research Cambridge, ma non proprietario

Grazie a Mono e .Net core, gira dappertutto (anche su Android)

Pienamente compatibile con .NET e i suoi linguaggi, in primis C#

Non è un linguaggio accademico, anzi è il competitor di Scala senza tradire FP

E' un linguaggio multi-paradigma, anche se

noi vederemo soprattutto il lato FP

(19)

Caratteristiche di F# (ML family)

Strongly-typed:

Tipi controllati ed inferiti staticamente

E' strict o call-by-value

Argomenti di una funzione valutati prima del corpo della funzione

Impuro: funzioni possono avere side effects

Modificare vars in memoria, I/O, etc.

Effetti usati sporadicamente e solo dove servono

(20)

Caratteristiche (cont.)

Polimorfismo: funzioni si applicano a valori di più tipi

Higher order: funzioni sono first-class e sono passate come ogni altro dato

Gestione automatica della memoria

ADT, eccezioni

Specifico di F#: workflows/monads (stile

Haskell) e oggetti (.NET)

(21)

Si, tutto bello, ma che mi serve?

"But let's be honest about this: you'll probably never see an employer advertising for someone with ML skills" A.

Webber, Modern programming languages, 2003

15 anni dopo: ICFP

In particolare: CUFP

Una lista di applicazioni industriali di F#

(22)

ICFP sponsors

(23)

non sono 640 ma ci sono aziende italiane che fanno FP:

Workinvoice

Unicredit

Sinapsi

Onebip

Credimi

E in Italia ?

(24)

Le basi del linguaggio

Seconda parte

Riferimenti

Documenti correlati

In the case of constant, linear, and bilinear bases, the OpenGL register combiners extension can be used to render illuminated models directly from the vector irradiance map,

Il vantaggio dell’astrazione basata sulle teorie è la possibilità di ragionare in modo forma- le sui programmi, così come si fa appunto sulle teorie in ambito matematico, evitando

The aim of this study was to evaluate whether modulation of endogenous heme may affect cyclooxygenase-2 expression and activity, taking advantage of two different approaches able

Con Bellosi si ritiene che siano le opere del percorso stilistico che si conclude circa nel 1459-1460 con la «Pietà» di Brera a por- si a monte della tavola Correr che è datata

l’informativa fornita dai bilanci di esercizio di qualsiasi compagnia assicurativa tenuta alla redazione secondo i principi contabili internazionali. Come risultato si ha che

In the litera- ture there are a number of works where knowledge incorporation has been used, for instance in the design of evolutionary operators [ 7 ], in the selection of

Virgilio, Svetonio, Servio erano autori ben conosciuti nel Medioevo e bisogna supporre che, come accadeva per altre città, i passi delle loro opere in cui si citava Capys

infl uence MNPs uptake by SH-SY5Y neuro- blastoma cells, a tumor cell line of neural crest cell origin and an accepted model of neuro- nal cell behavior. The study concluded that