Tutoriel sur le Brainfuck

Héhé

a marqué ce sujet comme résolu.

Bonsoir à tous, amis zesteurs,

Après environ une semaine de rédaction, j'ai décidé de passer mon mini-tuto' sur le BF en bêta !

Il est disponible par ici

Première bêta

Merci de me faire quelques retours sur ce qui à déjà été écrit.

Bonne nuit !

+0 -0

Le brainfuck a des utilités, mais pas en tant que langage pour programmer quelque chose.

PS : Après un survol rapide, tu ne sembles pas parler des utilités en question : le fait qu'on peut le voir comme un jeu d'instructions d'un processeur, le fait qu'il est Turing-complet (et donc que si tu peux créer un interpréteur dans un langage X, ce langage X est Turing-complet). Par exemple.

J'étais tombé sur cet article, où le brainfuck est utilisé (l'intéret étant sa minimalité).

Je pense sincèrement que son utilité n'a jamais été d'être utilisé sur des machines avec très peu de mémoire. Il s'agit simplement d'un langage jouet qui peut être utilisé pour démontrer certains résultats, mais il a avant tout été conçu comme une blague.

Je ne pense pas que ce soit très pertinent de le définir comme un langage interprété. Rien n'empêche d'écrire un compilateur BF (c'est même très simple), et la page wikipédia montre même comment traduire littéralement du BF en C.

Quant à la mémoire d'une machine BF, utiliser un tableau pour la représenter n'est pas forcément adapté. Je pense qu'une liste serait mieux.

Si tu ne connais pas, tu as cette page qui explique BF de manière très concise, et qui peut te donner des idées d'exercices.

Enfin, étant donné que le langage en soit n'a pas vraiment d'intéret, pourquoi ne pas proposer au lecteur d'écrire son propre interpréteur / compilateur BF dans le langage de son choix à la fin du tuto ?

Enfin, étant donné que le langage en soit n'a pas vraiment d'intéret, pourquoi ne pas proposer au lecteur d'écrire son propre interpréteur / compilateur BF dans le langage de son choix à la fin du tuto ?

De manière générale, je trouve que ce serai un atelier sympa à mettre en place une fois (je note ça quelque part, le cas échéant).

Enfin, étant donné que le langage en soit n'a pas vraiment d'intéret, pourquoi ne pas proposer au lecteur d'écrire son propre interpréteur / compilateur BF dans le langage de son choix à la fin du tuto ?

Je suis actuellement en train (d'essayer) d'écrire un compilateur (C++ parce que j'ai la flemme) BF vers de l'assembleur syntaxe intel, utilisable directement par fasm.

Si jamais ça intéresse …

+0 -0

Il me semble que la question centrale qui vient à la lecture de ton tutoriel est : à quoi ça sert ? Tu mentionne ironiquement que c'est une perte de temps, mais ce n'est pas une bonne réponse : si tu veux écrire un tutoriel sur le Brainfuck, c'est bien parce que tu penses que ça peut apporter quelque chose aux gens. Mais quoi ? Il faut que tu le dises, noir sur blanc, dans le tutoriel.

Si on me posait la question à moi (mais c'est une réponse personnelle, tu en as peut-être une autre), je dirais que le Brainfuck n'a a aucun intérêt, à part pour apprendre à écrire un parseur/interpréteur/compilateur de Brainfuck, et que pour cela il vaut mieux avoir une petite idée de comment on programme en Brainfuck pour savoir sur quoi on travaille. Dans cette optique, le but du tutoriel serait d'aller au plus court, donner une intuition sur le langage (en faisant écrire des programmes très simples), et ensuite proposer aux gens d'écrire eux-même une implémentation. Mais encore une fois, tu as peut-être une autre vision du BF, il faut l'expliquer pour que les lecteurs sachent à quoi s'attendre.

Remarque de plus bas niveau :

  • La "table ASCII" que tu montres n'est pas terrible, elle est bien trop compliquée pour l'information qui nous intéresse. On se moque du nombre en binaire ou hexadécimal, c'est juste un tableau entier->lettre qui nous intéresse.

  • Ta remarque "Notez bien que l'infini n'est pas un nombre…" n'est pas claire du tout. Il faut la virer et trouver comment dire ce que tu veux autrement (… il n'y a pas de limite sur la mémoire disponible ?).

  • Dans les tableaux que tu mets ensuite, pourquoi ne pas mettre la lettre ASCII à la place du nombre ? C'est nettement plus lisible et ça n'enlève pas grand chose. (Tu peux mettre les deux si tu veux)

à quoi ça sert ?

Je diverge sur ce point avec toi. De par son essence et son nom, selon moi l'utilité du BF est clairement masochiste : faire un programme qui marche alors que le langage est "contre toi", et lire en essayant de comprendre d'autres programme en BF.

Comme la plupart des langages ésotériques il me semble (j'aime prendre l'exemple de l'INTERCAL ), le but est de se bousiller le cerveau pour le fun.

+0 -0

Je le mets dans le tuto' ou non du coup ?

Titi_Alone

Selon moi, ça reste important de parler de quelque chose "d'utile" à propos de BF. L'exercice est intéressant, et très rapide à introduire. Tu peux donc en parler puis rediriger le lecteur vers le forum pour qu'il puisse partager son code (il n'y a pas vraiment de correction pour ce genre de chose).

à quoi ça sert ?

Je diverge sur ce point avec toi. De par son essence et son nom, selon moi l'utilité du BF est clairement masochiste : faire un programme qui marche alors que le langage est "contre toi", et lire en essayant de comprendre d'autres programme en BF.

Comme la plupart des langages ésotériques il me semble (j'aime prendre l'exemple de l'INTERCAL ), le but est de se bousiller le cerveau pour le fun.

dosmpm

Pourquoi pas; mais quelle que soit la raison de l'auteur, il faut qu'elle apparaisse clairement dans le tutoriel.

@Titi_Alone : Pour ton tuto, pense a utiliser la coloration syntaxique qui fonctionne très bien pour le brainfuck !

Essais de citer mon message pour voir comment j'ai fait !

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
++++++++++
[                   Boucle initiale qui affecte des valeurs utiles au tableau
   >+++++++>++++++++++>+++>+<<<<-
]
                    à la sortie de la boucle le tableau contient:
>++.                      'H'    = 72  (70  plus 2)
>+.                       'e'    = 101 (100 plus 1)
+++++++.                  'l'    = 108 (101 plus 7)
.                         'l'    = 108
+++.                      'o'    = 111 (108 plus 3)
>++.                      espace = 32  (30  plus 2)
<<+++++++++++++++.        'W'    = 87  (72  plus 15)
>.                        'o'    = 111
+++.                      'r'    = 114 (111 plus  3)
------.                   'l'    = 108 (114 moins 6)
--------.                 'd'    = 100 (108 moins 8)
>+.                       '!'    = 33  (32  plus  1)
>.                        nouvelle ligne = 10

Petit récap' de ce qu'il y a à changer pour le moment :

  • Le Brainfuck n'a jamais eu d'applications réelle
  • Ce n'est pas un langage interprété
  • Ajout d'un chapitre "Ecrivez votre propre interpréteur Brainfuck
  • Ce langage sert uniquement à "se bousiller le cerveau"
  • "L'infini n'est pas un nombre […]" -> "Le tableau dispose d'une mémoire illimitée"
  • Ajouter les lettres en dessous des codes ASCII dans les tableau
  • Simplifier le tableau décimal -> alphanumérique
  • Coloration syntaxique BF
  • (Pensez-vous qu'il faille retirer "les codes utiles" et laisser le lecteur faire ses propres recherches de ce côté là ?)
+0 -0

Pour les codes utiles, je ne sais pas trop, parce que finalement avec le BF on a la même problèmatique qu'en assembleur : il y a certes une méthode générique, mais dans un certain nombre de situations il existe d'autres solutions qui sont plus optimisées/ plus élégantes.

Au fait, selon le wikipedia anglais, P'' est l'ancêtre du BF, non son descendant. Toujours par cette source, l'implé originale prévoyait un tableau de 30'000 cases, chaque case étant visiblement stockée sur un octet.

Aussi, si tu veux bien aller jusqu'au bout du "bousillage de cerveau", tu peux présenter l'Ook! ou le Spoon. Rien que le Hello World c'est un épreuve …

+1 -0

Hey ;) C'est dommage que je vienne seulement de tomber sur ce topic parce que je suis aussi en train de rédiger un tuto sur le brainfuck. Une première ébauche est en validation chez OC, j'imagine qu'il sera inutile de le poster sur ZdS ?

<hs>Ça serait une bonne chose d'avoir un hub (Comme il y avait sur le sdz) pour savoir qui bosse sur quel tuto, notamment au sujet des big-tuto non importable de Mathieu, car vous risquez de vous retrouver avec 15 tuto HTML, 10 PHP ext… :p </hs>

<hs>Ça serait une bonne chose d'avoir un hub (Comme il y avait sur le sdz) pour savoir qui bosse sur quel tuto, notamment au sujet des big-tuto non importable de Mathieu, car vous risquez de vous retrouver avec 15 tuto HTML, 10 PHP ext… :p </hs>

Il y a une ZEP sur le sujet (en zone dev) ;) (la flemme de chercher le lien, désolé, je suis en vacances après tout !)

</hs>

+0 -0

La façon dont tu parles des indices est bizarre :

il y a un tableau, qui contient un nombre infini de case numérotées de 1 à l'infini.

Après tu mets l'image d'un tableau dont le premier indice est 0.

Et encore après, tu dis :

La case 1 contient donc 72

Alors que sur l'image, la case indicée 1 contient 69, pas 72. Tu devrais dire soit "la première case", soit "la case 0", mais "la case 1" c'est confus. C'est pas très gênant au final car en réfléchissant 30 secondes on comprend (d'autant plus que tu t'adresses à des initiés), mais ça fait très fouillis.

Et peut-être qu'écrire tes tableaux en Markdown serait plus adapté ici tant qu'à faire, puisque c'est possible.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte