Brainfuck: Una Sfida Per Menti Geek

No, non ci siamo dati al turpiloquio, Brainfuck è forse il più celebre esempio di Linguaggio di Programmazione Esoterico, cioè un linguaggio di programmazione particolarmente complesso e volutamente meno chiaro possibile.
I lettori con poca familiarità con il mondo geek, si potranno chiedere se un’invenzione del genere fosse veramente necessaria, per Urban Mueller, creatore del linguaggio, la risposta era evidentemente si, e in fin dei conti chi siamo noi per avventurarci in quegli oscuri recessi delle menti brillanti che oscillano tra genialità e follia ?

L’idea alla base di BF è molto semplice: creare il più semplice compilatore possibile completo per una macchina di Turing. Diversamente ai linguaggi di programazione più popolari BF dispone di un’unica struttura dati: un array di byte di dimensine infinita e di solo 8 istruzioni riportate nella tabella seguente.

Istruzione Descrizione Equivalente C
> incrementa il puntatore al vettore ++ptr;
< decrementa il puntatore al vettore –ptr
+ incremente la cella puntata ++(*ptr);
decrementa la cella puntata –(*ptr);
. output della cella punata (ASCII) putchar(*ptr);
, input alla cella puntata (ASCII) *ptr =getchar();
[ salta in avanti all’istruzione dopo  il corrispondente ] se il byte al puntatore è zero while (*ptr) {
] salta indietro all’istruzione dopo  il corrispondente  [ se il byte al puntatore non è zero }

 

Se ad esempio volessimo stampare la stringa CIAO in BF dovremo dare in pasto al compilatore il seguente sorgente

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
++++++.
– – – – – – – -.
++++++++++++++.

Semplice vero ? A questo punto dovrebbe essere chiaro anche cosa fa il codice contenuto nell’immagine di copertina….

Chi volesse vedere qualcosa di più complicato, potrebbe affrontare il problema di un pogramma BF che stampa a video il proprio codice sorgente. In gergo tecnico questi programmi si chiamano quine, e sono una sfida anche nei linguaggi di programmazione alto livello, ma cercare di realzzare una cosa simile in BF è roba da far ingarbugliare veramente il cervello ai comuni mortali.  Bertram Felgenhauer,  ricercatore dell’università di Innsrbuck, è riuscito nell’impresa.

>---->-->+>++++>++>+>+>+>+>-->->->>>>->-->-->-->-->->>+>-->->>>>>>+>--->++>>>>>>
++>->>>>>>>>>>>>>>>+>>>>++>->>>>+>--->++>--->--->--->++>+>+>-->->->->++++>+>>+>+
>>++>->->-->->>>>>+>>++>>>>>>-->-->+>+>>->->>++>->>>+>++>->>++++>>>+>+>-->->->>>
>>>>>>>>+>+>--->++>>>>>>>->->-->+>++>+>+>-->->-->->++>--->+>+>>++>>++>--->->->>>
>>->-->>>>>+>-->+>+>+>>->->->>++>++>>>>++++[[+>>>+<<<]<++++]>++++>>-[+[+<<-[>]>]
<<[<]>>++++++[-<<++++++++++>>]<<++.+>[<++>[+>>+<<]]+++++[+<++++>]>>[+<<+<.>>>]<<
[---[-<+++>[+++<++++++++++++++>[+++++[-<+++++>]<+>]]]]>+++>>]<<<<[.<]0

Esiste anche un interprete on line al sito: http://brainfuck.tk, per tutti coloro che non riescono a tenere a freno la voglia di mettere alla prova le proprie capacità logiche.

© 2008 Ziogeek.com

Tag: , , ,