Storia dei linguaggi di programmazione

By ebano19
  • 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++