75
Programmazione “VINTAGE” Quando i programmatori erano geni e non polli allevati in batteria ... Luigi Catuogno HCSSLug Salerno [[email protected]]

Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

  • Upload
    doduong

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Programmazione “VINTAGE”…

Quando i programmatori erano geni e non polli allevati in batteria

...

Luigi CatuognoHCSSLug Salerno[[email protected]]

Page 2: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Erano gli anni cinquanta....

Page 3: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Erano gli anni cinquanta...

1951 – Klaatu e Gort atterrano a Washington. Gli alieni esistono... e ce l'hanno con noi.

Page 4: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Erano gli anni cinquanta...

1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II

Page 5: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Erano gli anni cinquanta

1954 – Godzilla attacca il Giappone

Page 6: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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”.

Page 7: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Erano gli anni cinquanta...

1958 – il 20 febbraio viene promulgata la “Legge Merlin” che chiude le case di tolleranza.

Page 8: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 9: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

LISPLISP

John McCarthy (1927-2011)Turing Award 1971

Steve Russell (1937)

Page 10: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 11: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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)]

Page 12: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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.

Page 13: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 14: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

LISP

● Tipi di dati– Atomi

● Numeri● Simboli

– Liste● Sequenze ordinate di atomi/liste

● Espressioni– Liste il cui primo elemento è un operatore

Page 15: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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    (built­in)

>(print “Hello!”)Hello!>

Page 16: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

LISP

>(defun F (x y)   (/ (­ x y) (+ x y)))>(F 3 2)­1/5>

(if (expr cond.)    (expr­then)    (expr­else))     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>

Page 17: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

>

Page 18: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

LISP

>(dolist (x '(a b c d e))   (print x)ABCDE

>

(dolist (var (list­items) (exp)): append, cons, car,    Itera sull' espressione exp con var assume i valori in list­items

(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

>

Page 19: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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)

Page 20: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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)

Page 21: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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.

Page 22: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

1959

Barbie entra in commercio

Page 23: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

1959

Una equipe guidata da Grace Murray Hopper progetta il COBOL

Page 24: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

COBOLCOBOL

Grace Murray Hopper (1906-1992), et al.

Page 25: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 26: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 27: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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”

Page 28: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

COBOL01 IDENTIFICATION DIVISION.02 PROGRAM'ID. 'SAMPLE'.03 ENVIRONMENT DIVISION.04 FILE­CONTROL.  SELECT EMPLOYEE­CARDS ASSIGN TO READER.05 SELECT PAYROLL­FILE ASSIGN TO TAPE 1.06 DATA DIVISION.07 FD EMPLOYEE­CARDS08 01 EMPLOYEE­RECORD.09 02 EMPLOYEE­NAME PICTURE A(20).10 02 HOURS­WORKED PICTURE 9(2).11 02 HOURLY­RATE PICTURE 9V99.12 FD PAYROLL­FILE13 01 PAYROLL­RECORD.14 02 NAME­OUT PICTURE A(20).15 02 HOURS­OUT PICTURE 9(2).16 02 RATE­OUT PICTURE 9V99.17 02 WEEKLY­WAGES PICTURE 999V99.18 PROCEDURE­DIVISION.19 START. READ EMPLOYEE­CARDS AT END GO TO FINISH.

...

Page 29: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

COBOL

01 IDENTIFICATION DIVISION....

18 PROCEDURE­DIVISION.19 START. READ EMPLOYEE­CARDS AT END GO TO FINISH.20 MOVE EMPLOYEE­NAME TO NAME­OUT.21 MOVE HOURS­WORKED TO HOURS­OUT.22 MOVE HOURLY­RATE TO RATE­OUT.23 MULTIPLY HOURS­WORKED BY HOURLY­RATE GIVING WEEKLY­WAGES.24 WRITE PAYROLL­RECORD.25 GO TO START.26 FINISH. STOP RUN.

Page 30: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

COBOL

EMPLOYEE­NAMEHOURS­WORKEDHOURLY­RATE

NAME­OUTHOURS­OUTRATE­OUTWEEKLY­WAGES

MULTIPLY

EMPLOYEE­CARDS

PAYROLL­FILE

Page 31: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

COBOL

● Alcuni compilatori (Free) disponibili in rete:– OpenCOBOL

● http://opencobol.org

– TinyCOBOL● http://tiny-cobol.sourceforge.net

– COBOL for GCC● http://cobolforgcc.sourceforge.net

Page 32: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 33: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 34: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 35: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 36: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 37: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 38: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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...

Page 39: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Arrivano I favolosi anni 60...

1962 – James Bond ottiene la sua “Licenza di uccidere”

Page 40: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 41: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Arrivano I favolosi anni 60...

1963 – A Dallas, JFK, 35-esimo Presidente degli USA, muore (sembra) per mano di Lee Harvey Oswald

Page 42: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Arrivano I favoloso anni 60

1964 – Mary Quandt inventa la minigonna

Page 43: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Arrivano I favolosi anni 60...

1969 - Neil Armstrong è il primo uomo a mettere piede sulla Luna.

I Sovietici (ancora) rosicano

Page 44: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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)

Page 45: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

BASICBASIC

John George Kemeny (1926-1992)Thomas Eugene Kurtz (1928)

Page 46: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 47: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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]

Page 48: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 49: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 50: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 51: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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.

Page 52: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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)

Page 53: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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)

Page 54: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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)

Page 55: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

L'età dell'oro del BASIC

Page 56: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

L'età d'oro del BASIC

Page 57: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

PILOTPILOT

John Amsden Starkweather (1925-2001)

Page 58: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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)

Page 59: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 60: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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).

Page 61: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Atari PILOT

Page 62: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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”

Page 63: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 64: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 65: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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

Page 66: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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:

Page 67: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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=#num­1J: 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

Page 68: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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:

Page 69: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Anni settanta...

1970 – Semifinale di coppa del mondo: Italia – Germania 4-3

Page 70: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Anni settanta...

1973 – Esce “the dark side of the moon” dei Pink Floyd

Page 71: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Anni settanta...

● 1976 – Debutto del Concorde

Page 72: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Anni settanta...

1977 – Guerre stellari. La forze è con noi...

Page 73: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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)

Page 74: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

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)

Page 75: Programmazione “VINTAGE” - HCSSLUG · 1953 - Il 2 giugno veniva incoronata la Regina Elisabetta II . Erano gli anni cinquanta 1954 – Godzilla attacca ... Originariamente progettato

Il resto è storia...