Storia dei linguaggi di programmazione

  • Analytical Engine - Ada Lovelace

    Prima idea di linguaggio con l’analytical engine di Babbage, con Ada Lovelace che scrive il primo programma per questa macchina.
  • Zuse - Primo linguaggio

    Il primo linguaggio di programmazione è il Plankalkul di Konrad Zuse, che però non è mai stato implementato.
  • Period: to

    Initial Orders - EDSAC - Wilkes, Renwick, Wheeler

    Nel EDSAC nasce per la prima volta l’idea "initial order": il codice di una determinata istruzione era associato a una lettera assegnata in modo mnemonico (per esempio "S" significava subtract). Un istruzione macchina era costituita da un tre caratteri di 5 bit ciascuno.
  • Mark I - Aiken

    Le istruzioni erano codificate su nastro perforato.
  • Period: to

    Flow Chart - Goldstine e Von Neumann

    "=" come assegnamento
  • Period: to

    Programmazione Strutturata - Haskell Curry

    Descrive algoritmi per convertire la sua notazione in linguaggio macchina quindi prima descrizione di fase di generazione del codice del compilatore, ma
    senza analisi sintattica
  • Short (Order) Code, Mauchly, Shmitt

    primo linguaggio di programmazione ad alto livello e primo interprete, descrivere le equazioni matematiche da calcolare in modo simbolico, assegnando un numero specifico, scritto su sei bit, ad ogni simbolo dell’equazione
  • Böhm - Linguaggio ad alto livello, metodo di traduzione e compilatore

    Nel 1950 l’italiano Corrado Böhm concepisce un linguaggio di alto livello e un metodo di traduzione in linguaggio macchina. Nel suo lavoro:
    • Vengono introdotti "if then else" e "goto";
    • Gli statement di assegnamento;
    • Le subroutine;
    • Un compilatore scritto nello stesso linguaggio dei programmi che deve tradurre.
    Il compilatore di Böhm genera codice proporzionalmente al numero di passi da eseguire. Inoltre il linguaggio di Böhm è universale (tuttavia è solo su carta).
  • Costrutto FOR - Rutishauer

    Per Z4 algoritmo che traduce in linguaggio macchina un formalismo algebrico derivato dal Plankalkül, codice rilocabile
  • AUTOCODE - Glennie - Primo compilatore

    Usare lo stesso computer per tradurre un programma e far girare il programma.
    AUTOCODE:
    • Rendeva più veloce e semplice la programmazione;
    • Costituiva una perdita di efficienza del 10% rispetto al linguaggio macchina.
  • SOAP - primo assembler moderno

  • Period: to

    BACAIC

    sistema in cui espressioni algebriche vengono tradotte in subroutine di linguaggio macchina;
  • Kompiler, Elsworth

    da equazioni algebriche in linguaggio macchina
  • ADES - primo linguaggio di programmazione imperativo

  • Compilatore IT per IBM 650

    IT funzionava in due fasi:
    1. Veniva generato codice assembler intermedio;
    2. Da quel codice veniva generato codice macchina
    IT permetteva di scrivere in un linguaggio semplice con un’implementazione efficiente.
  • FORTRAN - Backus, Herrick, Ziller

    • In teoria facile scrivere programmi in FORTRAN e sarebbe dovuto essere efficiente;
    • In teoria facile da imparare;
    • Non doveva essere svincolato dall’hardware.
    Il manuale del FORTRAN aveva una grafica professionale, ma era pieno di errori e incompleto. Tuttavia il FORTRAN influenzo la maggior parte dei linguaggi successivi e fino agli anni ’70 fu utilizzato come standard per applicazioni scientifiche.
    Ha influenzato lo sviluppo della maggior parte dei linguaggi successivi
  • LISP - primo dei linguaggi funzionali.

    McCarthy, scrivere programmi con formalismo matematico.
    Nasce per la manipolazione di espessioni simboliche con l’uso del concetto di "ricorsione". LISP usava sia liste che alberi. Offriva un garbage collector e un sistema di tipi dinamico. Permetteva la meta-programmazione.
    • Viene usata una notazione polacca (prefissa);
    • Alcuni operatori potevano venire implementati direttamente in linguaggio macchina.
    In LISP tutto veniva rappresentato da liste concatenate.
  • COBOL - COmmon Business Oriented Language

    Fu concepito per applicazioni di tipo amministrativo e commerciale. Aveva una sintassi "english-like", ciò lo rendeva facilmente comprensibile.
    ADD A TO B GIVING C
    Il COBOL venne sviluppato dal CODASYL (Conference on Data Systems Languages) e il DoD (Department of Defense) USA obbligo le compagnie produttrici di computer a fornire il COBOL nelle loro installazioni.
    Portatile, efficiente, facilmente comprensibile e utilizzabile. Non adatto per applicazioni scientifiche.
    CRITICATO.
  • ANGOL 60

    Frutto di collaborazione tra l’ACM e l’IFIP. Molto legato all’hardware sottostante.
    Call by:
    • value (per i parametri);
    • name (per le variabili);
    • reference (per i parametri, passaggio di un puntatore);
    Primo linguaggio a richiedere esplicitamente il tipo delle variabili.
    Distinzione tra assegnamento e uguaglianza.
    Prime primitive di controllo strutturate: if then else, while loop e for e Blocchi di istruzioni.
    GOTO consente programmazione non strutturata. Rende il codice meno leggibile.
  • ANGOL

    Negli anni ’60 fu il linguaggio di riferimento per descrivere gli algoritmi
    Primo linguaggio a definire in modo preciso i concetti di call by value, by name, e by reference
    Primo linguaggio a usare i blocchi di istruzione e notazione formale “Backus-Naur form” per descriverne la sintassi
    Introduce la distinzione tra il simbolo di uguaglianza e quello di assegnamento
    Definito da Tony Hoare “così avanti nei tempi da essere migliore anche della maggior parte dei suoi successori”
  • BASIC - Kemeny, Kurtz

    Linguaggio di programmazione semplice e facile da imparare. Il suo obiettivo era quello di consentire a studenti, non di informatica, di scrivere programmi. Anni '70 con microcomputers. Linguaggio didattico. Scrittura di algo e calcoli matematici.
    Leggero ma efficiente, semplice, Basic computer games.
    CRITICATO -> favoriva la scrittura di programmi non strutturati e confusi.
  • SIMULA - Kristen Nygaard e Ole-Johan Dahl

    Primo linguaggio ad oggetti. Il suo scopo principale era quello di gestire simulazioni.
  • SIMULA 67

    seconda versione del Simula. Il Simula 67 è il primo linguaggio ad oggetti a essere usato in ambito commerciale. Il Simula 67 introduce il concetto di classe e di sottoclasse. Le istanzee di una classe sono dette oggetti e l’operazione new permette di creare un oggetto. In Simula 67 erano anche presenti i puntatori (chiamati ref) ai record di attivazione (oggetti).
    Introduce anche la data abstraction e l’ereditarietà. Uno degli utilizzi del simula era la modellazione di sistemi concorrenti.
  • PASCAL - Wirth

    Successore dell’ALGOL.
    Puntatori.
    Tipo CHAR.
    Strutture dati dinamiche, call by value e call b reference. Sistema di tipi molto ricco, ma molto rigido (type checking in fase di compilazione).
    Efficiente da compilare ed esieguire.

    Semplicità.
    Chiarezza.
    Efficienza.
    Scrittura di programmi complessi, ben strutturati e ben organizzati.
    Strumento per insegnare la programmazione.
    Compilatore non generava direttamente codice macchina, ma un codice oggetto per una macchina virtuale (P-code)
  • PASCAL

    • facilmente trasportabile su piattaforme diverse grazie all’uso di codice oggetto virtuale: il P-code
    • fu uno dei linguaggi di riferimento degli anni ‘70, come l’Algol lo fu negli anni ‘60
    • introdusse tra le altre cose l’idea di un codice oggetto virtuale che favoriva l’uso del linguaggio su piattaforme diverse
    • rispetto ad altri linguaggi incoraggiava la scrittura di programmi senza errori grazie ad un sistema di tipatura molto rigoroso
  • Period: to

    C

    1969 - UNIX inizialmente scritto in assembler, poi in B.
    1971 - Ritchie modifica il B e nasce il C.
    • Portabilità - Estremamente portatile
    • Efficienza
    • Modularità
    • Sintetico
    • Compattezza
    • Tipi flessibili - errori nei programmi
    • Gestione efficiente della memoria
    • Bitwise programming
    usabile praticamente su qualsiasi piattaforma, programmi sintetici e veloci da eseguire
  • PROLOG - Alain Colmerauer e Philippe Roussel.

    Linguaggio dichiarativo basato sulla logica del primo ordine. calcolatori di quinta generazione (parallelismo, AI, linguaggio naturale, performance valutate in Logic Inferences Per Seconds, fallito per RISC e perché parallelismo difficile), dimostratore automatico di teoremi che usa come inferenza la regola di risoluzione, può sia calcolare valori che verità di un'asserzione, ricorsività, elegante e conciso.
  • Smalltalk - Alan Kay

    Fornì il primo ambiente di programmazione dotato di interfaccia grafica (GUI), implementato sullo Xerox Alto.
    Linguaggio orientato agli oggetti in cui esistono solo oggetti. Gli oggetti hanno dati privati e comunicano mediante metodi. Si utilizzava un sistema di tipi dinamico.
  • ADA - Ichbiah, linguaggio definitivo

    Prende caratteristiche da:
    ALGOL (struttura generale e sintassi),
    Pascal (sistema di tipi),
    Simula (gestione di concorrenza e parallelismo),
    gestire grandi progetti software, non a oggetti (fino al 1995), sicurezza e affidabilità, linguaggio libero da errori.
    A causa della sua complessità e delle sue troppe caratteristiche, non si diffuse.
  • C++ Bjarne Stroustrup

    Evoluzione del C orientata all’object-oriented.
    programmazione a oggetti + qualità del C, linguaggio poco chiaro ed elegante
  • Period: to

    JAVA

    nacque nel contesto di un progetto che permettesse di scaricare programmi dalla rete ed eseguirli sul browser localmente. Fu usato inizialmente per scrivere applicazioni scaricate da Internet (insieme al codice HTML delle pagine web visitate) ed eseguite localmente dal browser.
    Successo iniziale è strettamente legato alla nascita quasi contemporanea del World Wide Web
    Estrema portabilità grazie all’uso di codice intermedio, il bytecode.
  • World Wide Web

  • Linguaggi di Scripting general purpose

    Un linguaggio di scripting è un linguaggio di programmazione interpretato che viene utilizzato per scrivere script. Gli script sono programmi che vengono eseguiti da un interprete. Per esempio il linguaggio bash è un linguaggio di scripting.
    Sviluppati principalmente negli anni ‘90, sintetizzano caratteristiche diverse: permettono infatti una prototipizzazione rapida, sono strutturati, in alcuni casi orientati agli oggetti, e sono spesso interpretati