sexta-feira, 5 de agosto de 2011

brainfuck!

Cansou de C++? Quer aprender Java, PHP, C#, ADA? Ou talvez algo mais baixo-nível, como Assembly ou VHDL?

Que nada! Macho mesmo programa em brainfuck!

Se nunca ouviu falar, aqui vai a definição da wikipedia:

"brainfuck (também conhecido como brainf*ck, ou BF) é uma linguagem de programação esotérica notada pelo seu extremo minimalismo, criada por Urban Müller, em 1993. Ela é uma linguagem Turing completa, desenhada para desafiar e confundir os programadores, e não é útil para uso prático. Pela sua simplicidade, o desenvolvimento de compiladores e interpretadores para essa linguagem é muito mais fácil do que para outras linguagens. O nome da linguagem é geralmente não-capitalizado, apesar de ser um substantivo próprio."

Para entender brainfuck, basta imaginar um array de 30 mil posições de signed chars, todos inicializados com zero. Algo como:

char array[30000];
memset( array, 0, sizeof( array ) );

Agora crie um ponteiro "p" para o início deste array:

char* p = array;

É isso que você tem para programar.
Os comandos de brainfuck são:



ComandoUtilidade
+Incrementa o valor do dado na posição apontada (equivalente a fazer (*p)++ em C)
-Decrementa o valor do dado na posição apontada (equivalente a fazer (*p)-- em C)
>Aponta para o próximo byte (equivalente a fazer ++p em C ).
Se estiver na última posição, volta para a primeira.
<Aponta para o byte anterior (equivalente a fazer --p em C ).
Se estiver na primeira posição, salta para a última.
.Imprime na tela o valor do dado na posição apontada (equivalente a putchar( *p ) )
,Lê um caractere do teclado e copia para a posição apontada (equivalente a *p =  getchar() )
[Abre um loop, que será executado até a posição apontada ficar zero.
(algo como um while( *p ){
]Fecha o loop anterior.


Qualquer outro comando é ignorado pelo compilador.

Um "Hello World" em brainfuck poderia ser escrito da seguinte forma:

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

Agora você já pode colocar mais uma linguagem de programação no seu Currículo =]


Não viu utilidade?
Há pessoas que ainda defendem seu uso, dizendo que com esta linguagem é possível criar o menor compilador do mundo (um compilador de brainfuck tem menos de 200 bytes).
E você que pensava que sua torradeira jamais seria capaz de compilar um código...

Um comentário: