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!