Wednesday, 07 January 2009 arrowHome arrow Articoli arrow Storia del linguaggio C Add to Technorati Favorites
Main menu
Home
Articoli
RSS news
Saputello
Segnalazioni
Info
The Four Keys
Info sullo speciale
Approfondimenti sul codice
C++, STL, Design Pattern
OpenGL, SDL e Computer Graphics
Artwork




Storia del linguaggio C E-mail

Le critiche

Nonostante 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 ==.

 

obfuscatedc.PNG

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.

Conclusioni

Quello 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...

 

vista3.jpg 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.
xgl-compiz-with-mipmap.png 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
  1. Ritchie, Dennis M. The Development of the C Language. http://cm.bell-labs.com/cm/cs/who/dmr/chist.html
  2. Kernighan, Brian W. & Ritchie, Dennis M. 1988. The C Programming Language (2nd Edition). Prentice Hall.
  3. Koenig, Andrew. C Traps and Pitfalls. http://www.di-mgt.com.au/src/trapsandpitfalls.pdf
  4. Olefsky, Jake. The History and Popularity of the C Programming Language. http://www.jakeo.com/words/clanguage.php
  5. Budiu, Mihai. An Interview with Brian Kernighan. http://www.cs.cmu.edu/~mihaib/kernighan-interview


 
< Prev   Next >



I più letti
Suggerimenti Google
Novità
© 2006-2007 Michele Bosi
E' vietata la riproduzione, anche parziale, di contenuti e grafica
Ottimizzato per Firefox 2.0 ed Internet Explorer 6.0