Storia del Linguaggio di programmazione C Cervone Vincenzo TEC/0054

Slides:



Advertisements
Presentazioni simili
Linguaggio C e C++.
Advertisements

C C++ &.
I Linguaggi di programmazione
Traduzione ed Interpretazione
Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
EUCIP IT Administrator Modulo 4 - Uso Esperto della Rete Reti informatiche: Introduzione AICA © 2005.
Laboratorio di Linguaggi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica.
INTRODUZIONE Il framework.NET. Un po di storia Sin dalla prima versione del sistema operativo Windows (1990 circa), nacque la necessità di far comunicare.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità A1 Introduzione a Java.
Code::Blocks Ambiente di sviluppo.
Code::Blocks Ambiente di sviluppo.
Evoluzione dei linguaggi di programmazione
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
I linguaggi di programmazione
Da Unix a Linux Alessio Coraci V Dp.
Linguaggi di programmazione
Generalità Linguaggio e Macchina Astratta
Dr. Francesco Fabozzi Corso di Informatica
Cluster openMosix Linux Day ’04 Caserta Ing. Diego Bovenzi.
I Linguaggi Di Luca Brugnone 13/11/2007
Concetti di base: header file, funzione main(),set caratteri C++, token, operatori, espressioni etc. Flusso di controllo, cicli, costrutti.
Anno Accademico Corso di Informatica Informatica per Scienze Biologiche e Biotecnologie Anno Accademico
Anno Accademico Corso di Informatica Informatica per Scienze Biologiche e Biotecnologie Anno Accademico
Il Software: Obiettivi Programmare direttamente la macchina hardware è molto difficile: lutente dovrebbe conoscere lorganizzazione fisica del computer.
Introduzione allinformatica. Cosè linformatica ? Scienza della rappresentazione e dellelaborazione dellinformazione ovvero Studio degli algoritmi che.
Laboratorio di Linguaggi lezione I: "Hello, world!" Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Corso di Informatica (Programmazione)
Gestione di Progetti Software 2 (A.A. 2004/2005) - Lezione 2 1 JAVA: obiettivi di progetto del linguaggio Nota storica: Il linguaggio JAVA (inizialmente.
I linguaggi di alto livello
CAPITOLO 2 INTRODUZIONE AL LINGUAGGIO JAVA E ALL'AMBIENTE HOTJAVA.
2) Sistemi operativi Lab. Calc. AA2004/05 - cap.2.
Estensioni allarchitettura di Von Neumann Vito Perrone Corso di Informatica A per Gestionali.
SOFTWARE I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono il cosiddetto Hardware (alla lettera, ferramenta). La struttura.
Labortaorio informatica 2003 Prof. Giovanni Raho 1 INFORMATICA Termini e concetti principali.
Programmazione in Java
...dal bit al linguaggio R. In principio era il bit… …Per intenderci 0 e 1, il linguaggio macchina. Tra gli anni '40 e gli anni '50, la programmazione.
Introduzione al linguaggio assemby del microprocessore a parte
VIRTUALIZZAZIONE Docente: Marco Sechi Modulo 1.
Lo sviluppo del software e i linguaggi di programmazione
CONCETTI DI BASE 1.0 FONDAMENTI 1.1 HARDWARE 1.2 SOFTWARE 1.3 RETI
Gruppo G. Chiara, I. Ilaria, M. Silvia, P.Elena, S.Alessia UNIX.
Corso JAVA Lezione n° 11 Istituto Statale di Istruzione Superiore “F. Enriques”
Alla fine degli anni quaranta nasceva il mito del cervello elettronico, e tutte le attività connesse allutilizzo del computer venivano indicate tramite.
Linguaggi di programmazione dalla prima generazione alla quinta ed attuale.
INTERFACCE Schede elettroniche che permettono al calcolatore di comunicare con le periferiche, che possono essere progettate e costruite in modo molto.
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
LINGUAGGI DI PROGRAMMAZIONE Per comunicare comandi e dati ad un computer occorre un particolare linguaggio detto LINGUAGGIO MACCHINA, che è un insieme.
29 giugno – 7 luglio 2007Ignazio TestoniOrdine degli Ingegneri Provincia di Catania I linguaggi di programmazione  In principio era il bit anni '40 
Concetti Fondamentali sulla Programmazione
1 Macchine astratte, linguaggi, interpretazione, compilazione.
1 Linguaggi: guardando la semantica §esistono un insieme di concetti semantici e di strutture di implementazione in termini dei quali si descrivono in.
Il software Claudia Raibulet
Informatica e Informatica di Base
I linguaggi di alto livello
Fabio Scotti – Università degli Studi di Milano 1 Lezione 1 e 2 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani.
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
Programmazione dei Calcolatori Elettronici
I Sistemi Operativi. Definizione Per Sistemi Operativi (di seguito SO) si intendono quei pacchetti software, a loro volta costituiti da più sottoprogrammi.
I linguaggi di programmazione -GALBIATI ALBERTO -ESPOSITO MATTIA.
UML Unified Modelling Language Linguaggio per la modellazione unificato.
Analisi matematica Introduzione ai limiti
Programmazione orientata agli Oggetti Introduzione a Java.
 Ogni processo che deve essere eseguito da un sistema di elaborazione, deve essere caricato e risiedere almeno parzialmente nella memoria centrale 
Unità di apprendimento 6
1 Informatica di Base Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
ALGORITMI, LINGUAGGI E PROGRAMMI Facoltà di Lingue e Letterature Straniere Corso di laurea in Relazioni Pubbliche.
Transcript della presentazione:

Storia del Linguaggio di programmazione C Cervone Vincenzo TEC/0054 Università degli Studi di Napoli Parthenope SICSI V CICLO classe A042 Università degli Studi di Napoli Parthenope SICSI V CICLO classe A042 Università degli Studi di Napoli Parthenope SICSI V CICLO classe A042 Università degli Studi di Napoli Parthenope SICSI V CICLO classe A042 Università degli Studi di Napoli Parthenope SICSI V CICLO classe A042 Università degli Studi di Napoli Parthenope SICSI V CICLO classe A042 Università degli Studi di Napoli Parthenope SICSI V CICLO classe A042 Università degli Studi di Napoli Parthenope SICSI V CICLO classe A042 Università degli Studi di Napoli Parthenope SICSI V CICLO classe A042

Storia del linguaggio C La nascita del linguaggio C e’ strettamente collegata a quella del sistema operativo UNIX, in quanto è stato sviluppato su questo sistema operativo anzi, lo stesso sistema operativo ed i suoi programmi, sono scritti in C. Nonostante ciò, il linguaggio C non è legato solo alla programmazione dei sistemi operativi, ma con esso possono essere scritti (e sono stati scritti) grossi programmi di calcolo, word-processing e database. Il linguaggio C nasce dall’evoluzione di alcuni linguaggi di programmazione. Vediamo quali: Università degli Studi di Napoli Parthenope SICSI V CICLO classe A042 Università degli Studi di Napoli Parthenope SICSI V CICLO classe A042

Evoluzione storica del C Algol 60 Progettato da un comitato internazionale all'inizio del 1960. CPL Combined Programming Language, sviluppato a Cambridge e all'università di Londra nel 1963. BCPL Basic Combined Programming Language, sviluppato a Cambridge da Martin Richards nel 1967. B Sviluppato da Ken Thompson, Bell Labs, nel 1970. C Sviluppato da Dennis Ritchie, Bell Labs, nel 1972. Poi nel 1973 fu formato il comitato dell'American National Standards Institute (ANSI) con lo scopo di creare l'ANSI C, una standardizzazione del linguaggio C.

1960 - ALGOL 60 L'Algol 60 fu progettato da un comitato internazionale all'inizio del 1960 alcuni anni dopo l'introduzione del FORTRAN. Questo nuovo linguaggio all'epoca era complesso ed ebbe una grande influenza sul progetto dei futuri linguaggi di programmazione. I suoi autori prestarono molta attenzione alla regolarità della sintassi, alla struttura modulare e ad altre caratteristiche di solito associate ai linguaggi strutturati ad alto livello. Sfortunatamente, l'Algol 60 non si diffuse mai veramente negli Stati Uniti, a parere di molti per l'astrazione e la genericità del linguaggio.

1963 - CPL Il CPL (Combined Programming Language) è un linguaggio di programmazione sviluppato congiuntamente dall'Università di Cambridge e dall'Università di Londra fu pesantemente influenzato dall'ALGOL. Gli inventori del CPL intendevano riportare i concetti introdotti dell'Algol 60 alla realtà dei computer veri. Però, come l'Algol 60, il CPL era difficile da imparare e da implementare e per questo fu anch'esso un fallimento.

1966 - BCPL Il BCPL (Basic Combined Programming Language) è un linguaggio di programmazione sviluppato da Martin Richards dell'Università di Cambridge, in seguito alle difficoltà che aveva incontrato nell'utilizzo del suo predecessore, il CPL. Il primo compilatore venne implementato mentre Richards si trovava al MIT, nella primavera del 1967. Il linguaggio venne presentato per la prima volta al 1969 Spring Joint Computer Conference. L'architettura del BCPL influenzò pesantemente il linguaggio B, da cui Dennis Ritchie in seguito sviluppa il C. Martin Richards

1966 - BCPL Le caratteristiche di pulizia, potenza e portabilità rendono semplice la realizzazione di compilatori compatti (si vocifera che alcuni compilatori potessero funzionare anche con soli 16 KB di memoria). Alcuni sistemi operativi vennero scritti, completamente o in parte, utilizzando BCPL (ad esempio il TRIPOS o l'AmigaOS).

1966 - BCPL La principale caratteristica che rendeva il compilatore particolarmente portabile risiedeva nel fatto che esso era logicamente diviso in due parti: la prima parte (frontend) si occupava di analizzare il codice sorgente e di generare un codice intermedio (O-code) per una macchina virtuale, la seconda (backend) traduceva l'O-code nel codice per la CPU bersaglio, su cui il programma doveva girare. In questo modo, quando era necessario scrivere un compilatore per una nuova CPU, era sufficiente riscrivere il backend. Questa tecnica divenne in seguito molto comune (ad esempio in Pascal o Java), ma il BCPL fu il primo linguaggio a specificare una macchina virtuale a questo scopo.

1966 - BCPL Il linguaggio si caratterizza per avere un unico tipo di dati, il tipo word (un numero fisso di byte, di solito scelto per allinearsi con la parola della macchina). L'interpretazione del dato veniva fatta in base al tipo di operatori utilizzati. Ad esempio, utilizzando il segno di addizione +, i dati venivano sommati come se si trattasse di numeri interi, mentre l'operatore ! (di dereferenziazione) trattava i dati come puntatori. Allo scopo di rendere la cosa possibile, l'implementazione del BCPL non prevedeva il type checking. Nel 1979 esistevano implementazioni di BCPL per almeno 25 diverse architetture, oggi il BCPL è stato interamente soppiantato dal C. Il BCPL è il linguaggio in cui si dice sia stato scritto il primo programma hello world.

La filosofia del BCPL può essere riassunta in queste righe, liberamente tradotte dal libro "BCPL, the language and its compiler": “La filosofia del BCPL non è quella del tiranno che pensa di sapere come vanno fatte le cose e detta ciò che è permesso e ciò che non lo è: piuttosto il BCPL è un servo che offre i suoi servigi al meglio delle sue possibilità, senza lamentarsi, anche quando si trova di fronte ad un'apparente contraddizione. Si assume che il programmatore sappia sempre quello che sta facendo: egli non è costretto a sottostare a rigidi vincoli.”

1970 - B Kenneth Thompson, quando progettò il linguaggio B per una prima implementazione di UNIX, stava cercando di semplificare ulteriormente il CPL. Egli riuscì a creare un linguaggio molto scarno che si adattava bene a essere utilizzato sull'hardware di cui disponeva. Tuttavia, sia per il BCPL sia per il B si esagerò troppo nella ottimizzazione, ottenendo così linguaggi limitati, utili solo per trattare alcuni tipi di problemi. Kenneth Thompson

Un PDP-7 come quello usato da Thompson per programmare il primo UNIX Subito dopo che Ken Thompson ebbe implementato il linguaggio B, fu presentata una nuova macchina, chiamata PDP-11. UNIX e il compilatore B furono subito trasferiti sulla nuova macchina. Anche se la PDP-11 era una macchina più grande della precedente PDP-7, rimaneva ancora abbastanza piccola rispetto agli standard attuali: aveva soltanto 24 K di memoria, dei quali 16 K erano utilizzati dal sistema, e 512 K di disco fisso. Un PDP-7 come quello usato da Thompson per programmare il primo UNIX Si pensò di riscrivere UNIX in B, ma il linguaggio B era lento per il suo progetto interpretativo. C'era anche un altro problema: il B era orientato alla parola, ma la PDP-11 era orientata al byte. Per questi motivi, nel 1971 si cominciò a lavorare a un successore del B, chiamato C.

1972 - C Un collaboratore di Ken Thompson, Dennis Ritchie, restituì alcune generalità del BCPL al linguaggio B, con lo scopo di sviluppare una nuova versione, che venne ovviamente denominata "C". La potenza e flessibilità del C apparve subito evidente e per questo il sistema operativo di Unix, scritto in assembly, venne riscritto immediatamente in C. Dennis Ritchie Fino alla fine degli anni '70, il C invase molti college e università per il suo stretto legame con Unix e la disponibilità di un compilatore. Presto molte organizzazioni indipendenti iniziarono ad usare una loro versione di C, creando notevoli problemi di compatibilità.

Ken Thompson con Dennis Ritchie Il C viene classificato come linguaggio ad alto livello, la scrittura delle istruzioni cioè, era indipendente dalla architettura del calcolatore su cui le istruzioni stesse saranno eseguite. Ken Thompson con Dennis Ritchie

Il grande successo del C è dovuto a diversi fattori: La felice scelta del modo di astrazione dall'hardware, che pur essendo del tutto logico e generico rimane molto vicino all'hardware stesso. Infatti, il linguaggio C si basa su poche istruzioni chiave molto semplici, che spesso (come gli operatori di autoincremento, autodecremento e aritmetici con assegnazione) ricalcano l'assembly delle CPU e sono traducibili direttamente con una singola istruzione di linguaggio macchina; Il ruolo centrale dato al concetto di puntatore. Questo viene generalizzato fino a concidere con l'indirizzamento indiretto, un modo di accedere alla memoria hardware, caratteristico di tutte le moderne CPU. Ciò rende il C un linguaggio particolarmente efficiente.

Rispetto al linguaggio assembly il C ha in più di una struttura logica definita e leggibile, funzioni in stile Pascal e soprattutto il controllo sui tipi, che manca completamente in assembly. La grammatica e la sintassi del C sono molto libere e flessibili, permettendo di scrivere istruzioni complesse e potenti in poche righe di codice (ma anche istruzioni assolutamente criptiche e illeggibili). In definitiva, il successo del C fu decretato dall'essere un linguaggio creato da programmatori esperti, per essere usato da programmatori esperti. Steve Johnson nella metà degli anni ‘70 scrisse un compilatore C trasportabile su sistemi diversi dal PDP-11 e da allora il C cominciò ad essere utilizzato come linguaggio in altri sistemi operativi come MS-DOS e CPM/80.

(1973 - 1980) Il primo compilatore che ebbe una certa diffusione era presente nella versione 6 (V6) di Unix per computer PDP-11 e solamente nel 1978 con il passaggio alla V7, Unix ed il C furono portati su macchine diverse dal PDP-11, e precisamente su Interdata 8/32 e VAX 11/780, quest’ultima con una nuova architettura a 32 bit.

Negli anni '80 i compilatori erano basati principalmente sul pcc di Johnson, ma nacquero molti compilatori indipendenti che non erano conformi al pcc, ma che permisero la diffusione del C praticamente su tutte le macchine più popolari; per questo il comitato ANSI (American Standards Institute) X3J11, nel 1983, iniziò a sviluppare uno standard per il linguaggio C, aggiungendo importanti caratteristiche ed ufficializzando molte caratteristiche presenti nei diversi compilatori.

Nel medesimo periodo ci fu un'altra importante standardizzazione che mirava a definire l'interfaccia tra linguaggio e sistema operativo. Prendendo spunto proprio dall'ANSI89, fu creata la "Portable Operating System Interface" (POSIX) ad opera dell'IEEE (Institute of Electrical and Electronics Engeneers) che definisce, inoltre, i concetti di thread, socket, estensioni realtime e molto altro, in modo unico e indipendente dall'implementazione

Questa grande libertà , la complessità sintattica del linguaggio (che come abbiamo visto contiene poche istruzioni di base) e il ruolo centrale dei puntatori, che è necessario usare praticamente fin dai primi programmi, ne fanno viceversa un linguaggio ostico e sconsigliabile ai neofiti, che cadono quasi subito in una serie di trappole che, se pure ovvie per un esperto, sono molto difficili da individuare ad un occhio inesperto.

Grazie alla particolare efficienza del codice prodotto dai sui compilatori, il C venne utilizzato per riscrivere la maggior parte del codice del sistema UNIX, riducendo l'uso dell'assembly ad un piccolo gruppo di funzioni. La sua importanza tuttavia, crebbe solo dopo il 1978 con la pubblicazione da parte di Brian Kernighan e Dennis Ritchie del libro The C Programming Language nel quale il linguaggio venne definito in modo preciso.

1980 - C++ Il C++ è un'estensione del C, sviluppato da Bjarne Stroustrup all'inizio degli anni '80, presso i Bell Laboratories. Il C++ fornisce una serie di funzioni che potenziano il C, ma, cosa ancora più importante, fornisce le capacità di gestione della programmazione di tipo object-oriented, con ampio utilizzo delle classi.

Il linguaggio C++ venne utilizzato all'esterno del gruppo di sviluppo di Stroustrup nel 1983 e, fino all'estate del 1987, il linguaggio fu soggetto a una naturale evoluzione. Uno degli scopi principali del C++ era quello di mantenere piena compatibilità con il C. L'idea era quella di conservare l'integrità di molte librerie C e l'uso degli strumenti sviluppati per il C.

Grazie all'alto livello di successo nel raggiungimento di questo obiettivo, molti programmatori trovano la transizione al linguaggio C++ molto più semplice rispetto alla transizione da altri linguaggi (ad esempio il FORTRAN) al C. Il C++ consente lo sviluppo di software su larga scala. Grazie a un maggiore rigore sul controllo dei tipi, molti degli effetti collaterali tipici del C, divengono impossibili in C++.

Il miglioramento più significativo del linguaggio C++ è il supporto della programmazione orientata agli oggetti (Object Oriented Programming: OOP). Per sfruttare tutti i benefici introdotti dal C++ occorre cambiare approccio nella soluzione dei problemi. Ad esempio, occorre identificare gli oggetti e le operazioni ad essi associate e costruire tutte le classi e le sottoclassi necessarie.

Nonostante negli anni il C sia stato implementato sia con lo standard ANSI, che in maniera proprietaria, grazie a questi strumenti il C è diventato (ed è tutt'oggi) il linguaggio più utilizzato al mondo, almeno fino all'avvento del C++ (chiamato originariamente "C con classi") che è stato anche la spinta del miglioramento nel tempo del C attraverso lo standard ANSI, di cui è stata rilasciata un'ultima versione denominata ANSI99, che è supportata dalle ultime versioni del gcc.

Il C ed il suo UNIX hanno influenzato tutto il mondo dell'informatica, considerando che da esso sono scaturiti colossi come SCO e Sun Microsytem, e prodotti come Linux e BSD.