Rolinh

Rolinh' release

Brainfuck: Un Langage De Programmation Pas Comme Les Autres

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

Voilà, je viens d’écrire “Brainfuck est un langage de programmation tres original” en brainfuck. Non, je ne suis pas malpoli, brainfuck est bien le nom de ce langage de programmation particulier. D’après wikipedia, le nom viendrait littéralement de “brain” (cerveau) et “fuck” (foutre) ce qui en ferait une allusion évidente à masturbation intellectuelle (j’ai bien peur, avec des mots comme fuck, foutre et masturbation,  que cet article va attirer des visiteurs involontaires sur ce blog… ^^).

Le bout de code ci-dessus vous parait incompréhensible? Et bien c’est tout à fait normal! Ce n’est vraiment pas lisible et pourtant, le fonctionnement de brainfuck est tout simple et un interpréteur se code facilement et en quelques lignes.

L’idée est la suivante: imaginez que l’on a un tableau de cases dans lesquelles on peut stocker des valeurs numériques et un pointeur qui permet de pointer une case. C’est tout. Le langage possède huit instructions pour manipuler le pointeur et le tableau:

  1. > : incrémente le pointeur de 1
  2. < : décrémente le pointeur de 1
  3. + : incrémente la case pointée par le tableau de 1
  4. - : décrémente la case pointée par le tableau de 1
  5. . : sortie en valeur ASCII de la case pointée
  6. , : entrée de la case pointée
  7. [ : renvoie à l’instruction après le ] si la valeur pointée est à 0
  8. ] : retourne à l’instruction après le [ si la valeur pointée est à 0

Une boucle qui écrit les caractères que l’on tape au clavier ressemble donc à ceci:,[.,] Remettre une case à zéro se fait donc ainsi:[-] Etc.

Si on veut écrire “a”, on aura donc: ++++++++++[>+++++++++>+<<–]>+++++++.>. la valeur ASCII de “a” étant 97.

Cela parait barbare mais ce langage possède un grand pouvoir d’expression puisqu’il est Turing-Complet. Mais j’avoue qu’à part passer le temps, je ne lui ai pas trouvé d’application réelle.