Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta...
Transcript of Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta...
Programmazione “VINTAGE”…
Quando i programmatori erano geni e non polli allevati in batteria
...
Luigi CatuognoHCSSLug Salerno[[email protected]]
Erano gli anni cinquanta....
Erano gli anni cinquanta...
1951 – Klaatu e Gort atterrano a Washington. Gli alieni esistono... e ce l'hanno con noi.
Erano gli anni cinquanta...
1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II
Erano gli anni cinquanta
1954 – Godzilla attacca il Giappone
Erano gli anni cinquanta...
1957 – il 4 ottobre, l'Unione Sovietica lanciava sua sfida alla scienza occidantale, mettendo in orbita il primo statellite artificiale: lo “SPUTNIK”.
Iniziava la “corsa allo spazio”.
Erano gli anni cinquanta...
1958 – il 20 febbraio viene promulgata la “Legge Merlin” che chiude le case di tolleranza.
Erano gli anni cinquanta...
Tra il 54 e il 57 furono sviluppati, in ambiente militare e scientifico, numerosi linguaggi di programmazione.
● FORTRAN (John Backus, IBM, 1954)– Fortran 9*, Fortran 2008
● FLOW-MATIC (Grace Hopper, 1955)● COMTRAN (Bob Bemer, 1957)● Tra il 1956 e il 1958 John McCarthy lavora al LISP
LISPLISP
John McCarthy (1927-2011)Turing Award 1971
Steve Russell (1937)
LISP
● LISt Processing– Ideato da John McCarthy nel 1958
– Primo interprete LISP realizzato da Steve Russell nel 1959
– Primo compilatore LISP completo realizzato da Tim Hart e Mike Levin nel 1962
● Paradigma di programmazione funzionale● E' il linguaggio più utilizzato nelle applicazioni di
intelligenza artificiale
LISP● Ha riscosso uno straordinario successo
– Nonostante sia il secondo linguaggio ad alto livello più vecchio (dopo il FORTRAN), è ancora molto diffuso in numerosi dialetti
● Franz LISP● MIT Scheme● Common LISP
– Standard● ANSI Common LISP [ANSI INCITS 226-1994(R2004)]
● IEEE SCHEME [IEEE 1178-1990 (R1995)]
LISP● Varianti “specializzate”:
– AutoLISP● Dialetto specializzato nella creazione e manipolazione di oggetti
3D nell'applicativo AutoCAD
– Emacs-LISP● Dialetto LISP utilizzato per la realizzazione e configurazione di
funzionalità estese dei text editor della famiglia Emacs
– Nyquist● Dialetto LISP utilizzato per la sintesi dei suoni, gestione e
manipolazione di file MIDI, etc. E' anche utilizzato per la realizzazione di effect plug-ins per l'applicazione Audacity.
LISP
● Un programma LISP è composto da espressioni simboliche dette S-espressioni
● In LISP non c'è distinzione tra espressioni e istruzioni
● Le espressioni– Sono rappresentate in notazione prefissa
– Sono contenute in liste
LISP
● Tipi di dati– Atomi
● Numeri● Simboli
– Liste● Sequenze ordinate di atomi/liste
● Espressioni– Liste il cui primo elemento è un operatore
LISP
>(+ 1 3)4>
>(list 1 2 3 4 5 6 7)(1 2 3 4 5 6 7)>
>(list '(1 2 3) 'a '(5 (6 z)))((1 2 3) a (5 (6 z)))>
>(list (+ 10 1 100) (* 5 6))(111 30)>
>(eval (list '+ (+ 10 1 100) (* 5 6)))141>
+ / * : operatori aritmetici
(list ..): costruttore di liste
' : operatore quote
(eval ): valuta una lista come espressione
(print ..): visualizza il risultato di una espressione (builtin)
>(print “Hello!”)Hello!>
LISP
>(defun F (x y) (/ ( x y) (+ x y)))>(F 3 2)1/5>
(if (expr cond.) (exprthen) (exprelse)) operatori aritmetici
(defun nomef (lista param)(expr)): definizione di funzioni
(fn. Matem.): sqrt, sin, cos ….
(fn. Stringhe.): length, reverse subseq ….
>(defun fatt (x) (if (= x 0) (1) (* x (fatt ( x 1)))))>(fatt 3)6>
>(sqrt 2) 1.4142135>(sqrt 1.0)#C(0 1.0)>
>(reverse “abcd”) “dcba”>(subseq “Hello” 2 4)“ll”>(length “Hello”)5>
LISP
>(append '(a b) '(c d))(a b c d)
>(cons 1 '(2 3 4))(1 2 3 4)
>(car '(1 2 3 4 5))1
>(cdr '(1 2 3 4 5))(2 3 4 5)
>(cadr '(1 2 3 4 5))2
>(cddr '(1 2 3 4 5))(3 4 5)>
(op liste): append, cons, car, cadr …
(dotimes (var max exit)(exp)): Itera 0<=var<max sull'espressione exp. Al termine restituisce il risultato dell' espr. exit.
>(dotimes (x 4 x) (print (fatt x)))11264
>
LISP
>(dolist (x '(a b c d e)) (print x)ABCDE
>
(dolist (var (listitems) (exp)): append, cons, car, Itera sull' espressione exp con var assume i valori in listitems
(dotimes (var max exit)(exp)): Itera 0<=var<max sull'espressione exp. Al termine restituisce il risultato dell' espr. exit.
>(dotimes (x 4 x) (print (fatt x)))11264
>
LISP
● LISP MACHINE– MIT (1973) e diverse
compagnie● XeroX● Texas Instruments● Lisp Machines INC.
– Hardware ottimizzato per software AI scritto in LISP
● Grarbage Collection● Tagged Architecture● Words da 24 a 40 bit● Istruzioni speciali
Knight LISP Machine (1973)
LISP
● LISP MACHINE– Sistema operativo e
applicazioni scritti in LISP● Genera/Open Genera (1982)● Emacs (1976)
– Rapido declino all'inizio dell'era dei PC
● Non una delle compagnie nate per produrre LISP Machines è sopravvissutaSymbolics – Serie 3600 (1983)
Linguaggi funzionali odierni...
● ML – MetaLanguage (1973) e I derivati CAML e OCAML
● Erlang (1986), linguaggio di programmazione “proprietario” di Ericsson, per lo sviluppo della parte software dei prodotti dell'azienda.
1959
Barbie entra in commercio
1959
Una equipe guidata da Grace Murray Hopper progetta il COBOL
COBOLCOBOL
Grace Murray Hopper (1906-1992), et al.
COBOL● COmmon Business-Oriented Language● Realizzato da una commissione di esperti guidata da Grace M. Hopper nel
1959, come sintesi di diversi linguaggi business-oriented esistenti all'epoca:– COMTRAN (COMmercial Translator) [Bob Bemer, 1957]
– FLOW-MATIC [G. Hopper et al. , 1955]
– FACT [Honeywell, 1959]
● Ha avuto un grandissimo successo soprattutto negli anni '60 e '70– Caratterizzato da estrema affidabilità, è ancora oggi utilizzato in applicazioni
bancarie e commerciali.
– Negli anni si è evoluto incorporando le principali innovazioni apparse nel panorama dei linguaggi (programmazione strutturata, Object-Oriented Programming)
● L'ultimo standard è stato definito nel 2002
COBOL● Il COBOL è caratterizzato da una grammatica alquanto prolissa e discorsiva.
– Grace Hopper sosteneva che i linguaggi di programmazione dovessero essere il più possibie vicini alla lingua umana piuttosto che al linguaggio macchina
– Nel tempo molte rigidità del linguaggio (tabulazioni fisse, segni di interpunzione ed “intercalari”) sono state sfumate o rimosse.
● Un programma COBOL è diviso in 4 sezioni (division)– Identification Division
● Serve per l'identificazione dei programmi in ambiente multiprogrammato
– Environment Division● Descrive le risorse (devices, memorie di massa) utilizzati dal programma
– Data Division● Descrive il formato dei dati elaborati dal programma (File e dati temporanei)
– Procedure Division● Contiene le istruzioni ed il flusso logico necessari per produrre l'output dai dati in input
COBOL
● Il COBOL originario– linguaggio non strutturato
– tipi di dati numerici e letterali:● 1000.00, 34-, 'Stringa'● I dati sono organizzati gerarchicamente in File, Recod e
Campi● Dimensione, formato, tipologia e disposizione dei campi
nei record sono descritti dalle cosiddette “clausole picture”
COBOL01 IDENTIFICATION DIVISION.02 PROGRAM'ID. 'SAMPLE'.03 ENVIRONMENT DIVISION.04 FILECONTROL. SELECT EMPLOYEECARDS ASSIGN TO READER.05 SELECT PAYROLLFILE ASSIGN TO TAPE 1.06 DATA DIVISION.07 FD EMPLOYEECARDS08 01 EMPLOYEERECORD.09 02 EMPLOYEENAME PICTURE A(20).10 02 HOURSWORKED PICTURE 9(2).11 02 HOURLYRATE PICTURE 9V99.12 FD PAYROLLFILE13 01 PAYROLLRECORD.14 02 NAMEOUT PICTURE A(20).15 02 HOURSOUT PICTURE 9(2).16 02 RATEOUT PICTURE 9V99.17 02 WEEKLYWAGES PICTURE 999V99.18 PROCEDUREDIVISION.19 START. READ EMPLOYEECARDS AT END GO TO FINISH.
...
COBOL
01 IDENTIFICATION DIVISION....
18 PROCEDUREDIVISION.19 START. READ EMPLOYEECARDS AT END GO TO FINISH.20 MOVE EMPLOYEENAME TO NAMEOUT.21 MOVE HOURSWORKED TO HOURSOUT.22 MOVE HOURLYRATE TO RATEOUT.23 MULTIPLY HOURSWORKED BY HOURLYRATE GIVING WEEKLYWAGES.24 WRITE PAYROLLRECORD.25 GO TO START.26 FINISH. STOP RUN.
COBOL
EMPLOYEENAMEHOURSWORKEDHOURLYRATE
NAMEOUTHOURSOUTRATEOUTWEEKLYWAGES
MULTIPLY
EMPLOYEECARDS
PAYROLLFILE
COBOL
● Alcuni compilatori (Free) disponibili in rete:– OpenCOBOL
● http://opencobol.org
– TinyCOBOL● http://tiny-cobol.sourceforge.net
– COBOL for GCC● http://cobolforgcc.sourceforge.net
A cavallo tra i 50 e i 60...
● Raffinamento dei principali linguaggi.– FORTRAN II (1958) e FORTRAN IV (1962)
– COBOL 61 (1961)
● Nuovi linguaggi● ALGOL
– Algol 58 e Algol 60
ALGOLALGOL
Friedrich L. Bauer (1924)
Alan Jay Perlis (1922-1990)
Turing Award 1966
Klaus Samelson (1918-1980)
Heinz Rutishauser (1918-1970)
John Warner Backus (1924-2007)
Turing Award 1977
Charles Katz
Joseph Henry Wegstein
Hermann Bottenbruch
ALGOL
● ALGOrithmic Language● Definito da una commissione “bilaterale” di esperti provenienti da:
– Association for Computing Machinery (ACM) - USA
– Gesellschaft für Angewandte Mathematik und Mechanik (Society of Applied Mathematics and Mechanics) (GAMM) – DE
● Scopo: fornire uno strumento per descrivere formalmente gli algoritmi
● Sebbene non sia attualmente più utilizzato è stato forse il linguaggio più influente che sia mai stato realizzato.– Introduzione della programmazione strutturata a blocchi
● Principali revisioni:– Algol 58, Algol 60, Algol 68
ALGOL
● Il linguaggio ALGOL è stato la base di partenza per numerosi linguaggi successo che ne hanno ereditato la morfologia e gran parte della grammatica:– SIMULA
● Il primo linguaggio ad oggetti
– PASCAL (e derivati)
– ADA
ALGOL
begin integer N; Read Int(N); begin real array Data[1:N]; real sum, avg; integer i; sum:=0; for i:=1 step 1 until N do begin real val; Read Real(val); Data[i]:=if val<0 then
val else val end; for i:=1 step 1 until N do sum:=sum + Data[i]; avg:=sum/N; Print Real(avg) endend
● Ciascuna revision del linguaggio ALGOL è stata implementata in diversi dialetti, talvolta piuttosto diversi tra loro– ALGOL-W [Wirth,
Hoare- 1966], variante dell'Algol 60 diede poi origine al PASCAL
ALGOL
● Algol 68 era un linguaggio molto vasto, ambizioso e complesso.– Definizione di nuovi tipi
– Supporto alla programmazione concorrente
– Sintassi meno rigida e verbosa
● Molte delle idee chiave di ALGOL 68 confluirono nel progetto del linguaggio ADA
Arrivano I favolosi anni 60
1961 – Jurij Gagarin è il primo uomo in orbita intorno alla terra.
1965 – Aleksej Leonov compie la prima “passeggiata spaziale”
Gli americani rosicano...
Arrivano I favolosi anni 60...
1962 – James Bond ottiene la sua “Licenza di uccidere”
Arrivano I favolosi anni 60
1962 – E' autorizzata la somministrazine del vaccino anti-polio di Albert Sabin (1906-1993).
Sabin non volle brevettare la sua invenzione per renderla accessibile a tutti I bambini del mondo
Arrivano I favolosi anni 60...
1963 – A Dallas, JFK, 35-esimo Presidente degli USA, muore (sembra) per mano di Lee Harvey Oswald
Arrivano I favoloso anni 60
1964 – Mary Quandt inventa la minigonna
Arrivano I favolosi anni 60...
1969 - Neil Armstrong è il primo uomo a mettere piede sulla Luna.
I Sovietici (ancora) rosicano
Arrivano I favolosi anni 60...
● Gli antenati dei moderni lignuaggi di programmazione nascono in questi anni– SIMULA (1962) Primo linguaggio a oggetti
– BASIC (1964)
– BCPL (1967) Capostipite della famiglia dei linguaggi “con le parentesi graffe”
● Linguaggio B (1969)● Linguaggio C (1972)
– Obective-C (1982), C++ (1983), Java (1995)
BASICBASIC
John George Kemeny (1926-1992)Thomas Eugene Kurtz (1928)
BASIC
● Beginners' All-purpose Symbolic Instruction Code
● Originariamente progettato da John George Kemeny e Thomas Eugene Kurz al Dartmouth College NH (USA) nel 1964
● Linguaggio di impiego generale destinato a principianti
● In parte ispirato al linguaggio FORTRAN II
BASIC
● Linguaggio di enorme successo soprattutto negli anni ottanta● Ambiente interattivo per “Home computers”
– Ambiente di sviluppo
– Sistema operativo
● Prodotto in numerosi dialetti– DartmouthBasic [Kemeny-Kurtz, 1964]
– Tiny Basic [Dennis Allison, 1975]
– Altair Basic [Gates-Allen-Davidoff, 1975]● Microsoft Basic [Gates-Allen, 1975]
– IBM BASIC A [IBM, 1981]– GW-BASIC [Microsoft, 1983]– MSX BASIC [Microsoft, 1984]
– SuperBasic [Jan Jones-Sinclair research, 1984]
BASIC
● Nei primi anni novanta è stato protagonista di una straordinaria evoluzione
● Evoluzione del linguaggio in varie direzioni:– Programmazione strutturata a blocchi
– Object oriented
– Event driven
● Ambiente di sviluppo– Ambiente testuale integrato
– Ambiente grafico
– Embedded (microcontrollori)● PIC-BASIC
BASIC
● Turbo BASIC [Robert Zale-Borland, 1985]– Compatibile con GW-BASIC + programmazione strutturata
– Ambiente MS-DOS
– Ambiente integrato + Compilatore● PowerBASIC [Robert Zale, 1989]
● QuickBASIC [Microsoft, 1985]– Evoluzione di GWBASIC + programmazione strutturata
– Ambiente integrato + Compilatore
– Interprete: QBASIC
● Visual Basic [Microsoft, 1991]– Ambiente di sviluppo per Microsoft Windows
– Paradigma di programmazione Object-oriented e event-driven
BASIC
● Altre versioni:– Gambas [Benoit Minisini, 1999]
● Interprete + ambiente integrato grafico● Linux, FreeBSD● Simile a Visual Basic ● Object oriented, event-driver
– FreeBASIC [Andre Victor, 2004]● Compilatore 32-bit per Windows, Linux, FreeBSD● Compatibile QuickBasic● Object Oriented
BASIC10 READ A1, A2, A3, A415 LET D = A1 * A4 A3 * A220 IF D = 0 THEN 6530 READ B1, B237 LET X1 = (B1 * A4 B2 * A2)42 LET X2 = (A1 * B2 A3 * B1) / D55 PRINT X1, X260 GO TO 3065 PRINT "NO UNIQUE SOLUTION"70 DATA 1, 2, 480 DATA 2, 7, 585 DATA 1, 3, 4, 790 END
Esempio tratto da: A Manual for BASIC, the elementary algebraic language designed for use with the Dartmouth Time Sharing System”, Dartmouth College Computation Center, October, 1964.
BASIC
100 print "while x<10 do..."110 x=0120 print "Inizio loop": goto 150130 print using "body > x=##"; x140 x=x+1150 if x<10 then goto 130160 print using "End loop: x=##"; x
1. While loop con l'istruzione goto (Dartmouth Basic)
120 print "while x<10 do..."130 x=0140 print "Inizio loop"150 while x<10160 print using "body> x=##"; x170 x=x+1180 wend190 print using "End loop: x=##"; x
2. While loop (gwbasic)
print "while x<10 do..."x=0while x<10 print using "body> x=##"; x x=x+1wendprint using "End loop: x=##"; x
3. While loop (quick/turbo basic)
Dim x As Integer = 0Print "while x<10 do..."Do While x<10 print using "body> x=##"; x x=x+1Loopprint using "End loop: x=##"; x
4. While loop (Visual Basic)
BASIC
100 PRINT "Subroutine menu"110 A$=””120 PRINT " 1: Subroutine A"130 PRINT " 2: subroutine B"140 PRINT " X: exit"160 INPUT "Scelta: ", A$170 IF A$="X" THEN GOTO 300180 IF A$="1" THEN GOSUB 1000190 IF A$="2" THEN GOSUB 2000200 GOTO 100300 PRINT “Fine programma”310 END1000 PRINT "eseguo subroutine A"1010 RETURN2000 PRINT "eseguo subroutine B"2010 RETURN
1. Chiamata a subroutine con gosub (MSX Basic 1.0)
100 REPEAT menu110 Print "Subroutine menu"130 Print " 1: Subroutine A"140 Print " 2: subroutine B"150 Print " X: exit"160 Input "Scelta: ", A$180 IF A$="1" THEN Opzione1190 IF A$="2" THEN Opzione2200 IF A$=”X” THEN EXIT menu190 END REPEAT menu310 END1000 DEFine PROCedure Opzione11010 PRINT “eseguo subroutine A”1020 END DEFine Opzione12000 DEFine PROCedure Opzione22010 PRINT “eseguo subroutine B”2020 END DEFine Opzione2
2. Chiamata a subroutine (Sinclair QL SuperBASIC)
BASIC
DO print "Subroutine menu" print " 1: Subroutine A" print " 2: Subroutine B" print " X: exit" input "Scelta: ", A$ if A$="1" then CALL Opzione1 if A$="2" then CALL Opzione2 if A$="X" then endLOOP UNTIL A$="X"ENDSUB Opzione1 print "eseguo subroutine A"END SUBSUB Opzione2 print "eseguo subroutine B"END SUB
3. Chiamata a subroutine(Turbo Basic)
PUBLIC SUB Main()DIM A$ AS String = ""DO PRINT "Subroutine menu" ... SELECT CASE A$ CASE "1" Opzione1 CASE "2" Opzione2 END SELECT LOOP UNTIL A$ = "X"ENDPUBLIC SUB Opzione1() PRINT "eseguo subroutine A"ENDPUBLIC SUB Opzione2() PRINT "eseguo subroutine B"END
4. Chiamata a subroutine (Gambas)
L'età dell'oro del BASIC
L'età d'oro del BASIC
PILOTPILOT
John Amsden Starkweather (1925-2001)
PILOT
● Programmed Inquiry, Learning Or Teaching● Sviluppato da John Amsden Starkweather nel
1968, Professore di psicologia alla UCSF● Derivato da un precedente linguaggio per la
realizzazione di test di apprendimento (Computest) del 1962
● Linguaggio con finalità didattiche (talvolta accostato al LOGO)
PILOT
● Alcuni requisiti:– Uso di comandi semplici rispondenti a chiare
necessità
– Facilità di apprendimento: i principianti dovrebbero essere in grado di scrivere programmi dopo un ora di istruzione e pratica
– Il linguaggio deve fornire immediato feedback al programmatore
● Il software di sviluppo deve sempre includere un interprete interattivo
PILOT
● Caratterizzato da una estrema semplicità● Ha avuto una certa diffusione negli anni 70-80, in
cui rappresentava un'alternativa al BASIC– Atari PILOT [Atari, 1983] distribuito su cartridge per la
famiglia Atari 8-bit
● Standard IEEE 1154-1991 – Standard for Programmed Inquiry, Learning, or Teaching (PILOT). – Lo standard è stato ritirato (ultima versione 2002).
Atari PILOT
PILOT
● Materiale su PILOT è ancora reperibile su internet● Pilot resource center
– “The world's only web page devoted to PILOT (it's true!)”
– http://rpilot.sourceforge.net/pilot.html
● Interpreti:– RPILOT [Rob Linwood, 1998]
– Confluito in Sky PILOT [Linwood, 2005], apparentemente abortito.● GPL● Ultima versione 1.4.2● Compilazione su Linux odierni con “qualche intoppo”
PILOT: il linguaggio
Key letter Key word Descrizione
T Type Visualizza testo
A Accept Accetta input da tastiera
M Match Lista di elementi da confrontare
J Jump Salto
U Use Chiamata a subroutine
C Compute Assegnamento
G Graphic Operazioni grafiche
F File File I/O
R Remark Commento
Y Yes Visualizza un testo se il precedente match è riuscito
N No Visualizza un testo se il precedente match à fallito
E End Terminazione di subroutine o di programma
PILOT: il linguaggio
● Tipi di dato:– Numeri
● Variabili intere: #a, #b, #media
– Caratteri/stringhe● Variabili stringa: $nome, $cognome
● Label:– Nel testo del programma: *main, *check
– Nelle istruzioni di salto: main, check
PILOT: il linguaggio
● Istruzioni:
*<label>
<key-letter>|<key-word>: [<arg> [<arg>..]]
<key-letter>|<key-word>(<condition>): [<arg> [<arg>..]]
– Esempi:*main
TYPE: Salve Mondo!
C(#d<>0): #quot=1000/#d
J: main
PILOT: il linguaggio
R: Un classico...T: Salve Mondo!
R: Input dati e assegnamentoT: Inserisci due numeri:A: #primoA: #secondoC: #somma=#primo+#secondoT: Il risultato e': #somma
R: Salto condizionatoT: Inserisci un numero da 1 a 10A: #numJ(#num <1): errorJ(#num >10): errorT: Ok!E:*errorT: Error!E:
PILOT: il linguaggioR: Calcolo del fattorialeC: #ris=1T: Inserisci un numero >=0:A: #inumC: #num=#inumJ(#num<0): errorJ(#num=0): exit*iterJ(#num=1): exitC: #ris=#num*#risC: #num=#num1J: iter*exitT: #inum fattoriale = #risE:*errorT: Numero non validoE:
R: Istruzioni condizionateC: #ris=0T: Immetti dividendoA: #dndJ(#dnd=0): endproT: Immetti divisoreA: #dsrC(#dsr<>0): #ris= #dnd/#dsr*endproT: Il risultato e' #ris
PILOT: il linguaggioR: Esempio di menu' e subroutine*mainT: MENU PRINCIPALET: A prima sceltaT: B seconda sceltaT: Q esciA: $opM: A B QJ(#matched=0): badchU(#which=1): doaU(#which=2): dobE(#which=3):J: main*badchT: scelta sbagliataJ: main*doaT: eseguo AE:*dobT: eseguo BE:
Anni settanta...
1970 – Semifinale di coppa del mondo: Italia – Germania 4-3
Anni settanta...
1973 – Esce “the dark side of the moon” dei Pink Floyd
Anni settanta...
● 1976 – Debutto del Concorde
Anni settanta...
1977 – Guerre stellari. La forze è con noi...
Anni settanta e ottanta
● Vedono il consolidarsi delle principali “famiglie di linguaggi”– FORTRAN
● FORTRAN77, BASIC
– ALGOL-PASCAL● Pascal (1970), MODULA-2 (1979), ADA (1983)
– BCPL● C, C++, …
– SIMULA● Simula72, Smaltalk(1972)
Linguaggi “di scripting”
● PL/1 (IBM, 1964)– PL/M (Digital Research, 1972), Rexx (1979)
● Bourn Shell (1977)– Awk (1979), perl (1987), Ruby (1993)
● Python (1991)
Il resto è storia...