L'espressivita' del C

Friday, 01 June 07
Il C e' un linguaggio a basso livello rispetto agli standard attuali a cui i cosi' detti Very High Level Languages ci hanno abituati.

Eppure nella sua espressivita' e' quasi carnale... forse e' che nella mia vita ho scritto piu' linee di codice C di qualunque altra cosa che lo sento cosi'.

Pochi minuti fa stavo scrivendo un pezzo di un programma, e mi serviva una funzione per controllare se una stringa era probabilmente un numero, cosi' ho scritto di getto
int strisnumber(char *s) {
    while(*s == ' ' || (*s >= '0' && *s <= '9')) s++;
    return *s == '\0';
}
Codice banale per chi usa il C normalmente, ma dopo molte ore di Ruby, PHP, Tcl, ..., di questo ultimo anno vedere la macchina che corre tra i byte, uno ad uno, scrivere codice di istinto che ha solo a che fare con byte, puntatori, e' in un certo modo liberatorio dal punto di vista psicologico. Rassicurante, vicini alla brutale verita' della macchina.

A dire la verita' in questa piccola applicazione che sto scrivendo sto facendo ampio uso di una libreria che avevo buttato giu' qualche tempo fa di stringhe dinamiche in C, che usa un concetto un po' inesplorato di registrare le meta informazioni prima del puntatore per farle sembrare agli occhi del programmatore esattamente come C strings pure.

Dunque per quanto i byte mi possano piacere dal punto di vista carnale e psicologico i linguaggi dinamici mi hanno cosi' tanto preso la mano che ormai cerco di riprodurre in C le comodita' che ci sono altrove, ovviamente senza riuscirci mai abbastanza.

p.s. l'applicazione che sto scrivendo e' free software e ha a che fare con il web, anche fare cose dove i soldi non hanno un posto e' liberatorio
3777 views*
Posted at 18:40:52 | permalink | 6 comments | print
Do you like this article?
Subscribe to the RSS feed of this blog or use the newsletter service in order to receive a notification every time there is something of new to read here.

Note: you'll not see this box again if you are a usual reader.

Comments

timendum writes:
01 Jun 07, 21:44:22
Diciamoci la verità, ogni tanto usare i puntatori e la sua aritmetica, dopo tanto ruby/java/php fa anche comodo.
Doxaliber writes:
02 Jun 07, 05:22:54
Anch'io a volte rimpiango il vecchio metodo di programmazione nudo e crudo... :-D Ma effettivamente i linguaggi strutturati, pur avendo caratteristiche di immediatezza, alla lunga risultano sconvenienti da utilizzare, soprattutto in progetti di grande portata.
'u cummisaru writes:
04 Jun 07, 04:32:03
ma il C non ha una qualche funzione del tipo 'cdigit' o 'ctype' che potrebbe benissimo intervenire a proposito.. era una vita che non vedevo 2 linee di codice C né i suoi puntatori: peccato che all'univ ce li hanno fatti odiare
spery writes:
04 Jun 07, 05:09:03
se rinasco farò la programmatrice!
Doxaliber writes:
04 Jun 07, 07:13:34
Spery, non è mai troppo tardi! :-D
IO writes:
10 Jun 07, 07:51:42
@'u cummisario: non puoi usare ctype etc su di un puntatore :), ma si potrebbe utilizzare sui singoli elementi. Vi sarebbe comunque lo stesso errore che c'e' nel codice qui presentato: non tiene conto dei numeri con la virgola :))). Provo a scrivere un mix:

int strisnumber(char *a)
{
while (*s == ' ' || *s == ',' || *s == '.' || isdigit(*s)) s++;
return *s == '\0';
}
comments closed