Linguaggi di Programmazione Avanzati
LinguaggidiProgrammazione
presentare alcune tecniche avanzate dei
moderni linguaggi di programmazione
Avanza1
comprenderle, ragionare e
possibilmente valutarle tecnologia
ComevalutareunLinguaggiodi
programmazione?
teoria
ComevalutareunLinguaggiodi
programmazione?
ComescegliereunLinguaggiodi
programmazione?
ComevalutareunLinguaggiodiprogrammazione?
sistemienormiscri?da
cen1naiadiprogrammatori
programmi
minuscoliscript
• 
• 
• 
efficienza
bilanciarelavelocità,latagliaelasemplicità,
chedipendonodall’archite1urasucuigirano,
chevadaimicrocontrolloriaisupercomputer
Alcunirimangonoinvaria1peranni,altriche
richiedonocon1nuemodifiche
programmatori
principian1chenecessitano
dilinguaggisemplici
ComescegliereunLinguaggiodiprogrammazione?
esper1chemaneggiano
linguaggicomplessieflessibili
Iprogrammatorihanno
ilorogus2!!
interoperabilità
retrocompa1bilità
portabilità
correBezza
produ?vità
espressività
…
canwesaywhatneedstobesaid,atan
appropriatelevelofabstrac5on?
703 linguaggi
secondo Wikipedia
Qualilinguaggidi
programmazioneesistono?
31Object-orientedprototype-basedlanguages
10Data-orientedlanguages
3Assemblylanguages
15Extensionlanguages
18Interac1vemodelanguages
38Synchronous
16Fourth-genera1onlanguages
2Aspect-orientedlanguages languages
20Itera1velanguages
30Object-oriented
21List-basedlanguages
class-basedlanguages
30.1Mul1pledispatch 8Curly-bracketlanguages 5Commandlineinterfacelanguages
24Machinelanguages
6Compiledlanguages
30.2Singledispatch
26Metaprogramminglanguages
27Mul1paradigmlanguages
23Logic-basedlanguages
12Declara1velanguages 13Embeddablelanguages
7Concurrentlanguages
9Dataflowlanguages 13.1insourcecode
22LiBlelanguages
13.1.1Serverside
28Numerical
35Rule-basedlanguages
13.1.2Clientside
analysis
1Arraylanguages 13.2Inobjectcode
33Procedurallanguages 19Interpretedlanguages
36Scrip1nglanguages
11Data-structuredlanguages
14Esotericlanguages
40Visuallanguages39Syntaxhandlinglanguages
32Off-siderulelanguages
34Reflec1velanguages
4Authoringlanguages
25Macrolanguages
41Wirthlanguages
37Stack-basedlanguages
42XML-basedlanguages
29Non-English-basedlanguages
17Func1onallanguages17.1Pure17.2Impure
Come fare ordine in questa
giungla?
Qual e’ il linguaggio di programmazione piu’ usato?
Comelomisuriamo?
•  blogs,librivendu1,wikis,
•  open-sourceprojects,propostedilavoro…
hBp://spectrum.ieee.org/compu1ng/sofware/
the-2016-top-programming-languages
..refinable…
TIOBE Index
CategoriediLinguaggidiprogrammazione
CategoriediLinguaggidiprogrammazione
Compila8
C/C++ - Cobol - C# - Go Java
ObjectiveC – Visualbasic - LaTex
ParadigmidiLinguaggidiprogrammazione
asetofinstruc8ons
tobeexecuted
Impera8vo
Interpreta8
Haskell - Lisp - Lua - Perl – Ruby JavaScript - PostScript - Python
descrivelacomputazioneinterminidi
comandichecambianolostatodiun
programma
asetofobjectsto
Funzionale
Puri:HaskellImpuri:Erlang, F# , Lisp, ML, Scala
bearranged
LinguaggidiScrip8ng
Pensa1perautoma1zzaretaskfrequen1
cheingenererichiedonodichiamareo
passareilcontrolloaprogrammiesterni
JavaScript - Perl - PHP - Python - Ruby – Lua
LinguaggiEmbeddable
pensa1perinserirepiccolipezzidicodice
eseguibileall’internodiform-testuali,
spessoinpagineweb
PHP – Perl - Javascript
OrientatoagliOggeE
DocumentLanguages
LaTeX – PostScript
MarkupLanguages
HTML – XML
Specifica8onLanguages
UML
asetofexpressions
tobeevaluated
struBurailprogrammainterminidi
ogge>eazionisuques5ogge>
asetofrules
tobeapplied
Dichiara8vo
esprimelalogicadellacomputazione
senzadescriverneilflussodicontrollo
SQL - Prolog
descrivelacomputazioneinterminidi
aggregazionidicomportamen2(funzioni),
asetofeventsto
behandled
evitandoilconceBodistatoeda1modificabili
Event-driven
ilflussodelprogrammaèdeterminatoda
even5e.g.outputdisensori,azionidell’utente
(clickdimouseotas1,loaddipaginaweb),
asetofmessagesto
inviodimessaggidaaltriprogrammiodaaltri
besentandreceived
thread
Concorrente
descriveflussiconcorren5dicomputazione
Ada - Java - Go - Scala - Erlang
ParadigmidiLinguaggidiprogrammazione
asetofinstruc8ons
tobeexecuted
Impera8vo
asetofexpressions
tobeevaluated
descrivelacomputazioneinterminidi
comandichecambianolostatodiun
programma
asetofobjectsto
Funzionale
Puri:HaskellImpuri:Erlang, F# , Lisp, ML, Scala
bearranged
descrivelacomputazioneinterminidi
aggregazionidicomportamen2(funzioni),
asetofeventsto
Mul8paradigma
OrientatoagliOggeE
behandled
evitandoilconceBodistatoeda1modificabili
Ada - C++ (impera1ve,OO)
struBurailprogrammainterminidi
C# Ruby Scala (func1onal,OO)
ogge>eazionisuques5ogge>
Python(func1onal,OO,impera1ve)
Event-driven
asetofrules
ilflussodelprogrammaèdeterminatoda
tobeapplied
even5e.g.outputdisensori,azionidell’utente
(clickdimouseotas1,loaddipaginaweb),
asetofmessagesto
inviodimessaggidaaltriprogrammiodaaltri
besentandreceived
Dichiara8vo
thread
esprimelalogicadellacomputazione
senzadescriverneilflussodicontrollo
Concorrente
SQL - Prolog
descriveflussiconcorren5dicomputazione
Ada - Java - Go - Scala - Erlang
Come fare ordine in questa
giungla?
Evoluzione
Storia temporale dei linguaggi di programmazione
programmingstyle
•  Collec8onsofprogrammingstylesasimportantascollec1onsof
datastructuresandalgorithms
•  Programsconveyinforma8onnotjusttothecomputerbut,more
importantly,tothepeoplewhoreadthem
•  Whatisbeingsaidisshapedandinfluencedbyhowisbeingsaid
TheProgrammingLanguagesTimeline
TheProgrammingLanguagesTimeline
OOPtohandleindustrial
complexsofwaresystems
Changesneedacatalyst…linearizeevolu8onaryleaps
Add
structure
tothecode
Encapsulation/Modularity
Interfaces/Code Reuse
lessEfficiency
morePortability
Security(Types)
GUIsandIDEs
…modernparadigms
Fortran
C++
Pascal C
Lisp
ML Haskell
Cobol
Go
Java JavaScript
C#
Ruby
Scala
X10
PHP
Python
INTERNET
CONCURRENCY
“OOPbecamethedominantparadigmwhentheindustry
wasdrivenbyrequirementstowritelargerandlarger
systemsandOOP’sstrengthsinabstrac8onand
dependencymanagementmadeitanecessityfor
achievinglarge-scalesofwaredevelopmentthatis
economical,reliable,andrepeatable”.[H.SuBer]
TheProgrammingLanguagesTimeline
Fortran
C++
Pascal C
Lisp
ML Haskell
Cobol
Java
JavaScript
PHP
Ruby
Python
INTERNET
Changesneedacatalyst
✤ 
newhardwarecanonlybeparallel
✤ 
newsofwaremustbeconcurrent
C#
Scala
Go
X10
Produc8vity
Typesare
burdensome
Changesneedacatalyst
HowhardisConcurrentProgramming?
Parallelismo:
eseguireprogrammi(anchesequenziali)piu`
velocementesuhardwareparallelo(e.g.simulazioni
numericheconmolteiterazionisumatricienormi)
CONCURRENCY
Concorrenza:
applicazioniintrinsecamenteconcorren1,che
richiedonodiges1reesplicitmenteflussi
concorren1
TheQuestforgoodAbstrac1ons
HowhardisConcurrentProgramming?
✤ 
✤ 
(correct)concurrentprogrammingisdifficult
nondeterminism
Addingconcurrencytosequen1alcodeis
evenharder
Accidentalreasons
improper
programmingmodel
✤ 
Thinkconcurrently
(ConcurrentAlgorithm)
Expressiveness
Performance
Easytothink
Easytoreasonabout
Intrinsicreasons
whichabstrac8ons
interoperate
produc8vely?
SharedMemory
data-centric
✤ 
Translateinto
aconcurrentcode
DESIGNofa
concurrent
language
Messagepassing
communica2on-centric
✤ 
High-level
Concurrency
Models/ Abstraction
GP-GPU
massivedata-parallelism
Reac1veProgramming
readilyresponsivetoas5mulus
•  reacttoevents
Fortran
C++
Pascal C
Lisp
ML Haskell
Cobol
Java
JavaScript
PHP
Ruby
Python
INTERNET
C#
Scala
Go
•  event-driven
X10
CONCURRENCY
DISTRIBUTION
Newcatalyst:
✤ 
mul1core—>concurrentprogramming
✤ 
cloudcompu8ng—>distributedprogramming
•  asynchronous
•  reactloload
•  scalability
•  up/down+/-CPUnodes
•  in/out+/-server
insteadofissuingacommandthat
asksforachange,reacttoan
eventthatindicatesthat
somethinghaschanged
!  futures,streams
!  pushdatatoconsumers
whenavailablerather
thanpolling
•  reacttofailures
•  resiliencytosbw/hdw/commfailuresas
partofthesystemdesign
BIGDATA
Fortran
C++
Pascal C
Lisp
ML Haskell
Cobol
Java
JavaScript
PHP
Ruby
Python
INTERNET
C#
Scala
Go
Comeporsi
difronteatuBoquesto?
X10
CONCURRENCY
DISTRIBUTION
Newcatalyst:
Newrequirementsdemand
newtechnologies
✤ 
mul1core—>concurrentprogramming
✤ 
cloudcompu1ng—>distributedprogramming
✤ 
bigdataapplica8on—>HighPerformanceCompu8ng
Cosafaremoin
questocorso?
Come%porsi%%
di%fronte%a%tu0o%questo?%
teoria
dinamica!
•
farsi la propria mappa
•
avere il proprio toolbox e aperto a nuovi
“thereisalsoarigorousscien5fictheoryofprogramming
languagesthatprovidesaframeworkforposing,and
some5mesanswering,suchques5ons.[…]
Programminglanguagetheoryliberatesusfromthetar
pitofpersonalopinion,andelevatesustothelevelof
respectablescien5ficdiscourse.”
dinamico
•
•
di linguaggi e
di strumenti di analisi
linguaggi
RobertHarper,
CMU,PrinciplesofProgramminglanguages
tecnologia
Cosafaremoinquestocorso?
teoria
1.  Minilinguaggiofunzionale
• 
–  Indicatodivoltainvolta…tes1eappun1miei
Seman1caesistemadi1piperragionaresullinguaggio
2.  Arricchiamoillinguaggio
• 
• 
•  Esame
Riferimen1,eccezioni
Subtyping,Polimorfismoparametrico,typeinference
3.  MinilinguaggioadoggeE:
seminari…asorpresa…
• 
• 
FeatherweightJava,inversionefunzionaleeinversioneimpera1va
AggiungiamoithreadaFeatherweightJava
4.  Scala:unmixefficacediparadigmafunzionaleeOO
• 
• 
• 
• 
Ascalablelanguage
Func1onsasobjects
Mixins
Actors
•  Materialedida?co
Java8
tecnologia
–  Esercizi
–  progeBo/approfondimento
•  Tesi!