Storia del Linguaggio di programmazione C
Cervone Vincenzo TEC/0054
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
programmazione. Vediamo quali:
Università degli Studi di Napoli Parthenope
di
alcuni
linguaggi
di
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
1966 - BCPL
Il BCPL (Basic
Language)
è
Combined Programming
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.
Università degli Studi di Napoli Parthenope
Martin Richards
SICSI V CICLO classe A042
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).
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
1966 - BCPL
La principale caratteristica che
particolarmente portabile risiedeva
logicamente diviso in due parti:
rendeva il compilatore
nel fatto che esso era
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.”
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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à.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
Ken Thompson con Dennis Ritchie
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
(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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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++.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
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.
Università degli Studi di Napoli Parthenope
SICSI V CICLO classe A042
Scarica

breve storia del c - Parthenope - Università degli Studi di Napoli