Capitolo 5: Algol 60, Pascal e C



Documenti analoghi
Funzioni in C. Violetta Lonati

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO

LINGUAGGI DI PROGRAMMAZIONE

Linguaggi per COMUNICARE. Il linguaggio è un sistema codificato di segni che consente la comunicazione, intesa come scambio di informazioni

Come ragiona il computer. Problemi e algoritmi

Organizzazione degli archivi

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Concetto di Funzione e Procedura METODI in Java

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

4 3 4 = 4 x x x 10 0 aaa

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Il software e la programmazione

Corso di Linguaggi di Programmazione

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Oggetti Lezione 3. aspetti generali e definizione di classi I

(anno accademico )

La selezione binaria

Metodologie di programmazione in Fortran 90

Descrizione di un algoritmo

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

Capitolo 2. Operazione di limite

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

Introduzione alla programmazione in C

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

GESTIONE INFORMATICA DEI DATI AZIENDALI

Algebra Booleana ed Espressioni Booleane

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Programmazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano

Linguaggi e Paradigmi di Programmazione

Appunti del corso di Informatica 1 (IN110 Fondamenti) 4 Linguaggi di programmazione

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Le variabili. Olga Scotti

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Elementi di Informatica

Elementi di semantica denotazionale ed operazionale

Database. Si ringrazia Marco Bertini per le slides

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

DAL PROBLEMA AL PROGRAMMA

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Più processori uguale più velocità?

Inizializzazione, Assegnamento e Distruzione di Classi

Sistema operativo: Gestione della memoria

Modello Relazionale dei DBMS - Vincoli Tradizionalmente, esistono quattro modelli logici: Gerarchico Reticolare Relazionale A oggetti XML I modelli

FONDAMENTI di INFORMATICA L. Mezzalira

Fondamenti di Informatica Ingegneria Clinica Lezione 16/10/2009. Prof. Raffaele Nicolussi

Codifica: dal diagramma a blocchi al linguaggio C++

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Introduzione agli algoritmi e alla programmazione in VisualBasic.Net

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Corso di Fondamenti di Informatica

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Processo di risoluzione di un problema ingegneristico. Processo di risoluzione di un problema ingegneristico

IT Questionario per formatori di insegnanti di lingue Analisi dei dati

Semantica operazionale dei linguaggi di Programmazione

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma.

Tipicamente un elaboratore è capace di trattare domini di dati di tipi primitivi

Uso delle variabili di alias. SQL slide aggiuntive. Interrogazione 25. Interrogazione 26

Elementi di semantica operazionale

Operazioni di input e output in Fortran 90

Arduino: Programmazione

Tipologie di pianificatori. Pianificazione. Partial Order Planning. E compiti diversi. Pianificazione gerarchica. Approcci integrati

Gestione delle transazioni. Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 1

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Ammortamento di un debito

Corso di INFORMATICA 2 (Matematica e Applicazioni)

Analisi di scenario File Nr. 10

Capitolo 13. Interrogare una base di dati

Variabili e tipi di dato

Calcolatori Elettronici A a.a. 2008/2009


1 introdurre le monete per l importo necessario. 2 selezionare la quantità di zucchero. 3 selezionare la bevanda desiderata

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Introduzione ai Metodi Formali

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Allocazione dinamica della memoria - riepilogo

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

INFORMATICA 1 L. Mezzalira

E una notazione per descrivere gli algoritmi.

Cenni su algoritmi, diagrammi di flusso, strutture di controllo

3. La sintassi di Java

Analizzatore lessicale o scanner

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

EMANUELE GAGLIARDINI ABILITA COGNITIVE

Introduzione all Information Retrieval

Funzioni. Parte prima. Daniele Serra

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Corso di Informatica

costruttori e distruttori

Fasi di creazione di un programma

Linguaggi di programmazione

Per studio di funzione intendiamo un insieme di procedure che hanno lo scopo di analizzare le proprietà di una funzione f ( x) R R

LE FUNZIONI A DUE VARIABILI

Transcript:

Capitolo 5: Algol 60, Pascal e C

Algol 60 (58-63) -Backus, McCarthy -fino al Pascal (70) è stato lo standard accademico punti positivi -BNF!! -block structure (begin-end), recursion, higher order functions, stack storage, meno restrizioni punti negativi -all related with parameter passing: procedure as parameters, arrays without bounds, pass-by-name (beta-riduzione)

esempio di funzione Algol real procedure average(a,n); real array A; integer n; begin real sum; sum:=0; for i=1 step 1 until n do sum:=sum + A[i]; average:=sum/n end;

esercizio 5.1: passaggio di funzioni è unsafe il tipo di Q è semplicemente proc e questo non basta per evitare errori di tipo a run-time proc P(proc Q) begin Q(true) end; P(H); proc H(i) integer i; begin H:=i+3 end;

pass-by-name => in-lining della funzione con le espressioni dei parametri attuali sostituiti ai corrispondenti formali Algol 60 copy rule strani side effects tra i parametri formali c è anche pass-by-value, ma ineffiiciente con array

esempio di pass-by-name in Algol 60: begin integer i; integer procedure sum(i,j); integer i, j; begin integer sm; sm:=0; for i:= 1 step 1 until 100 do sm:= sm+j; sum:=sm end; print(sum(i,i*10)) end vedere es. 5.2

copy rule: begin integer sm; sm:=0; for i:= 1 step 1 until 100 do sm:= sm+i*10; sum:=sm end; sm = 1*10+ 2*10+ 3*10+ +100*10

Algol 68 basato su un formalismo di specifica chiamato grammatiche a 2 livelli deriva dal successo del BNF per specificare la sintassi si voleva grammatica estesa per specificare anche la semantica del LP

Pascal definito negli anni 70 da Nyklaus Wirth Algorithms+Data Structures = Programs (75) uno dei linguaggi più diffusi fino negli anni 90 (anche per SO Mac) concetti per definire strutture dati: array, record, record con varianti, tipi subrange [1..10] al più funzioni di ordine 2

problema con gli array che hanno tipo: A: array <tipo indice> of <tipo degli elementi> A: array [-10..10] of integer; quando lo passo ad una funzione: procedure P(a:array[-10..10] of integer) P funziona solo per array di questo tipo!! non esiste array [n..m] of int con variabili

C (69-73) Dennis Ritchie Unix deriva da linguaggio senza tipi (B e prima BCLP) modello della memoria come sequenza di parole aritmetica dei puntatori array e puntatori sono la stessa cosa: tipi si confondono cast la debolezza dei tipi nei 70 era un pregio, ma successivamente come un fatto negativo (C++)

Capitolo (4.4.2) imperativo dichiarativo

linguaggi imperativi e linguaggi dichiarativi: imperativo: l assegnazione x=x-1; è un ordine al computer di modificare l r-valore di x dichiarativo: invece int f(int y){return y-1;} dichiara che f è una funzione con un certo grafo: {(n,n-1) n Z}

Lisp ed ML NON sono linguaggi dichiarativi, permettono di fare assegnazioni solo escludendo queste parti si ottengono Linguaggi funzionali puri = dichiarativi

Linguaggi dichiarativi l essenza del calcolo consiste nel valutare espressioni che contengono invocazioni a funzioni l assenza di variabili modificabili => le funzioni non hanno side-effects

test di purezza: all interno di un dato blocco in cui sono visibili le variabili x1 xn, se invocassimo f(x1,,xn)+f(x1,,xn)+f(x1,,xn) il risultato di ogni invocazione di f è sempre lo stesso f has no side effects

referential transparency: in linguistica si usa per indicare il fenomeno in cui un termine può essere sostituito con un altro mantenendo inalterato il significato della frase i linguaggi funzionali puri supportano la referential transparency, mentre quelli imperativi no (o meno) il punto è che è più facile trovare cose equivalenti nei linguaggi funzionali puri che in quelli imperativi 2 esempi di cose

referential tranparency and variables i linguaggi funzionali puri la supportano se x ha lo stesso valore di y, allora E( x ) è equivalente a E( y ) i linguaggi imperativi la supportano solo se x e y sono alias nei linguaggi funzionali puri una variabile è solo un nome associato ad un valore costante

referential transparency and functions: linguaggi funzionali puri : 2 funzioni sono equivalenti se hanno lo stesso grafo per i linguaggi imperativi: se hanno lo stesso grafo e gli stessi side effects risultato F funzionale pura risultato F imperativa side effect

declarative is better than imperative? Nel 1977 John Backus (inventore di Fortran e Algol 60) sostenne che i linguaggi funzionali puri sono: più facili da capire degli imperativi sono più astratti, cioè più indipendenti dalla realizzazione delle strutture dati più efficienti la referential transparency l esecuzione concorrente di parti del programma

Backus capì che era essenziale produrre SW il più corretto e facile da mantenere e modificare possibile pensò che la soluzione fossero i linguaggi funzionali appunto più semplici e astratti e ne propose e sviluppò uno: FP

imperativo: int prod=0; for(int i=0;i<n;i++) prod=prod+a[i]*b[i]; funzionale: In_prod=(Fold +). (ApplyToAll *).Transpose

non è andata così -soluzioni funzionali sono + astratte, ma le cose astratte non sono + facili -parallelismo non è (ancora) facile da usare -inerzia del mercato -paradigma ad oggetti vincente -ma recentemente linguaggi che mescolano parti funzionali e parti ad oggetti: Python, Ruby