Programmazione nella Scuola Primaria – 10

10Quando sono partito con questa serie di post c’era una colossale minaccia minacciosa incombente: il C++.
Non che ce l’abbia con il C/C++, anzi! Quasi tutta l’informatica come la conosciamo noi si è sviluppata con e in C (e poi C++, la differenza credo esuli da questa introduzione).
Ma fin da subito ci si è accorti che forse non è sempre necessario, alle volte si può usare qualcosa di più amichevole. Anzi si deve. Il primo (per quel che mi risulta) è stato il Basic nato per semplificare il Fortran e tutta la sua liturgia.
In due parole: quando scrivo un programma in Fortran, C o in un linguaggio simile non riesco a eseguirlo nello stesso modo che abbiamo visto per Python, Ruby e Lua. Questi ultimi sono interpretati, quando ne eseguo uno chiedendo a Python o Ruby o quello che è di eseguirlo il mio file viene caricato in memoria e convertito per renderlo comprensibile al computer, al volo e ogni volta che lo lancio. Funziona, bene, e più è veloce il computer meglio è, la conversione è praticamente immediata.
Però se il programma è grosso o richiede molta memoria il ripetere ogni volta queste operazioni sarebbe oneroso e lento. Ecco perché fin da subito sono nati i compilatori che fanno la conversione dal file comprensibile agli umani, scritto in Fortran o C o Cobol o quello che volete nel linguaggio del computer. E il risultato di questa conversione viene scritta su un file, chiamato eseguibile. Quindi prima di eseguire un programma la prima volta devo compilarlo (convertirlo per il ‘puter). A questo punto l’esecuzione sarà semplicemente la lettura dell’eseguibile, già scritto come vuole il ‘puter.

OK, adesso dovrebbe essere chiara la suddivisione tra script (quelli interpretati) e programmi (quelli compilati). E dovrebbe risultare sensato quale useremo: se è molto grande e da distribuire (pensate a Word o al vostro browser) useremo un linguaggio compilato. Oggi quelli usati sono il C, il C++, Go, Rust, … Ma se si tratta di qualcosa di più piccolo possiamo usare un linguaggio interpretato, più facile da scrivere e modificare. Ecco allora Python, Ruby, Basic, Lua, PHP, Perl e millemila altri per soddisfare o gusti di tutti.

C’è anche qualcosa di intermedio, più lento dei compilati e con una gestione più difficile degli interpretati, come per esempio Java. Non ne parlerò, quando (e se) diventerete esperti… Uh! lo stesso vale per i funzionali, pare siano sempre più di moda, vedremo.

OK, ma non dovevi dirci del C++?
Uh! sì, subito. Ecco la versione C della congettura di Collatz vista nei post precedenti:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
/* coll.c */

#include<stdio.h>

void main() {
    int n = 15; /* cambiare se nessario */
    while(n > 1) {
        if((n % 2) == 1)
            n = 3 * n + 1;
        else
            n /= 2;
        printf("%d ", n);      
    }
    printf("\nfatto!\n");   
}

Esaminiamolo brevemente. I commenti iniziano con /* e finiscono con */, possono quindi essere distribuiti su più righe. Normalmente un file inizia con una serie di #include per dire al compilatore dove cercare le funzioni che useremo. Nel nostro caso c’è la printf() che è nella libreria standard (std) di input e output (io) –ok, una nerdata. Non è la stessa cosa dell’import di Python: nei file .h avremo solo il prototipo della funzione, cioè l’intestazione e la funzione sarà in una libreria fornita con il compilatore (o che ci siamo fatti noi).
Il programma inizia dalla funzione main(), in questo caso (per renderla simile alle versioni viste precedentemente) è void, cioè quando finisce non dice al sistema operativo com’è andata. È altamente raccomandato dichiararla int e ritornare un valore, 0 significa tutto bene.
Ecco, come per main() (riga 5) anche ogni variabile va dichiarata, dicendo che tipo di dato dovrà contenere, cosa che faccio (riga 6) per la variabile n.
Un blocco inizia con { e termina con }. Notare che ogni istruzione termina con ;. Non contano i rientri e gli a-capo. L’istruzione per scrivere sul terminale è printf(), la f sta per formattato; è piuttosto complessa ma è la più semplice della sua famiglia (sapeste…!).
Un’ultima cosa, storica: %, ==, /= e \n sono nate in C e solo successivamente copiate da tutti quanti.

A questo punto abbiamo il codice, lo compiliamo (con Linux, con Windows sarebbe un po’ diverso), così:

comp

gcc è il GNU C compiler (in realtà compila non solo C ma il nome è rimasto); l’opzione -o serve per dare il nome all’eseguibile, nel nostro caso coll, segue la lista dei file da compilare, nel nostro caso il solo coll.c.
Se non ci sono errori gcc fa il suo dovere, in silenzio, e crea l’eseguibile (in questo caso coll, piccolissimo 7KB appena). Ma ancora non funzionerebbe. Dobbiamo abilitarlo, cioè dire al sistema operativo (Linux) che è un programma, nostro, di cui ci fidiamo:

chmod

+x sta per aggiungi l’attributo di esecuzione, mnemonico vero?
E finalmente:

coll

OK? come si vede anche un caso semplicissimo diventa più complesso dei linguaggi interpretati. E poi devo confessarvi un peccato che macchia la mia coscienza. Ho detto che avrei parlato del C++ e invece sono rimasto al suo papà il C. Non è cattiveria, l’ho fatto per voi: con il C++ sarebbe stato sostanzialmente simile ma avrei dovuto introdurre le classi e gli oggetti. Cose del tutto inutile in questo caso, anzi controproducenti.

Mi rendo conto che questo post è il più ingarbugliato della serie, non è colpa mia:

jessica

Annunci
Post a comment or leave a trackback: Trackback URL.

Commenti

  • Orlando  On 24 settembre 2014 at 19:36

    Per Windows c’è cygwin, mai realmente citato in questo blog, che permette quasi sempre di emulare le cose che fai su Linux. Al codice manca un return 0; 🙂

    • juhan  On 24 settembre 2014 at 20:42

      Vero & vero. Il return non l’ho messo per conformità agli altri script e ne ho accennato. Tieni conto che è un’intro davvero elementare, per il C non si capisce nemmeno dove sia più ostico (niente puntatori!). Cygwin, come già detto in passato, sì ma di nuovo non è per principianti, almeno secondo la mia esperienza.
      Poi se qualcuno me lo chiede (ma non ho una macchina con Windows sopra devo farmela prestare).

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: