Considerazioni sul C

Published:

This (possibly cringeworthy) article is very old and part of Project Necromancy. Many of the opinions I held back then have changed. I'm keeping this only for "historical" interest, not necessarily because I agree with what I thought back then.

Also consider that many of the included links (even the ones to the Internet Archive) are dead.

Penso di essere stato esposto al linguaggio C per un periodo sufficiente da permettermi qualche considerazione basilare sul linguaggio e sul suo uso.

La mia qualifica è, al momento, tecnico programmatore ma, ahimè, mi ritrovo ad essere più un tecnico che un programmatore. Ovvero devo solo aggiungere qualche pezzo e correggere qualche bug in codice generato da un altro software sul quale ho poco controllo.

L’unico vantaggio di questo approccio è che mi permette di speculare sulle features del linguaggio in sé senza perdere troppo tempo.

Quindi vediamo una carrellata di cose che mi piacciono e non mi piacciono del C come linguaggio.

Nota: parlo del C89.

Mi piace

Compattezza

C’è poco da dire. Sono pochi i linguaggi che hanno una compattezza pari a quella del C. Ovvero, una volta imparata la sintassi è difficile sentire il bisogno di doversela andare a rivedere.

Trovo personalmente appagante una qualità del genere in un linguaggio di programmazione. Le ambiguità sono ridotte all’osso.

Portabilità…

…più o meno. Nel senso che, usando le librerie standard, usando lo stesso compilatore (gcc, anyone?) e non usando hack legati alla specifica piattaforma, possiamo tranquillamente scrivere il codice una volta e compilarlo ovunque.

Tipizzazione dei dati flessibile

Il programmatore è il solo e unico responsabile della gestione dei dati.

Voglio usare un int e poi convertirlo in float? Faccio un cast.

Questa poi probabilmente tornerà sui contro…

Potenza

In C si può fare tutto. Anche il caffè.

C è un’interfaccia multipiattaforma ai linguaggi assembly. Per questo ci permette di manipolare le cose a basso livello, ma anche di creare strutture e procedure che consentono un livello di astrazione abbastanza decente.

In C si può scrivere un kernel.

In C si può scrivere una web application.

In C si può scrivere un software gestionale.

Comunque “si può” non vuol dire che ve lo consiglio.

Velocità

Credo che la velocità di un programma scritto in C ed ottimizzato dal compilatore sia senza eguali tra i linguaggi di programmazione general-purpose.

Non mi piace

Tipizzazione dei dati flessibile.

È sia un pro che un contro.

Se da una parte permette artifizi abbastanza interessanti, dall’altro può diventare un incubo per il debugging. Provare per credere.

Tendenza all’entropia

Se un programma in C è scritto male… beh, si nota. E purtroppo un programma (relativamente grande) scritto male in C è difficilissimo da modificare.

Ok, questo vale per qualsiasi linguaggio. Me C non invita neanche minimamente a evitare questi problemi in fase di prima scrittura.

Per esempio permette un uso indiscriminato delle variabili globali, senza alcun meccanismo per scoraggiare la pratica.

Gestione della memoria

Se da una parte aiuta a farsi un’idea di come funzionano le cose a basso livello, dall’altra implica che il programmatore deve preoccuparsi di liberare ogni area di memoria allocata. Pena una tendenza impressionante ai memory leaks. Molto meglio un garbage collector

Conclusioni

C è un linguaggio molto potente. Ma, per citare Spider Man, “da grandi poteri derivano grandi responsabilità”.

Quindi, pur insegnando ai programmatori a scrivere buon codice nella maniera più dura (ovvero crashando in maniera spettacolare in alcuni casi), permette la scrittura di obbrobri senza precedenti e spaghetti code degno della nostra migliore tradizione gastronomica.

Se avete bisogno di un linguaggio veloce, che deve funzionare a basso livello e volete rimanere nella migliore tradizione Unix, il C fa per voi.

Se, invece, avete bisogno di scrivere codice velocemente, beh, meglio un linguaggio di scripting (tipo Python).

Permalink