-
Period: 1 CE to
Intro
Naturalmente è impossibile stabilire una
data precisa con cui incomincia la storia dei linguaggi di
programmazione, e alcuni episodi si qualificano piuttosto come
Preistoria dei linguaggi di programmazione.
Charles Babbage derivò l’idea di pilotare l’Analytical Engine
mediante schede perforate dal telaio di Jaquard, e intorno al 1843
Ada Lovelace elaborò una specifica precisa per calcolare i numeri
di Bernoulli con l’Analytical Engine. -
Period: to
Intro 2
I computer analogici degli anni ‘30 potevano calcolare funzioni
diverse, ma la loro “programmazione” consisteva nel riconfigurare
i circuiti elettrici di cui erano composti
Era uguale anche per l’ENIAC degli anni ‘40: per risolvere un certo problema occorreva “programmare” l’ENIAC riconfigurando a mano migliaia di switch e collegamenti elettrici
Lo Z1 di Konrad Zuse del 1936/38 leggeva semplici istruzioni
aritmetiche e di I/O -
Period: to
Intro 3
Nel 1943/45 Zuse concepisce per lo Z3 il Plankalkül, una sorta di linguaggio ad alto livello che permette di specificare anche salti condizionati e iterazioni, mai implementato
Nel Mark I di Howard Haiken, nel 1943, le istruzioni
macchina erano codificate su nastro perforato, e i loop erano ottenuti incollando letteralmente insieme la fine e l’inizio del nastro
Nello stesso periodo Goldstine e Von Neumann sviluppano l’idea
di rappresentare un programma mediante Flow Diagrams(Flowchart) -
Period: to
Intro 4
Nel Manchester SSEM del 1948, il primo computer a programma
memorizzato, le istruzioni macchina e i dati, scritti in binario,
venivano inseriti a mano uno per uno in memoria usando 32 switch per stabilire il valore di ciascun bit di ogni istruzione/dato
Nell’EDVAC, i bit che componevano il programma (scritto in
linguaggio macchina) e i dati, tutti rappresentati in binario, erano
inseriti uno a uno nelle Mercury Delay Lines -
Gli “Initial Orders” dell’EDSAC
A Cambridge (UK) diviene operativo l’EDSAC (Electronic Delay Storage Automatic Calculator), progettato e costruito da un team guidato da Bill Renwick e Maurice Wilkes
Il secondo computer a programma memorizzato dopo l’SSEM, ma il primo in termini di operatività non solo sperimentale, e il primo ad essere usato per applicazioni commerciali
Usa tubi catodici per la logica, una MDL da 512 words a
18 bit, due soli registri, un lettore di nastro
perforato per l’input e una telescrivente per l’output -
Gli “Initial Orders” dell’EDSAC cont...3
Al codice operativo seguiva un numero scritto su due cifre
decimali, che rappresentava l’indirizzo in memoria dell’operando
esplicito dell’istruzione e che usava come operando implicito il
registro Accumulatore. Es: S 25
era: Accumulator := Accumulator − value stored at address 25
5 bit erano sufficienti a codificare 18+10 caratteri, e una
istruzione macchina poteva essere codificata in 5+5+5 bit
Un programma veniva quindi inizialmente stilato su carta
scrivendo le istruzioni in forma mnemonica -
Gli “Initial Orders” dell’EDSAC cont...4
Il programma andava poi codificato su nastro perforato usando un
perforatore manuale dotato di un tasto per ciascuno dei caratteri
usati per scrivere le istruzioni
Premendo il tasto corrispondente ad esempio alla lettera “A” il
nastro veniva perforato così da riprodurre il pattern di 5 bit
0 (foro assente) e 1 (foro presente) corrispondenti al codice di A
Il nastro veniva poi letto da un lettore in modo da inserire
le istruzioni che conteneva nella memoria dell’EDSAC -
Lo Short Code di John Mauchly
John Mauchly concepisce quello che possiamo considerare il primo linguaggio di programmazione ad alto livello: lo Short (Order) Code (inizialmente chiamato Brief Code)
Lo Short Code viene implementato da William Shmitt, un giovane laureato assunto come lavoratore stagionale alla Eckert-Mauchly Computer Corporation (EMCC)
Concepito inizialmente da Mauchly per il BINAC, non girò mai su quel computer, e nel 1950 fu poi adattato e migliorato per essere usato sull’UNIVAC I -
Lo Short Code di John Mauchly cont...3
Poiché il BINAC (e qualsiasi altro computer di quegli anni, eccetto gli Initial Orders dell’EDSAC) lavorava solo
usando numeri, l’idea dello Short Code era di descrivere le
equazioni matematiche da calcolare in modo simbolico,
assegnando un numero specifico, scritto su sei bit, ad ogni simbolo dell’equazione
Ad esempio, l’equazione: X = Y + ( X * Z )
diventava: 40 03 41 07 09 40 42 02
Con l’operatore di moltiplicazione rappresentato implicitamente
dal codice di due variabili adiacenti -
Lo Short Code di John Mauchly cont...5
Le equazioni da calcolare, convertite in Short Code, venivano
inserite nella memoria dell’UNIVAC a mano, configurando una
opportuna sequenza di switch
Mauchly e Shmitt erano consapevoli che il procedimento di traduzione di una equazione in Short Code avrebbe potuto essere
automatizzato, ma la cosa non fu mai implementata
Shmitt lavorò anche alla scrittura del programma che interpretava
le equazioni da calcolare una volta inserite nell’UNIVAC: il primo interprete della storia dell’informatica -
Gli “Initial Orders” dell’EDSAC cont...2
Ha un Instruction Set di 18 istruzioni macchina, ed è in grado di
eseguire in media 600 istruzioni al secondo, che sono state inserite nella MDL leggendole da un nastro perforato alla velocità di circa 50 istruzioni al secondo
Viene introdotta per la prima volta l’idea di dare alle istruzioni macchina (Initial Orders) una forma mnemonica e dunque più facilmente usabile da essere umani, il codice operativo di ognuna delle 18 istruzioni macchina era associato ad una diversa lettera dell’alfabeto -
Gli “Initial Orders” dell’EDSAC cont...5
Gli Initial Orders erano una forma primitiva di Assembler
Il concetto di un vero è proprio “programma assemblatore” che converte in linguaggio macchina il codice scritto in forma simbolica non era ancora presente nell’idea degli Initial Orders.
Piuttosto, era il codice macchina stesso che era stato progettato in
modo tale da poter essere inserito in memoria attraverso una sua
rappresentazione mnemonica, associando il codice operativo di
ogni istruzione ad una diversa lettera dell’alfabeto -
Lo Short Code di John Mauchly cont...2
La Hopper era a capo del Laboratorio di Analisi Computazionale (sostanzialmente il Dipartimento Programmazione) della EMCC, formato da 9 persone
Tra le altre cose, questo gruppo doveva istruire i programmatori
esterni dei computer costruiti dalla EMCC
Il primo corso fu fornito al personale della Northup Aircraft Corp.
(che aveva commissionato il BINAC). Questo si può considerare
probabilmente il primo corso di programmazione della storia. -
Lo Short Code di John Mauchly cont...4
In termini moderni, questo equivaleva ad un calcolo con assegnamento del tipo: X := Y + (X*Z)
In cui per le variabili venivano riservati alcuni valori specifici, e gli altri simboli erano associati ciascuno ad un numero ben preciso: “+” = 07, “=“ = 03, “(“ = 09, ecc...
In sostanza, con lo Short Code emergeva l’idea di codificare all’interno della memoria di un computer simboli e caratteri alfanumerici attraverso specifici codici numerici, poi opportunamente interpretati all’interno del computer -
Il compilatore di Corrado Böhm cont...2
Böhm confronta il suo lavoro con quello di Rutishauer e la qualità
del lavoro di Böhm risulta ancora più chiara
L’intero compilatore di Böhm consta di sole 130 istruzioni per il
controllo sintattico e la generazione del codice macchina.
Il compilatore genera codice in un numero di passi proporzionale
alla lunghezza n del programma da compilare, mentre quello di
Rutishauer n2
Infine, di tutti i lavori di quegli anni, quello di Böhm è l’unico capace di calcolare qualsiasi funzione computabile -
Il compilatore di Corrado Böhm
Corrado Böhm definisce un linguaggio ad alto livello, un linguaggio macchina, e un metodo di traduzione
Molti e notevoli sono gli aspetti innovativi del lavoro di Böhm, sia
nel linguaggio ad alto livello che nel relativo compilatore:
–L’uso dell’equivalente dei concetti di goto e if-then-else
–L’uso dello statement di assegnamento in tutte le istruzioni
–La possibilità di usare subroutine
–La definizione completa di un compilatore scritto nello stesso
linguaggio dei programmi che deve compilare -
La nascita del costrutto FOR
Heinz Rutishauer, mentre lavora sullo Z4
ricostruito e trasferito a Zurigo, fornisce la descrizione su carta di
un nuovo computer, e di un algoritmo che traduce in linguaggio
macchina un formalismo algebrico
Introduceva per la prima volta un costrutto fondamentale dei moderni linguaggi di programmazione: il costrutto FOR
Come nello Short Code, usava codici numerici specifici per ogni carattere alfanumerico usato nel suo linguaggio algebrico
e il codice generato era rilocabile -
Il primo vero compilatore operativo: AUTOCODE cont..2
Il vantaggio concepito da Rutishauer e Böhm era che facevano riferimento ad un sottostante linguaggio macchina “virtuale”, pensato apposta per semplificare il lavoro del compilatore
Non possibile con un computer reale: il linguaggio andava tradotto nelle istruzioni macchina del computer su cui doveva girare
Glennie era tuttavia consapevole che possiamo usare lo stesso computer per tradurre il codice ad alto livello in codice macchina e poi farci girare sopra quello stesso programma -
Il primo vero compilatore operativo: AUTOCODE cont...3
Benché più semplice del linguaggio macchina del Mark 1, l’AUTOCODE era ancora piuttosto complicato e il corrispondente
compilatore era lungo circa 750 istruzioni macchina
Glienne afferma:
“sono colpito dalla velocità con la quale si possono scrivere
programmi e essere ragionevolmente certi che siano corretti”
“una caratteristica importante è la facilità con cui si può
ragionare mentalmente sul programma che si sta scrivendo”
“La perdita di efficienza è limitata a circa il 10%” -
Il primo vero compilatore operativo: AUTOCODE cont...3
Il lavoro di Glennie non ebbe l’impatto che potremmo supporre poiché troppo in anticipo sui tempi
Di tutti i problemi che i programmatori di quegli anni dovevano
affrontare, alle prese con macchine instabili e lente, il meno grave
era ancora quello della scrittura dei programmi
Ben più difficile era il lavoro necessario ad adattare le grandezze numeriche del problema da risolvere alla limitata capacità del computer, di usare bene la poca memoria disponibile e i continui malfunzionamenti hardware -
Il primo vero compilatore operativo: AUTOCODE
Il primo compilatore (degno di questo nome, come vedremo fra
poco) effettivamente implementato e usato viene sviluppato da
Alick Glennie in Inghilterra, e comincia a diventare operativo dal
settembre 1952
Glennie chiamò il suo sistema AUTOCODE. Negli anni
successivi, il suo lavoro influenzerà lo sviluppo di molti altri
“Autocode” non necessariamente correlati fra loro
L’AUTOCODE fu sviluppato per il Manchester Mark 1, il cui
linguaggio macchina era particolarmente astruso e complicato -
Period: to
Innovazioni '54-'56 cont...2
Il sistema, da alcuni chiamato “George”, per la prima volta:
– 1) usava un linguaggio svincolato dal computer su cui girava
– 2) non richiedeva conoscenze pregresse sul computer usato
Il codice generato dal compilatore era circa 10 volte più lento dei
programmi scritti direttamente in codice macchina, ma si dimostrò
molto efficiente nel permettere una stesura veloce di programmi
per problemi molto complessi -
Period: to
Innovazioni '54-'56 cont...3
Sempre nel 1954 Ralph Brooker implementa a Manchester un
nuovo AUTOCODE per il Mark 1
Rispetto al precedente AUTOCODE di Glennie, quello di Brooker
è più elegante e meno machine-dependent. Inoltre, era in grado di
lavorare sia con variabili intere che con variabili floating point
Sulla Base del lavoro di Brooker, altri due AUTOCODE furono
sviluppati negli anni successivi per il Ferranti PEGASUS e per il
Mark II -
Period: to
Innovazioni '54-'56
Grace Hopper tiene interventi in varie parti degli USA, e
soprattutto lavora all’organizzazione delle prime due edizioni del
Symposium on Advanced Programming Methods for Digital
Computers che in quegli anni era la principale (se non l’unica)
occasione che i ricercatori avevano di venire a conoscenza del
lavoro svolto in altre sedi e di scambiarsi opinioni e esperienze
È proprio al simposio del 1954 che Halcombe Laning e Neal
Zierle presentano il loro sistema, implementato per il Whirlwind -
Pascal
Progettato intorno alla fine degli anni ‘60 e presentato ufficialmente nel 1971 da Niklaus Wirth (Svizzera) il Pascal aveva nientemeno che
l’ambizione di essere efficiente da compilare ed eseguire, permettere la scrittura di programmi ben strutturati e ben organizzati, e servire come strumento per insegnare la programmazione e l’obiettivo fu ampiamente raggiunto -
Pascal cont...3
Dunque il progetto del Pascal fu guidato dell’ALGOL e dal tentativo di correggerne i difetti.
Il Pascal incoraggiava una programmazione strutturata e modulare utilizzando i costrutti già usati nell’ALGOL, la definizione di procedure e funzioni, e l’uso di strutture dati dinamiche. Usava i puntatori, il call by value e reference
Ma in più aveva un sistema di tipi molto ricco, ma anche molto rigido, con un meccanismo di type checking in fase di compilazione che cercava di evitare possibili errori -
Pascal cont...4
Facile da comprendere e efficiente da eseguire perché il compilatore non generava direttamente codice macchina, ma un codice oggetto per una macchina virtuale, il P-code
Un modulo compilatore specifico per ogni piattaforma
trasformava il P-code in codice macchina. In alternativa era possibile usare un interprete per il P-code, senza dover scrivere un compilatore ad hoc
Quindi poteva essere rapidamente installato e fatto girare su piattaforme diverse e con diversa potenza di calcolo -
Pascal cont...5
Verso la fine degli anni ‘70 il Pascal era ormai in uso e insegnato in tutte le università. Inoltre negli anni ‘80: L’Educational Testing Service (ETS), la compagnia che negli USA amministra e scrive i test di ingresso ai college americani decise di inserire un esame di Informatica e di usare il Pascal per il test
Ovviamente, tutti gli studenti delle superiori dovettero mettersi a
studiare il Pascal, che rimase in uso nei test ETS fino al 1999, sostituito prima dal C++ e poco dopo da Java -
Pascal cont...6
Quando la Apple lanciò la linea dei Macintosh, scelse il Pascal come linguaggio di programmazione standard e gli esempi di programmi forniti ai programmatori dei Macintosh erano scritti in Pascal
Le successive versioni del Turbo Pascal includevano la possibilità di scomporre grossi programmi in moduli compilabili separatamente una interfaccia grafica per l’ambiente Windows, una versione object oriented
Ma intanto era già in corso una diffusione del C e più tardi del C++ -
Pascal cont...2
Come l’ALGOL era stato progettato da un comitato internazionale e doveva essere un linguaggio indipendente dalla piattaforma su cui usarlo
Ovviamente ciò dava maggiore libertà sulle caratteristiche da dare al
linguaggio, ma lo rendeva anche più difficile da implementare
adattandolo alle diverse piattaforme hardware. Scrivere un compilatore per l’ALGOL era difficile e i programmi inefficienti
In più l’ALGOL non aveva il tipo CHAR né i puntatori e
dunque si preferiva il FORTRAN -
Smalltalk
Lo Smalltalk fu concepito da Alan Kay tra la fine degli anni ‘60 e
l’inizio degli anni ‘70 allo Xerox PARC
Non era altro che l’interfaccia del sistema operativo e il linguaggio di programmazione del Dynabook: tutte le interazioni con il Dynabook dovevano avvenire attraverso lo Smalltalk
Lo sviluppo dello Smalltalk proseguì in maniera indipendente dal
Dynabook
Il primo ambiente di programmazione ad interfaccia grafica fu
sviluppato per lo Smalltalk, e fu implementato sullo Xerox Alto -
Smalltalk cont...2
Fu sviluppato da zero in modo completamente indipendente, con una sua terminologia e sintassi originali
Nello Smalltalk esistono solo oggetti: anche le classi sono oggetti.
Dunque, tutte le operazioni sono messaggi inviati agli oggetti
I programmi sono costituiti solo da classi e oggetti
Gli oggetti hanno dati privati e comunicano con l’esterno solo
attraverso metodi
Un sistema di tipi dinamico e flessibile permetteva di adattare
facilmente vecchi programmi a nuove applicazioni -
Smalltalk cont...3
Tutta la terminologia usata negli ambienti di programmazione ad
oggetti e il significato dei vari termini, si deve sostanzialmente allo Smalltalk
Con lo Smalltalk nasce l’idea di un editor specificamente progettato per quel linguaggio. Usando l’editor, le classi potevano essere definite semplicemente riempiendo una tavola suddivisa nei vari campi predefiniti
La GUI dello Smalltalk includeva l’editor delle classi, un editor per semplici illustrazioni, un word processor, e un editor di font. -
C++
Inizialmente chiamato C with classes, il C++ nasce quasi per caso ai Bell Labs, grazie a Bjarne Stroustrup Questi conduceva le sue ricerche sul calcolo distribuito, ma aveva anche un interesse personale nella simulazione e dunque conosceva bene il Simula
Stroustrup decise così di estendere il C aggiungendovi oggetti e classi: la prima implementazione del C++ era semplicemente
un preprocessore che convertiva i programmi C++ in C -
C++ cont...2
Lo sviluppo del C++ in pochi anni divenne il linguaggio object oriente più usato
Il successo del C++ si deve anche al fatto che coniuga le qualità della programmazione ad oggetti senza perdere nessuna delle qualità del C, che però porta ad un linguaggio con aspetti difficili da comprendere e la scrittura di programmi chiari e in generale l’uso di un elegante stile di programmazione non sono incoraggiati dalla sintassi del C++