Introduzione e programma del corso

Download Report

Transcript Introduzione e programma del corso

Linguaggi di Programmazione Avanzati
Linguaggi di Programmazione
presentare alcune tecniche avanzate dei
moderni linguaggi di programmazione
Avanzati
comprenderle, ragionare e
possibilmente valutarle
tecnologia
teoria
Come valutare un Linguaggio di programmazione?
Come valutare un Linguaggio di
programmi
programmazione?
minuscoli script
•
•
bilanciare la velocità, la taglia e la semplicità,
•
Alcuni rimangono invariati per anni, altri che
richiedono continue modifiche
che dipendono dall’architettura su cui girano,
che va dai microcontrollori ai supercomputer
programmatori
principianti che necessitano
di linguaggi semplici
sistemi enormi scritti da
centinaia di programmatori
esperti che maneggiano
linguaggi complessi e flessibili
I programmatori hanno
i loro gusti!!
Quali linguaggi di
programmazione esistono?
Categorie di Linguaggi di programmazione
31 Object-oriented prototype-based languages
10 Data-oriented languages
3 Assembly languages
15 Extension languages
18 Interactive mode languages
38 Synchronous
16 Fourth-generation languages
2 Aspect-oriented languages languages
20 Iterative languages
30 Object-oriented
21 List-based languages
class-based languages
8 Curly-bracket languages 5 Command line interface languages
30.1 Multiple dispatch
24 Machine languages
6 Compiled languages
30.2 Single dispatch
26 Metaprogramming languages
27 Multiparadigm languages
23 Logic-based languages
12 Declarative languages 13 Embeddable languages
7 Concurrent languages
9 Dataflow languages 13.1 in source code
22 Little languages
13.1.1 Server side
28 Numerical
35 Rule-based languages
13.1.2 Client side
analysis
1 Array languages
13.2 In object code
33 Procedural languages 19 Interpreted languages
36 Scripting languages
11 Data-structured languages
14 Esoteric languages
40 Visual languages 39 Syntax handling languages
32 Off-side rule languages
34 Reflective languages
4 Authoring languages
25 Macro languages
41 Wirth languages
37 Stack-based languages
42 XML-based languages
29 Non-English-based languages
17 Functional languages 17.1 Pure 17.2 Impure
Paradigmi di Linguaggi di programmazione
Imperativo
Compilati
C/C++ - Cobol - C# - Go Java
ObjectiveC – Visualbasic - LaTex
Interpretati
Haskell - Lisp - Lua - Perl – Ruby JavaScript - PostScript - Python
JavaScript - Perl - PHP - Python - Ruby – Lua
Funzionale
Puri: Haskell Impuri: Erlang, F# , Lisp, ML, Scala
descrive la computazione in termini di
aggregazioni
di comportamenti (funzioni),
OrientatoMultiparadigma
agli Oggetti
evitando il concetto di stato e dati modificabili
Ada - C++ (imperative, OO)
struttura il programma
C#in termini
Ruby diScala (functional, OO)
oggetti e azioni su questi
oggetti
Event-driven
Python (functional, OO, imperative)
Linguaggi di Scripting
Pensati per automatizzare task frequenti
che in genere richiedono di chiamare o
passare il controllo a programmi esterni
descrive la computazione in termini di
comandi che cambiano lo stato di un
programma
Linguaggi Embeddable
pensati per inserire piccoli pezzi di codice
eseguibile all’interno di form-testuali,
spesso in pagine web
PHP – Perl - Javascript
Dichiarativo
esprime la logica della computazione
senza descriverne il flusso di controllo
SQL - Prolog
il flusso del programma è determinato da
eventi e.g. output di sensori, azioni dell’utente (click di mouse o tasti, load di pagina web),
invio di messaggi da altri programmi o da altri
thread
Concorrente
descrive flussi concorrenti di computazione
Ada - Java - Go - Scala - Erlang
Tre classi di linguaggi,
con tre diversi punti di forza
Che linguaggi avete USATO?
Python
• come li classifichereste?
Java
• erano adatti al contesto d’uso?
C / C++
Tre classi di linguaggi,
con tre diversi punti di forza
Python
Tre classi di linguaggi,
con tre diversi punti di forza
• Platform-independent:
• Compilato in bytecode, che un
Python
tempo era interpretato
• Compilato
• Ottime performance, ma features (API)
relativamente scarse
• AdattoJava
a progetti di taglia media o ad alte
performance
• Ora JIT compila in codice nativo
con ottimizzazioni (HotSpot)
Java
• Typing statico:
• le info di tipo rendono il codice
verboso,
• ma permette di trovare errori
compile-time
• Facilita il refactoring e le
C / C++
ottimizzazioni JIT
C / C++
• Adatto a progetti grandi o complessi,
progetti in team
Tre classi di linguaggi,
con tre diversi punti di forza
Python
• Typing dinamico
• Interpretato e con poca possibilità di JIT e
ottimizzazioni
• performance basse ma molta flessibilità
• Ampie features
Java
• Adatto a progetti piccoli, dove si esalta la
brevità/semplicità di codice, rapid prototyping
C / C++
Tre classi di linguaggi,
con tre diversi punti di forza
Python
High-level
language
Java
C / C++
http://lang-index.sourceforge.net/
Quanto sono usati questi
linguaggi?
Come lo misuriamo?
blogs, libri venduti, wikis,
open-source projects, proposte di lavoro… The Quest for good Abstractions
OOP to handle industrial
complex software systems
Encapsulation/Modularity
Interfaces/Code Reuse
Add
structure
to the code
… modern paradigms
Fortran
Pascal C
Lisp
ML
Cobol
less Efficiency
more Portability
Security (Types)
GUIs and IDEs
C++
Haskell
Java
JavaScript
Ruby
Python
PHP
INTERNET
The Quest for good Abstractions
Fortran
Pascal C
Lisp
ML
Cobol
C++
Haskell
JavaScript
Java
PHP
INTERNET
✤
Changes need a catalyst
✤
✤
Go
C#
Ruby
Python
new hardware can only be parallel
new software must be concurrent
Scala
X10
Productivity
Types are
burdensome
Go
C#
Scala
X10
CONCURRENCY
✤
When a language has been invented VS when became popular?
✤
Why has been invented VS why became popular?
How hard is Concurrent Programming?
Parallelismo:
eseguire programmi (anche sequenziali) piu`
velocemente su hardware parallelo (e.g. simulazioni
numeriche con molte iterazioni su matrici enormi)
CONCURRENCY
Concorrenza:
applicazioni intrinsecamente concorrenti, che
richiedono di gestire esplicitmente flussi
concorrenti
How hard is Concurrent Programming?
✤
(correct) concurrent programming is difficult
✤
Adding concurrency to sequential code is
even harder
The Quest for good Abstractions
nondeterminism
Accidental reasons
improper
programming model
Expressiveness
Performance
Easy to think
Easy to reason about
Intrinsic reasons
✤
OOP
encapsulation
memory management
✤ multiple inheritance
C++ —> Java —> Scala
✤
✤
✤
Think concurrently
(Concurrent Algorithm)
Translate into
a concurrent code
✤
DESIGN of a
concurrent
language
✤
documentation vs verbosity
C++ —> Java —> Ruby —>Scala
Functional Programming
✤
High-level
Concurrency
Models/ Abstraction
Types
✤
composing and passing behaviours
sometimes imperative style is easier to reason about
C#—> Scala C++11, Java8
The Quest for good Abstractions
Easy to think
Easy to reason about
✤
Expressiveness
Performance
Fortran
Pascal C
Lisp
ML
Cobol
OOP
which abstractions
interoperate
productively?
Functional Programming
JavaScript
Java
PHP
✤
Go
C#
Ruby
Python
INTERNET
Types
Scala
X10
CONCURRENCY
DISTRIBUTION
✤
✤
C++
Haskell
New catalyst:
✤
multicore —> concurrent programming
✤
cloud computing —> distributed programming
Reactive Programming
BIG DATA
readily responsive to a stimulus
• react to events
• event - driven
• asynchronous
instead of issuing a command that
asks for a change, react to an
event that indicates that
something has changed
• react lo load
• scalability
• up/down +/- CPU nodes
• in/out +/- server
Fortran
Pascal C
Lisp
ML
Cobol
C++
Haskell
Go
C#
Scala
Ruby
Python
X10
CONCURRENCY
DISTRIBUTION
push data to consumers
when available rather
than polling
PHP
INTERNET
futures
JavaScript
Java
✤
• react to failures
• resiliency to sftw/hdw/comm failures
as part of the system design
New catalyst:
✤
multicore —> concurrent programming
✤
cloud computing —> distributed programming
✤
big data application —> High Performance Computing
Quale linguaggio usare / imparare?
Innovative internet-driven companies
(Google, Twitter, Linkedin,…)
use a mix of languages
Cosa faremo in questo corso?
•
•
•
•
Imperativo –OO
Funzionale
Scripting
Concorrente
C/C++, Java, C#, Scala
Haskell, Erlang, F#, Scala
Python, JavaScript, Scala
Java, Scala, X10
• HPC – ancora non maturo e molto in evoluzione
• GPGPU
• Reactive Programming
Cosa faremo in questo corso?
Cosa faremo in questo corso?
teoria
1. Mini linguaggio funzionale
•
Semantica e sistema di tipi per ragionare sul linguaggio
2. Arricchiamo il linguaggio
•
•
programming style
• Collections of programming styles as important as collections of
data structures and algorithms
• Programs convey information not just to the computer but, more
importantly, to the people who read them
Riferimenti, eccezioni
Subtyping, Polimorfismo parametrico, type inference
3. Mini linguaggio ad oggetti:
•
•
Featherweight Java, in versione funzionale e in versione imperativa
Aggiungiamo i thread a Featherweight Java
4. Scala: un mix efficace di paradigma funzionale e OO
•
•
•
•
A scalable language
Functions as objects
Mixins
Actors
• What is being said is shaped and influenced by how is being said
tecnologia
Cosa faremo in questo corso?
• Materiale didattico
– Indicato di volta in volta…testi e appunti miei
• Esame
–?
– Esercizi durante/alla fine del corso
– progetto/orale
• Tesi!
teoria
1. Mini linguaggio funzionale
•
Semantica e sistema di tipi per ragionare sul linguaggio
2. Arricchiamo il linguaggio
•
•
Riferimenti, eccezioni
Subtyping, Polimorfismo parametrico, type inference
3. Mini linguaggio ad oggetti:
•
•
Featherweight Java, in versione funzionale e in versione imperativa
Aggiungiamo i thread a Featherweight Java
4. Scala: un mix efficace di paradigma funzionale e OO
•
•
•
•
A scalable language
Functions as objects
Mixins
Actors
tecnologia
Choose a language!
Term frequency program:
given a text file, print the 25 most frequent words and
corresponding frequencies ordered by decreasing value of
frequency.
– normalize for capitalization and ignore stop words like
“the”, “for”,…
www.math.unipd.it/~crafa/la/ES