|
LINGUAGGIO C GUIDA:
autore : Bl@ckLight
Cenni di programmazione
Anche se molti di voi hanno già dimestichezza con il computer e con
l'arte informatica, il mio intento è quello di partire da zero e condurvi
gradualmente nel meraviglioso mondo della programmazione in C.
Innanzitutto, si definisce "programma" qualsiasi sequenza di
istruzioni scritte in linguaggio macchina (l'unico linguaggio
comprensibile ad un calcolatore, le famose sequenze di 0 e 1) atta ad
essere elaborata da un calcolatore o comunque da una struttura
informatica.
Ogni volta che accendiamo il PC facciamo uso di programmi. Word e Outlook
sono programmi. Winamp è un programma. Windows stesso non è altro che un
programma (un "programma di base" o "software di
base"). Anche i virus in fondo sono solo "simpatici"
programmini!
Si pone qui il problema di come scrivere un programma.
In principio, quando i computer erano enormi "mobili" chiusi a
chiave dentro le stanze delle università o dei laboratori di ricerca, era
il programmatore stesso a dettare le istruzioni binarie al calcolatore. Ma
scrivere programmi usando solo sequenze di 0 e 1 non è certo la cosa più
comoda del mondo, oltre ad essere del tutto innaturale per l'uomo.
Passiamo alla metà degli anni 50: i programmatori creano un sistema più
"comodo" per creare i loro progetti, l'Assembly.
L'Assembly (o GLI Assembly, dato che la sintassi di questo linguaggio
cambia in funzione di molte variabili, quali il sistema operativo in uso,
l'architettura della macchina che si va a programmare e l'assemblatore in
uso) non è altro che una rappresentazione simbolica del linguaggio
macchina, dove ad ogni istruzione binaria corrisponde un'istruzione
mnemonica, relativamente più semplice da ricordare. Così la sequenza 1100
1101 0010 0001 (linguaggio macchina) diventa int 21h (sintassi
Assembly Intel).
Ma anche l'Assembly non è il massimo della vita! E' pur sempre un
linguaggio orientato alla macchina, non al problema, e, col passare degli
anni, i progetti si fanno via via più grandi, e l'Assembly da solo non può
gestirli.
Ecco quindi che compaiono sulla scena i primi linguaggi ad "alto
livello", ossia linguaggi più orientati al problema (e quindi
all'utente) che all'architettura intrinseca della macchina. Sono il COBOL
(tanto vituperato dai programmatori moderni), il BASIC e il FORTRAN,
linguaggi molto più semplici dell'Assembly ma non altrettanto potenti.
Anche questi linguaggi hanno le loro pecche: il COBOL ha delle regole
sintattiche troppo rigide per essere usato dalle masse di programmatori,
il FORTRAN è ottimo per la progettazione di applicazioni a carattere
scientifico, ma non per la progettazione di codice di sistema, il BASIC,
nonostante la sua incredibile facilità di apprendimento, non è potente,
e non ha una struttura vera e propria.
Inoltre, questi tre linguaggi si basano tutti sull'istruzione GOTO
("vai a"), ripresa dall'istruzione JMP dell'Assembly, quindi i
programmi scritti con questi linguaggi tendono al cosiddetto "codice
spaghetti", un codice spezzettato, pieno di diramazioni e salti
condizionati che rendono spesso il programma illeggibile, un vero dramma
quando si tratta di fare manutenzione!
Nasce quindi il PASCAL, un linguaggio ad alto livello dotato di una
struttura e di istruzioni vere e proprie per il controllo del flusso del
programma, ma non progettato per un vasto campo di azione, quindi poco
efficiente per la scrittura di codice di sistema. Al giorno d'oggi il
PASCAL è usato solo per scopi didattici, grazie alla sua semplicità di
apprendimento e alla sua sintassi "pulita".
Arriviamo all'inizio degli anni 70, l'hardware diventa sempre più potente
e la richiesta di software cresce giorno dopo giorno, ma non esiste ancora
un linguaggio ad alto livello che soddisfi qualsiasi richiesta di
software.
Fino al 1972, "l'ora zero" del linguaggio C: in un laboratorio
della AT&T Bell Dennis Ritchie fa girare un primo prototipo del C
su un DEC PDP-11 con sistema operativo UNIX. Il C fu il risultato dello
sviluppo di due linguaggi di programmazione più vecchi il B (sviluppato
da Ken Thompson) e il BCPL (sviluppato da Martin Richards). Per anni il
linguaggio C fu strettamente legato al sistema operativo UNIX (infatti,
dopo la progettazione del C, tutte le successive versioni di UNIX furono
scritte in questo linguaggio, e ancora oggi il kernel di Linux, sistema
basato su UNIX, è scritto in C). Nel 1989, alla luce dei vari
"stili" del C formatisi, l'ANSI (American National Standards
Institute) mise a punto l'ANSI-C, una versione standard del C priva di
ambiguità, che è in uso tuttoggi.
La novità del C, ed anche il motivo di tutto il suo successo, è che il C
è un linguaggio di programmazione sviluppato dai programmatori stessi, e
non da un'istituzione governativa o da un'università, per i programmatori
stessi: questo rende il C il linguaggio dei programmatori. Unita a
questa caratteristica, c'è la versalità del C: un linguaggio usato tanto
per semplici programmini didattici, tanto per programmare sistemi
operativi: è un linguaggio che si presta ad un'infinità di usi, grzie
anche ad una libreria davvero vastissima. Il C infatti, a differenza degli
altri linguaggi di programmazione, ha davvero pochissime keyword
(parole riservate), ma una vastissima gamma di funzioni che spaziano dalle
funzioni per l'I/O standard alle funzioni matematiche, dalla manipolazione
dei file alla gestione della memoria, dagli strumenti per la creazione di
interfacce grafiche (GUI) alla manipolazione delle regex: queste
funzioni sono ormai parte integrante del linguaggio. Inoltre, chiunque può
aggiungere nuove funzioni a quelle che corredano il C, e questo è un
altro elemento che rende il C tanto flessibile e potente.
E' inoltre l'unico linguaggio ad "alto livello" che mette a
disposizione delle funzioni per la gestione della memoria e dei processi:
se voglio creare un programma che gestisca queste componenti, devo fare
assolutamente ricorso ad un linguaggio di basso livello come il linguaggio
macchina o l'Assembly.
Del 1982 è invece il C++ che, a differenza di quello che pensano in
molti, non è un nuovo linguaggio, bensì un'evoluzione naturale
del C; un programma scritto in C infatti verrà compilato senza problemi
anche da un compilatore C++. Tuttavia, il C++ mette a disposizione del
programmatore la OOP, la programmazione orientata agli oggetti, che
non è qualcosa che si "aggiunge" al programma, bensì è un
modo totalmente diverso di concepire un'applicazione.
Quando si ha che fare con grandi progetti (oltre le 25000 linee di
codice), diventa difficile gestire l'applicazione nella sua interezza,
anche se è scritta in C, e qui entra in soccorso il C++, che permette al
programmatore di gestire le singoli componenti del programma come oggetti,
ossia come componenti intrinseche del linguaggio stesso; gli oggetti sono
disposti in classi, che sono la loro rappresentazione astratta, ed
ogni classe può ereditare oggetti da altre classi o cambiare la loro
visibilità all'interno del programma (esistono oggetti privati, protetti
e pubblici). La potenza della OOP permette al programmatore di fare cose
davvero interessanti, come ridefinire gli operatori, fare l'overloading di
funzioni, creare tipi di dati "su misura" (con i template),
gestire le eccezioni in modo potente (con i blocchi try e catch).
Ovviamente, occorre procedere per passi: non si possono apprezzare appieno
le novità introdotte dal C++ se non si ha familiarità col C.
Nel 1991 fu concepito il Java che, pur essendo un linguaggio a sè stante,
è considerato da molti come un'evoluzione del C++. Infatti, la sintassi
di questo linguaggio deve molto al C/C++, i costrutti alla base sono molto
simili. Ciononostante, il Java si pone come obiettivi quello di essere un
linguaggio di programmazione orientato al Web (ed è diventato con gli
anni il linguaggio di programmazione del Web) e quello di essere un
linguaggio multipiattaforma (write once, run everywhere è il motto
del Java), e queste caratteristiche hanno decretato il suo successo negli
ultimi anni. Lo stesso programma che scrivo in Java lo posso eseguire
teoricamente senza problemi su Windows, su Linux, un un Mac e persino su
un telefonino (i famosi "giochi Java"), a patto che esista una
JVM (Java Virtual Machine) per quel sistema.
Passando all'ultimo decennio, abbiamo la nascita dei linguaggi di quarta
generazione, linguaggi di script (non di programmazione) estremamente
intuitivi e facili da usare: il Perl, il Python (guarda caso entrambi
sviluppati grazie al C!).
Microsoft ha messo a punto un suo ambiente di sviluppo basato sul C++
(Visual C++) ed il C#, un linguaggio che deve molto al C/C++.
E' storia recente la nascita del "linguaggio D", che
personalmente non ho ancora provato ma che ho intenzione di provare.
Casomai vi farò sapere ;-)
previous -- index --
next
|