|
Page 4 of 4
Le criticheNonostante tutto il C non è certo esente da critiche
ma è innegabile che esso abbia servito bene allo scopo per cui è stato
creato ed ha senza dubbio sorpassato ogni aspettativa di successo dei
suoi creatori.
Dal punto di vista del linguaggio una critica comune riguarda la sintassi in certi casi alquanto complessa dell'operatore di indirezione (*), definita un incidente di percorso dallo stesso Ritchie. Altre critiche si possono sollevare verso certe "anomalie" nella precedenza degli operatori, come ad esempio if (a&b == c) da precedenza all'operazine b == c invece che a&b come ci si aspetterebbe inizialmente. Altre espressioni come a < b < c non restituiscono il risultato che sembrano suggerire. In quest'ultimo caso ci si aspetterebbe un valore booleano basato sul fatto che b sia compreso o meno tra a e c, ma il parser C risolve prima a < b ed il risultato (booleano) lo confronta con c. Altre critiche possono essere sollevate per la mancanza di un adeguato sistema che coadiuvi la modularizzazione ed il riuso del codice. Anche l'istruzione switch viene a vote tacciata di cattivo design, sia per il modo in cui gestisce il codice relativo ai case che per la limitazione di poter associare solo espressioni costanti ai vari case. Ma probabilmente la caratteristica del linguaggio che più facilmente può creare malintesi è l'operatore di assegnamento = che viene facilmente scambiato per l'operatore di uguaglianza ==.
Sopra è possibile vedere un esempio di obfuscated code, ovvero codice C perfettamente funzionante ma reso illeggibile attraverso la combinazione di diverse tecniche di offuscamento permesse dal linguaggio. Il frammento di codice è preso da un programma di Aidan Thornton che risolve il gioco del Sudoku, appositamente scritto per il 18th International Obfuscated C Code Contest tenutosi nel 2005.
Critiche si possono sollevare anche riguardo la mancanza di
feature di alto livello come il garbage collection, la
gestione di array e stringhe come tipi primitivi, la disponibilità di
operazioni su range o collezioni di dati, il controllo degli indici usati per accedere agli
array, le eccezioni, specifiche standard per algoritmi, strutture dati,
coroutines, threads, networking, librerie grafiche, etc. il fatto di
non essere multiparadigmatico come ad esempio il C++ (procedurale, oop e template). La mia personale opinione è che molte di queste
obiezioni sono antitetiche rispetto agli obbiettivi del C (se non
antistoriche in certi casi) e che l'implementazione di feature di alto
livello avrebbero compromesso irrimediabilmente la portabilita del linguaggio, con ricadute negative sulla sua diffusione. ConclusioniQuello che
è certo è che la semplicità, l'efficienza e soprattutto la portabilità
del C sono le caratteristiche per cui lo ritroveremo in giro ancora per
parecchi anni a venire. D'altronde progetti come il kernel Linux, le librerie base del progetto GNOME, il server grafico X Window e vari pezzi di Microsoft Windows sono scritte in C, e non sarà facile liberarsi di nessuno di loro...
 |
Il kernel e vari altri componenti di Microsoft Windows NT a partire dalla versione 3.1 fino ad arrivare a Vista (NT 6.0) è scritto in C.
|
 |
X Window sotto Linux con il nuovo window manager XGL. La stragrande maggioranza di quello che vedi è scritto in C. Incluso il kernel Linux, X Window, il window manager XGL, GIMP, i drivers...
|
Riferimenti
- Ritchie, Dennis M. The Development of the C Language. http://cm.bell-labs.com/cm/cs/who/dmr/chist.html
- Kernighan, Brian W. & Ritchie, Dennis M. 1988. The C Programming Language (2nd Edition). Prentice Hall.
- Koenig, Andrew. C Traps and Pitfalls. http://www.di-mgt.com.au/src/trapsandpitfalls.pdf
- Olefsky, Jake. The History and Popularity of the C Programming Language. http://www.jakeo.com/words/clanguage.php
- Budiu, Mihai. An Interview with Brian Kernighan. http://www.cs.cmu.edu/~mihaib/kernighan-interview
<< Start < Prev 1 2 3 4 Next > End >> |