You are in

Home Io, Informatico CAPITOLO 6 - Il Linguaggio C – Dalla Teoria alla Pratica

CAPITOLO 6 - Il Linguaggio C – Dalla Teoria alla Pratica

Print PDF
CAPITOLO 6 -Il Linguaggio C – Dalla Teoria alla Pratica
Una volta da qualche parte ho letto quanto segue:

“La differenza tra la teoria e la pratica è molto più grande in pratica che in teoria”

La frase che può sembrare in un primo momento solo un gioco di parole nasconde una profonda verità: quando si concretizza praticamente qualsiasi attività immaginata in precedenza sulla carta ci si scontra inevitabilmente con l'ostilità del mondo reale. Senza tener conto poi che in agguato esiste sempre un certo Murphy: "Se qualcosa può andare storto allora lo farà".

La Legge di Murphy è un insieme di affermazioni ironiche molto note nel campo informatico e più in generale tecnico-scientifico. L'aspetto più noto della Legge di Murphy si può riassumere nella seguente espressione: "Se qualcosa può andare storto allora lo farà" ("If anything can go wrong, it will").

Si tratta, come è evidente, di un modo per esorcizzare gli innumerevoli problemi tecnici che si verificano durante il proprio lavoro. Le origini di tale legge sono controverse.  Murphy dovrebbe essere un ingegnere  della U.S. Air Force che conducendo un esperimento non andato propriamente a buon fine addusse la responsabilità dell'accaduto ad un suo assistente dicendo: "Se quel tipo ha una qualsiasi possibilità di fare un errore, lo farà" ("If that guy has any way of making a mistake, he will").

Ho usato il condizionale in quanto sembra non esserci nulla di certo nei personaggi "storici" coinvolti in questa storia. Di certo c'è tuttavia la notorietà planetaria di questa legge e le sue innumerevoli varianti sul tema. Delle tante vi cito la seguente: "La probabilità che una fetta di pane imburrata cada dalla parte del burro verso il basso su un tappeto nuovo è proporzionale al valore di quel tappeto." Ma ancora: "Ogni cosa che potrà andare storta lo farà, nel momento peggiore e nel peggior modo possibile" ("Whatever can go wrong will go wrong, and at the worst possible time, in the worst possible way").

Il senso di tutto quanto detto è che il mondo reale è  un sistema costituito da una miriade di dettagli di cui si deve tener conto affinché gli oggetti che costruiamo si comportino secondo gli schemi teorici che abbiamo immaginato.  Anche il più banale dei dettagli può far fallire miseramente progetti di grandi dimensioni: tempo fa  una missione spaziale fallì a causa di una errata conversione tra unità di misura.

Quello che voglio dire è che se la teoria è un aspetto imprescindibile e fondamentale essa deve essere accompagnata da una giusta dose di praticità sia per verificare la correttezza di quanto formulato teoricamente sia per comprendere meglio un dato aspetto del sistema in esame.

Questa sezione include una introduzione generale al Linguaggio C. Tale linguaggio può risultare nel contesto di questo nostro viaggio di estrema utilità per comprendere diversi aspetti altrimenti sfuggenti  di quanto stiamo osservando e studiando. Da un lato esso ci permette di verificare concretamente cosa sia un linguaggio artificiale e dall'altro di sperimentare personalmente alcuni esempi ed applicazioni al fine di comprenderli appieno. Nondimeno il fatto di verificare con i nostri occhi determinate realtà pratiche ci aiuta enormemente nel fissare certi ricordi utilizzando la memoria visiva, senz'altro di grandissima importanza.

Un cenno introduttivo sul C e le sue origini

Il linguaggio C venne sviluppato all'interno dei laboratori Bell negli Stai Uniti ad opera di  Dennis Ritchie tra il 1972 e il 1973.

Il “C” discende da un altro linguaggio chiamato BCPL implementato da Martin Richards.  Infatti, Ken Thompson realizzò una prima evoluzione del BCPL nel 1970 denominandola Linguaggio B. Successivamente Ritchie, migliorò  il linguaggio denominandolo C a confermare una continuità con il linguaggio precedente.

Il C rientra a tutti gli effetti nei linguaggi ad alto livello così come descritti nel capitolo precedente. Tuttavia esso viene spesso descritto come   “linguaggio di basso livello” intendendo con ciò che esso consente di interagire con componenti molto vicine all'hardware del sistema. Esso può quindi generare programmi di grande efficienza e velocità. D'altro canto consente un utilizzo anche in innumerevoli contesti generici potendo gestire programmi di notevoli dimensioni e complessità.

Il C ha iniziato a godere di enorme popolarità in seguito alla pubblicazione del libro  “The C Programming Language”, tradotto anche in Italia, e realizzato da Ritchie insieme a Brian Kernighan.

L'ottimo libro in questione ha rappresentato il principale riferimento del linguaggio. Ne è seguita una seconda edizione relativa alla standardizzazione ottenuta dal C   da parte dell'ente internazionale ISO. Per comprendere l'importanza di questo libro (e quindi anche il motivo per cui ne riporto in figura la copertina) basta pensare al fatto che per esso si è addirittura coniato un apposito termine per definirlo: “The white book” (ovviamente per il colore della sua copertina).


Perché C e non Pascal

Il C viene spesso considerato un linguaggio complicato e con una curva di apprendimento abbastanza  alta intendendo dire che la sua comprensione ed il suo  relativo utilizzo richiedono un certo tempo non trascurabile. Questo è probabilmente uno dei motivi che spingono la maggior parte degli autori di testi generici di informatica a privilegiare l'utilizzo di un altro linguaggio, almeno in apparenza più semplice: il Pascal1.

L'utilizzo del Pascal viene motivato considerando che la sua semplicità aiuta a comprendere gli aspetti generali dei problemi di programmazione evitando di impegolarsi con i dettagli specifici del linguaggio. Ritengo tuttavia che con uno sforzo minimo si possa superare tale difficoltà ottenendo al contempo enormi benefici. Tali benefici risiedono innanzitutto nell'apprendimento di un linguaggio di enorme potenza e diffusione come il C. Il C è infatti facilmente disponibile in vari e differenti ambienti (Windows, Unix, Linux) consentendo di trasportare i propri lavori con estrema semplicità.

Ancora, esso consente di accedere ad un'enorme mole di esempi reali considerando che con il C sono scritti quasi interamente i più importanti e diffusi Sistemi Operativi di cui sopra.

Last Updated on Tuesday, 04 May 2010 16:04