La conoscenza in Brainfuck
Quando venni a conoscenza dell’esistenza del linguaggio di programmazione “Brainfuck” la prima volta, data la sua “particolarità” e non avendo approfondito l’argomento ma letto solo dei codici sorgente molto fugacemente, pensavo che si trattasse di uno scherzo o di qualcosa che io non potessi in alcun modo comprendere. Ebbene, quest’estate mi venne voglia, finalmente, di approfondire la questione.
Cercando “Brainfuck” su google capitai, ovviamente, su questa pagina di Wikipedia. Leggendola con attenzione, mi resi conto di quanto il Brainfuck fosse serio: si tratta addirittura di un linguaggio di programmazione Turing-completo, cioè con esso è possibile implementare qualsiasi algoritmo sia eseguibile dalla macchina di Turing.
Il Brainfuck non fa altro che gestire un array di lunghezza “infinita” non dichiarato esplicitamente (il nastro della macchina di Turing). Il linguaggio fornisce alcuni operatori per agire sul nastro, le cui celle sono inizialmente tutte azzerate. L’operatore ‘>’ consente di spostarsi di una cella verso destra, ‘<' verso sinistra, '+' di incrementare di 1 il valore numerico di quella cella, '-' di decrementarlo di 1, '.' di stamparlo e pochi altri. In ogni caso, Wikipedia spiega tutto meglio di come potrei farlo io in un semplice articolo.
Quando compresi il funzionamento del linguaggio e di quegli "strani simboli", mi venne il desiderio di realizzare qualcosa di molto semplice, una sorta di hello world… volevo indicare in maniera criptica "la strada della conoscenza".
Fu così che realizzai il codice oggetto di questo articolo: in verità, inizialmente era leggermente diverso, poi fui costretto ad apportare una piccola modifica che produsse quelle due lunghe sequenze di '+' verso la fine del codice (evitarle mi sarebbe comportato ore di sbattimenti per ricordare lo stato del nastro di Turing in quel particolare punto del programma, che avevo scritto mesi prima… non a caso il linguaggio si chiama "brainfuck"!).
Il programma non fa altro che stampare sulla console una stringa, indicante appunto "la strada della conoscenza". Come eseguirlo? Beh, il brainfuck è un linguaggio interpretato, quindi avremo appunto bisogno di un interprete brainfuck; google potrebbe essere di aiuto ma, se non avete voglia di fare troppe ricerche, vi linko io questo semplice ed efficiente interprete in perl scritto da BlackLight, autore di cui ho anche linkato il sito tra quelli “consigliati” nella sidebar di questo blog.
Il perl è a sua volta un linguaggio interpretato, quindi dovremo “simpaticamente” richiamare l’interprete perl sullo script perl al quale passare in input il file con estensione .bf contenente il mio codice sorgente in brainfuck. Facile no? Insomma, supponendo di aver salvato il codice sorgente dell’interprete in perl che ho appena linkato in un file chiamato “interprete_perl.pl” e il codice brainfuck (linkato alla fine di questa pagina) in un file chiamato “codice_brainfuck.bf” (le estensioni sono obbligatorie), non dovremo fare altro che digitare da shell questo comando
perl interprete_perl.pl codice_brainfuck.bf
e otterremo a video la stampa della “strada del sapere”. Si noti come anche la shell sia, di fatto, un interprete… in sostanza quella riga di codice richiama tre interpreti per tre linguaggi diversi (bash, perl e brainfuck), ma del resto si sa: la “strada della conoscenza” è ardua da trovare.




Lascia un commento