1 Linguaggi: guardando la semantica §esistono un insieme di concetti semantici e di strutture di implementazione in termini dei quali si descrivono in.

Slides:



Advertisements
Presentazioni simili
Linguaggio C e C++.
Advertisements

I Linguaggi di programmazione
Traduzione ed Interpretazione
Software di base: Linguaggi di Programmazione
Evoluzione dei linguaggi di programmazione
I linguaggi di programmazione
Definizione e tipi di implementazione
Linguaggi di programmazione
Massa Laura Mela Enrica
Programmazione II Docente: Francesca Levi
Metodologie di Programmazione = decomposizione basata su astrazioni
Generalità Linguaggio e Macchina Astratta
1 Strutture dati nel supporto a run time. 2 Entità presenti quando un programma va in esecuzione §programmi dutente (compilati) §routines del supporto.
Corso di Laurea in Informatica Gabriella Pasi e Carla Simone
Introduzione alla programmazione
Anno Accademico Corso di Informatica Informatica per Scienze Biologiche e Biotecnologie Anno Accademico
Sistemi basati su conoscenza (agenti intelligenti) Prof. M.T. PAZIENZA a.a
Maria Teresa PAZIENZA a.a
Università degli Studi di Bergamo Facoltà di Lingue e Letterature Straniere Facoltà di Lettere e Filosofia A.A Informatica generale 1 Appunti.
Introduzione al linguaggio C++ 5 lezioni
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Funzioni, Rappresentazioni e Coscienza
Gestione di Progetti Software 2 (A.A. 2004/2005) - Lezione 2 1 JAVA: obiettivi di progetto del linguaggio Nota storica: Il linguaggio JAVA (inizialmente.
Struttura dei sistemi operativi (panoramica)
Linguaggi di Programmazione 1 docente: Maurizio Tucci Lezione 0.1 Concetti di Base.
CAPITOLO 2 INTRODUZIONE AL LINGUAGGIO JAVA E ALL'AMBIENTE HOTJAVA.
Primi Elementi di Programmazione in C++
Fondamenti di Informatica1 Linguaggi Classificati rispetto alle caratteristiche principali: –potere espressivo che influenza lo stile di programmazione.
A.Natali DL Maggio1999 Oggetti Concetti fondamentali.
AN FI Un denominatoe comune Comandi u notazioni che esprimono azioni che, una volta eseguite, comportano una modifica permanente dello stato interno.
INSIEMI NUMERABILI L’analisi matematica introduce il concetto di insieme numerabile come insieme i cui elementi possono essere “contati” ossia che possiede.
LINGUAGGI DI PROGRAMMAZIONE
AN FI Un denominatoe comune Linguaggi di programmazione Un denominatore comune.
AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali.
Dall’algoritmo al programma.
...dal bit al linguaggio R. In principio era il bit… …Per intenderci 0 e 1, il linguaggio macchina. Tra gli anni '40 e gli anni '50, la programmazione.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Introduzione a C#.
Java Contardi Carlo A.S. 2008/09.
Lezione 1 Linguaggi di programmazione – Algoritmi –Istruzioni
Introduzione alla programmazione Object Oriented
Macchine astratte, linguaggi, interpretazione, compilazione
Implementazione di un linguaggio ad alto livello (con riferimento a Java)
CONCETTI DI BASE 1.0 FONDAMENTI 1.1 HARDWARE 1.2 SOFTWARE 1.3 RETI
Linguaggi per COMUNICARE
1 Tecniche per il passaggio dei parametri. 2 Contenuti ¥la tecnica base (nei vari paradigmi) ¥ passaggio per costante, per riferimento, di funzioni, procedure.
la traduzione dei programmi
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
LINGUAGGI DI PROGRAMMAZIONE Per comunicare comandi e dati ad un computer occorre un particolare linguaggio detto LINGUAGGIO MACCHINA, che è un insieme.
1 Interpretazione astratta: un approccio sistematico all’analisi statica.
Linguaggi di Programmazione
Programmazione Attività di progettazione ed implementazione di programmi I programmi permettono di realizzare funzioni complesse su un hardware in grado.
Sistemi basati su conoscenza (agenti intelligenti) Prof. M.T. PAZIENZA a.a
Elementi di semantica denotazionale ed operazionale
Concetti Fondamentali sulla Programmazione
AOT Lab Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma Intelligenza Artificiale Rappresentazione della Conoscenza e Ragionamento.
1 Macchine astratte, linguaggi, interpretazione, compilazione.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
1 Metodologie di Programmazione §tecniche per la programmazione orientata ad oggetti §esemplificate utilizzando il linguaggio Java §testo di riferimento.
INTELLIGENZA ARTIFICIALE
Intelligenza Artificiale Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
1 Tipi di dato modificabili §a livello semantico, riconduciamo la modificabilità alla nozione di variabile l lo stato “modificabile” corrispondente sarà.
I linguaggi di programmazione -GALBIATI ALBERTO -ESPOSITO MATTIA.
LINGUAGGI DI PROGRAMMAZIONE E' un linguaggio formale dotato di una sintassi ben definita che viene utilizzato per scrivere programmi che realizzano algoritmi.
Unità di apprendimento 6
ALGORITMI, LINGUAGGI E PROGRAMMI Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
Introduzione alle Classi e agli Oggetti in Java 1.
Linguaggi: guardando la semantica
Transcript della presentazione:

1 Linguaggi: guardando la semantica §esistono un insieme di concetti semantici e di strutture di implementazione in termini dei quali si descrivono in modo naturale linguaggi diversi e loro implementazioni l ed esiste una chiara relazione tra concetti semantici e strutture di implementazione §tali concetti e strutture mettono in evidenza ciò che è comune ai vari linguaggi e possono essere trattati a prescindere dal particolare linguaggio

2 La semantica è utile §conoscere questi concetti di semantica e di tecniche di implementazione consente di l migliorare la conoscenza del linguaggio che usate comunemente perché quel meccanismo non è fornito o è particolarmente costoso? l migliorare il vostro “vocabolario di costrutti” un costrutto che ci sarebbe utile, ma non viene fornito dal linguaggio, può spesso essere simulato l imparare agevolmente un nuovo linguaggio l scegliere il linguaggio più adatto alle vostre esigenze o almeno avere argomenti tecnici per discutere con il capo che vi vuol fare programmare in COBOL! l progettare un nuovo linguaggio o estenderne uno esistente capita più spesso di quanto possiate immaginare!

3 Linguaggi di programmazione e astrazione §i linguaggi di programmazione ad alto livello moderni sono il più potente strumento di astrazione messo a disposizione dei programmatori l che possono, con un solo costrutto del linguaggio, “rappresentare” un numero (anche infinito) di interminabili sequenze di istruzioni macchina corrispondenti §i linguaggi si sono evoluti trasformando in costrutti linguistici (e realizzando una volta per tutte nell’implementazione del linguaggio) l tecniche e metodologie sviluppate nell’ambito della programmazione, degli algoritmi, dell’ingegneria del software e dei sistemi operativi in certi casi perfino in settori di applicazioni (basi di dati, intelligenza artificiale, simulazione, etc.) §di fondamentale importanza è stata l’introduzione nei linguaggi di vari meccanismi di astrazione, che permettono di l estendere il linguaggio (con nuove operazioni, nuovi tipi di dato, etc.) semplicemente scrivendo dei programmi nel linguaggio stesso

4 Un po’ di storia §i linguaggi di programmazione nascono con la macchina di Von Neumann (macchina a programma memorizzato) l i programmi sono un particolare tipo di dato rappresentato nella memoria della macchina l la macchina possiede un interprete capace di fare eseguire il programma memorizzato, e quindi di implementare un qualunque algoritmo descrivibile nel “linguaggio macchina” l un qualunque linguaggio macchina dotato di semplici operazioni primitive per effettuare la scelta e per iterare (o simili) è Turing-equivalente, cioè può descrivere tutti gli algoritmi §i linguaggi hanno tutti lo stesso potere espressivo, ma la caratteristica distintiva importante è il “quanto costa esprimere” l direttamente legato al “livello di astrazione” fornito dal linguaggio

5 I linguaggi macchina ad alto livello §dai linguaggi macchina ai linguaggi Assembler l nomi simbolici per operazioni e dati §(anni 50) FORTRAN e COBOL (sempreverdi) l notazioni ad alto livello orientate rispettivamente al calcolo scientifico (numerico) ed alla gestione dati (anche su memoria secondaria) l astrazione procedurale (sottoprogrammi, ma con caratteristiche molto simili ai costrutti forniti dai linguaggi macchina) l nuove operazioni e strutture dati (per esempio, gli arrays in FORTRAN, e i records in COBOL) l nulla di significativamente diverso dai linguaggi macchina

6 I favolosi anni ’60: LISP e ALGOL’60 §risultati teorici a monte l formalizzazione degli aspetti sintattici primi risultati semantici basati sul -calcolo §caratteristiche comuni l introduzione dell’ambiente l vera astrazione procedurale con ricorsione l argomenti procedurali e per nome §ALGOL’60 l primo linguaggio imperativo veramente ad alto livello l scoping statico l gestione dinamica della memoria a stack §LISP (sempreverde, ancora oggi il linguaggio dell’A.I.) primo linguaggio funzionale, direttamente ispirato al -calcolo l scoping dinamico l strutture dati dinamiche, gestione dinamica della memoria a heap con garbage collector

7 Estendere la macchina fisica o implementare una logica §ALGOL’60, prototipo dei linguaggi imperativi l parte dalla struttura della macchina fisica l la estende con nuovi potenti meccanismi §LISP, prototipo dei linguaggi logici e funzionali parte da un calcolo logico ( -calcolo) l ne definisce una implementazione sulla macchina fisica §ne nascono concetti simili l non a caso basati sulla teoria §gli approcci restano diversi e danno origine a due filoni l il filone imperativo l il filone logico che sono tuttora vitali

8 La fine degli anni ’60 §PL/I: il primo tentativo di linguaggio “totalitario” (targato IBM) l tentativo di sintesi fra LISP, ALGOL’60 e COBOL fallito per mancanza di una visione semantica unitaria §SIMULA’67: nasce la classe l estensione di ALGOL’60 orientato alla simulazione discreta l quasi sconosciuto, riscoperto 15 anni dopo

9 Evoluzione del filone imperativo §risultati anni ’70 l metodologie di programmazione, tipi di dati astratti, modularità, classi e oggetti l programmazione di sistema in linguaggi ad alto livello: eccezioni e concorrenza §PASCAL l estensione di ALGOL’60 con la definizione di tipi (non astratti), l’uso esplicito di puntatori e la gestione dinamica della memoria a heap (senza garbage collector) l semplice implementazione mista facilmente portabile

10 Il dopo PASCAL §C§C l PASCAL + moduli + tipi astratti + eccezioni + semplice interfaccia per interagire con il sistema operativo §ADA: il secondo tentativo di linguaggio “totalitario” (targato Dipartimento della Difesa U.S.A.) l come sopra + concorrenza + costrutti per la programmazione in tempo reale l progetto ambizioso, anche dal punto di vista semantico, con una grande enfasi sulla semantica statica (proprietà verificabili dal compilatore) §C ++ l C + classi e oggetti (allocati sulla heap, ancora senza garbage collector)

11 L’evoluzione del filone logico: programmazione logica §PROLOG l implementazione di un frammento del calcolo dei predicati del primo ordine l strutture dati molto flessibili (termini) con calcolo effettuato dall’algoritmo di unificazione l computazioni non-deterministiche l gestione della memoria a heap con garbage collector §CLP (Constraint Logic Programming) l PROLOG + calcolo su domini diversi (anche numerici) con opportuni algoritmi di soluzione di vincoli

12 L’evoluzione del filone logico: programmazione funzionale §ML implementazione del -calcolo tipato l definizione di nuovi tipi ricorsivi l i valori dei nuovi tipi sono termini, che possono essere visitati con un meccanismo di pattern matching (versione semplificata dell’unificazione) l scoping statico (a differenza di LISP) l semantica statica molto potente (inferenza e controllo dei tipi) un programma “corretto” per la semantica statica quasi sempre va bene l gestione della memoria a heap con garbage collector §HASKELL l ML con regola di valutazione “lazy”

13 JAVA §molte caratteristche dal filone imperativo l essenzialmente tutte quelle del linguaggio più avanzato del filone, cioè C ++ §alcune caratteristiche dei linguaggi del filone logico l gestione della memoria con garbage collector §utilizza il meccanismo delle classi e dell’ereditarietà per ridurre il numero di meccanismi primitivi l quasi tutto viene realizzato con classi predefinite nelle librerie §ha una implementazione mista (anch’essa tipica del filone logico) l che ne facilita la portabilità e lo rende particolarmente adatto ad essere integrato nelle applicazioni di rete