Fondamenti dei linguaggi di programmazione

Похожие документы
LINGUAGGI DI ALTO LIVELLO. Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware

LINGUAGGI DI ALTO LIVELLO

TEORIE E TECNICHE PER LA COMUNICAZIONE DIGITALE

Linguaggi di programmazione e astrazione

Il linguaggio di programmazione Python

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Introduzione alla programmazione. Walter Didimo

Logica per la Programmazione Corso di Laurea in INFORMATICA a.a. 2016/2017

FONDAMENTI DI INFORMATICA

Corso di Applicazioni di Intelligenza Artificiale LS. Prof. Paola Mello Anno accademico 2008/2009

Linguaggi di alto livello, compilatori e interpreti

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Programmazione C Massimo Callisto De Donato

Linguaggi di Programmazione

Introduzione alla Programmazione. Giselda De Vita

Docente: Prof. Marco Patella Tutor: Vincenzo Lomonaco

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

Le aree dell informatica

Che cos e l Informatica. Informatica generale. Caratteristiche fondamentali degli algoritmi. Esempi di algoritmi. Introduzione

REGISTRI D'ESAME CODICE ESAME CORSO DI LAUREA NOME DEL CORSO LAUREA CFU

1: Linguaggi di Programmazione

Algoritmi e Linguaggi

Il Concetto Intuitivo di Calcolatore. Esercizio. I Problemi e la loro Soluzione. (esempio)

Linguaggi di programmazione

Introduzione a Java. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi132 Sesto San Giovanni

Il calcolatore. Architettura di un calcolatore (Hardware)

INTELLIGENZA ARTIFICIALE (elementi) 6 cfu

Algoritmi e Strutture Dati

Corso di Laurea in Informatica Basi di Dati a.a

Introduzione al Calcolo Scientifico

Fondamenti di Programmazione

UNIVERSITA DEGLI STUDI DI MILANO-BICOCCA FACOLTA DI SCIENZE MATEMATICHE, FISICHE E NATURALI

32 Laurea magistrale in Informatica Scienze

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

Cosa è l Informatica?

Concetti Introduttivi. Il Computer

Simulazione. D.E.I.S. Università di Bologna DEISNet

Corso Programmazione

Corso di. Fondamenti di Informatica T

algoritmi e strutture di dati

Introduzione. Fondamenti di Informatica 1. Dispensa 1 Gennaio Contenuti. Alfonso Miola. K Corso di Fondamenti di Informatica 1

Fondamenti di Programmazione

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

FONDAMENTI DI INTELLIGENZA ARTIFICIALE-M

Corso di Laurea Ingegneria Informatica Laboratorio di Informatica

orario ricevimento via orario ufficio risposta entro 3 giorni

Corso di Fondamenti di Informatica e Laboratorio T-AB

Le parole dell informatica: algoritmo e decidibilità

Programmazione di INFORMATICA e Laboratorio

CORSO DI LAUREA MAGISTRALE IN INFORMATICA

PROBLEMI ALGORITMI E PROGRAMMAZIONE

Elementi di Informatica e Programmazione

FONDAMENTI DI INFORMATICA II

Prof. Massimo Esposito INGEGNERIA MECCANICA (DI-M) UNIVERSITÀ DEGLI STUDI DI NAPOLI FEDERICO II FACOLTÀ DI INGEGNERIA

Elementi di Informatica e Programmazione

Algoritmi e Strutture Dati

I Nuovi Corsi di Laurea in Informatica. La laurea triennale (classe L-31) L

Programmazione Dichiarativa. Programmazione Logica. SICStus PROLOG PROLOG. Bob Kowalski: "Algoritmo = Logica + Controllo"

MANIFESTO DEGLI STUDI DEL CORSO DI LAUREA IN INFORMATICA (CREMA)

Materiale didattico. Sommario

LABORATORI DI CULTURA DIGITALE: INFORMATICA, INTERNET E ROBOTICA

Una Breve Introduzione alla Logica

Linguaggi di programmazione

INFORMATICA PER LE SCIENZE UMANE a.a. 2015/2016

Algoritmi e Strutture dati a.a. 2013/2014

Транскрипт:

Fondamenti dei linguaggi di programmazione Aniello Murano Università degli Studi di Napoli Federico II 1 Informazioni Generali sul Corso Esame: Fondamenti dei linguaggi di programmazione (nel vecchio ordinamento: Semantica dei linguaggi) Libri di testo: Glynn Winskel La semantica Formale dei Linguaggi di Programmazione the MIT Press, 1993. Traduzione italiana a cura di Franco Turini Approfondimenti: John C. Mitchell, "Foundations for Programming Languages", MIT Press, 1996. Benjamin Pierce. Types and Programming Languages, MIT Press, 2002. Robin Milner, Communication and Concurrency, Prentice Hall, 1989 Modalità d esame: Una prova scritta seguita da una prova orale. Orario lezioni: Lunedì 11:00 13:00 e Giovedì 16:30 18:30, aula B7 2 1

Informazioni sul Docente Prof. Dr. Aniello Murano, ricercatore universitario presso la Sezione di Informatica del Dipartimento di Fisica Università degli Studi di Napoli, Federico II Sito web: http://people.na.infn.it/~murano/ Ricevimento: Fino al 28 Ottobre, Venerdì 14:00-16:00, 2Ma10 E-mail: murano@na.infn.it (da usarsi solo in casi di effettiva necessità) Altre informazioni sul docente: Laurea in Scienze dell informazione e Dottorato di ricerca in Informatica presso l Università degli Studi di Salerno. Visiting Student per un anno presso la Rice Univeristy di Houston(Texas - USA). Post-doc per un anno presso la Hebrew University di Gerusalemme (Israele) Altri insegnamenti: Lab. di ASD - Corso di Laurea in Informatica, Facolta di Scienze MM.FF.NN. - Università di Napoli Federico II. Interessi di ricerca: Teoria degli Automi e dei Linguaggi Formali. Logiche Temporali discrete e real-time, Metodi Formali per la Specifica, la Verifica e la Sintesi di sistemi hardware e software, Model Checking, Teoria dei Giochi. 3 Obiettivi del Corso L obiettivo del corso è quello di fornire i modelli formali necessari per capire il comportamento di un programma e ragionare su di esso. Vengono dunque presentate le nozioni matematiche, le tecniche ed i concetti sui quali si fonda la semantica formale dei linguaggi di programmazione. 4 2

Che cosa questo corso non è Un corso su un particolare linguaggio di programmazione Un corso sulla costruzione di un particolare compilatore o sulla costruzione di un parser Si presuppone la conoscenza da parte degli studenti del concetto di grammatiche Un corso per confrontare i vari linguaggi di programmazione Un corso sui vari paradigmi di programmazione (funzionali, orientati agli oggetti, logici, concorrenti, ecc.) 5 Programma del corso (unofficial) Semantica operazionale del linguaggio imperativo IMP (Cap. II, pag 15-32) ; Induzione ben fondata (Cap. III-IV, pag 33-60); Ordinamenti parziali completi, funzioni continue e teorema di punto fisso (Cap. V, pag 79-83); Semantica denotazionale del linguaggio imperativo IMP e corrispondenza con la semantica operazionale (Cap. V, pag 65-78); Linguaggi con tipi di ordine superiore: tipizzazione, semantica operazionale eager e lazy, semantica denotazionale lazy (Cap.XI, pag 201-209 e pag. 219-222); Nondeterminismo e parallelismo: i linguaggio CSP e CCS (Cap. XIV, pag 321-341); Nozioni di equivalenza per CCS: definizione di LTS (Labelled Transition System), equivalenza a tracce, simulazione, bisimulazione (forte e debole). 6 3

Prerequisiti al corso Background in linguaggi di programmazione Esperienza di programmazione in differenti linguaggi di programmazione (per esempio C, Java, Lisp, Prolog, ect.) Background in logica matematica Abilità nello scrivere e leggere prove formali (per esempio, dimostrazioni per induzione) Una certa predisposizione ai ragionamenti formali. 7 Lo stato dell arte Quello dei linguaggi di programmazione è senza dubbio uno dei campi più vecchi, fondamentali e ferventi dell informatica Ancora oggi, i linguaggi di programmazione sono in continua evoluzione I linguaggi di programmazione sono solitamente adottati per riempire dei vuoti: Per implementare un applicazione che prima era difficile o impossibile da implementare Per eseguire programmi su una nuova piattaforma Istruire nuovi programmatori comporta costi notevoli I linguaggi più largamente utilizzati sono raramente sostituiti I linguaggi più popolari con il passare del tempo si arrugginiscono Al contrario, nuove applicazioni e nuove piattaforme rappresentano interessanti opportunità per innovazioni. 8 4

Perché ci sono così tanti linguaggi Molti linguaggi furono costruiti per specifiche applicazioni I domini di applicazione hanno solitamente bisogni differenti (e conflittuali) Per esempio: Intelligenza Artificiale: computazione simbolica (Lisp, Prolog) Computazione Scientifica: grande performance (Fortran) Computazione Commerciale: generazione di report (Cobol) Programmazione di Sistemi: accesso a basso livello (C) Castomizzazione: scripting (Perl, Javascript) Sistemi distribuiti: computazione mobile (Java, C++) e altri (Latex, AWK, Q, Hancock, ) 9 Paradigmi di Programmazione Imperativo, procedurale Fortran, Algol, Cobol, C, Pascal Funzionali (principalmente liberi da assegnamento) Lisp, Skeme, ML, Haskell Orientato agli oggetti C++, Java, Visual Basic, Simula, Smalltalk, Eiffel, Self Logici Prolog, lambda-prolog Concorrenti Fortran90 10 5

Cosa rende efficiente un linguaggio? Una definizione sulla misura della scienza di Lord Kelvin (1824-1907): quando puoi misurare ciò di cui stai parlando e lo puoi esprimere in numeri, tu conosci qualcosa di ciò, ma quando non puoi esprimerlo in numeri, la tua conoscenza è povera e insoddisfacente; quello potrebbe essere l inizio della conoscenza, ma si è lontani dall aver elevato quel concetto allo stadio della scienza. Semplicità (nella sintassi e nella semantica) Facilità di lettura e scrittura Familiarità Sicurezza Indipendenza dalla macchina Efficienza (di compilazione ed esecuzione) 11 Efficienza di un linguaggio Spesso, gli obiettivi precedenti sono in conflitto tra di loro: I controlli di sicurezza costano in termini di tempo di compilazione o esecuzione Sicurezza e indipendenza dalla macchina potrebbero vietare operazioni efficienti di basso livello. Alcuni tipi di sistema possono restringere lo stile di programmazione negli scambi di informazione per rafforzare le garanzie di sicurezza Solitamente i compromessi sono difficili da trovare Dunque, progettare un buon linguaggio di programmazione è davvero difficile! 12 6

Valutare le caratteristiche di un linguaggio Un concetto o un costrutto di un linguaggio può essere studiato nel contesto di un reale e quindi di un grande linguaggio. Spesso però è più semplice studiare una caratteristiche di un linguaggio studiando un linguaggio minimo che ingloba quella caratteristica. Questo permette Una Sperimentazione semplificata dell intero linguaggio Una più profonda e precisa comprensione delle caratteristiche del linguaggio 13 Un approccio formale di Specifica Un approccio formale nella progettazione di un linguaggio consiste nella sua definizione rigorosa tramite una sintassi e una semantica Esistono tre approcci alla semantica dei linguaggi: Semantica operazionale Definisce la machina astratta che interpreta i programmi Utile per implementare un compilatore o un interprete Di basso livello, ma flessibile Semantica Denotazionale Assegna denotazioni, o significati, ai programmi Usa oggetti matematici per descriver i comportamento dell input e dell output Semantica assiomatica Usa regole logiche per ragionare sul comportamento dei programmi Dato un programma, degli stati iniziali e dei dati di input, fornisce l insieme degli stati finali raggiungibili dopo l esecuzione Utile per provare la correttezza di un programma 14 7

Break Time 15 Un semplice linguaggio di Espressioni Aritmetiche Sintassi e Semantica operazionale 16 8

Sintassi di ARITHM Sintassi concreta: Le regole che permettono di esprimere i programmi come stringhe di caratteri Utile per gli obiettivi di progettazione Familiarità, leggibilità, velocità di compilazione Gli stessi concetti possono essere espressi in molte sintassi concrete, non tutte ugualmente efficienti Esistono comunque solidi principi per le sintassi concrete Automi finiti e grammatiche context-free Generatori di parser automatici 17 Sintassi astratta Noi definiamo la sintassi del linguaggio ARITH rispetto ad un albero di sintassi astratto (parse tree). L albero di sintassi astratto è indipendente dalla sintassi concreta del linguaggio e meglio si adatta a manipolazioni formali e algoritmiche Una sintassi astrata per ARITH è e::=n dove n è un letterale intero (n {0,1,2,..}) e 1 + e 2 somma e 1 * e 2 moltiplicazione Dove ::= significa può essere e significa oppure 18 9

Analisi di ARITHM Questioni da risolvere: Qual è il significato di una data espressione di ARITH? Come valutare una data espressione di ARITH? Come sono collegati valutatore e significato di una espressione? 19 Una semantica Operazionale Specifica come le espressioni dovrebbero essere valutate È definita in base alla particolare forma dell espressione valutata: n si valuta n n è una forma normale e non necessita di essere valutata ulteriormente e 1 + e 2 si valuta n se e 1 si valuta n 1 e 2 si valuta n 2 ed n è la somma di n 1 e n 2 e 1 * e 2 si valuta n se e 1 si valuta n 1 e 2 si valuta n 2 ed n è il prodotto di n 1 e n 2 20 10

Formulazione Alternativa Notazione: e n significa che e si valuta in n Questa è una valutazione, un affermazione sulla relazione tra e ed n. Questa notazione permette di riscrivere le regole precedenti in modo più conciso n n e 1 + e 2 n se e 1 n 1 e 2 n 2 ed n è la somma di n 1 ed n 2 e 1 * e 2 n se e 1 n 1 e 2 n 2 ed n è il prodotto di n 1 ed n 2 21 Semantica operazionale come regole di inferenza n n e 1 n 1 e 2 n 2 n è la somma di n 1 e n 2 e 1 + e 2 n e 1 n 1 e 2 n 2 n è il prodotto di n 1 e n 2 e 1 * e 2 n Interpretazione: sopra la linea implica sotto la linea 22 11

(3+5)*(4+2) in cosa si valuta? Esercizio 23 12