Per capire le origini del C, bisogna parlare
della storia del sistema operativo UNIX in quanto è stato sviluppato su questo
sistema operativo ed, anzi, lo stesso sistema operativo ed i suoi programmi sono
scritti in C.
Nonostante tutto il linguaggio C non è, però, 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.
Ken Thompson nel 1969 iniziò a lavorare su un
computer di nome PDP-7, utilizzando il linguaggio assembler; l'idea di
base era di scrivere un linguaggio ad alto livello per l'implementazione di
sistemi operativi. Thompson prese spunto dal CPL (Combined Programming Language)
e dal BCPL (Basic CPL - 1967) per creare il linguaggio B che risultava, però,
essere ancora troppo pesante per l'hardware a disposizione.
Nel 1972,
un collaboratore di Thompson, Dennis Ritchie ottimizzò ulteriormente il B
(creando una prima versione chiamata NB), restituendogli alcune funzionalità del
BCPL ed inventando quello che ad oggi viene chiamato Linguaggio C, che
permise di riscrivere quasi totalmente lo UNIX di Thompson, questa volta per un
computer più avanzato, il PDP-11.
Inaspettatamente il C permise di riscrivere
lo UNIX per il PDP-11 in tempi rapidissimi e ciò spinse Thompson, Ritchie e
Kernighan a scrivere il kernel anche per l' "Interdata 8/32" ed il "Dec VAX
11/780", quest'ultimo, all'epoca, particolarmente popolare.
Tra il 1973 ed
il 1980 il linguaggio C si diffuse anche su architetture Honeywell 635 e IBM
360/370, grazie al lavoro ad opera del ricercatore Johnson che sviluppò il
compilatore ppc, alla nascita delle prime librerie (un certo Lesk
sviluppò il "portable I/O package", rinominato "standard I/O library") e alla
scrittura di un libro di riferimento da parte Kernighan e Ritchie nel 1978, il
"C Programming Language", o come viene comunemente chiamato "Libro
bianco".
In questi anni c'era un po' di confusione, primo perché il C non era
uguale a quello che conosciamo oggi, ma manteneva una compatibilità con i
linguaggi da cui derivava (il BCPL ed il B), ed il "Libro bianco" era nato
proprio dall'esigenza di scrivere codice portabile che permettesse l'evolversi
del linguaggio.
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 1989 si arrivò
quindi allo standard ISO/IEC 9899-1990 (che chiameremo ANSI89 per
comodità) che venne usato come base per tutti i 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.
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. A parer mio, quindi, vale la pena di
studiarlo, perché è sicuramente un bagaglio molto utile nella vita di un
programmatore.
A chi volesse approfondire la storia dei sistemi
operativi (e quindi dell'informatica in generale) proponiamo di leggere i primi
capitoli della seguente Guida di Sistemi
Operativi, mentre per la storia dei vari linguaggi consigliamo la lezione,
presente qui su Html.it, di Storia della programmazione.