Developpez.com - Rubrique Humour

Le Club des Développeurs et IT Pro

Trolldi : découvrez Free, un langage de programmation pénible

Qui s'appuie sur un langage de programmation encore pire

Le 2020-02-06 20:52:20, par Stéphane le calme, Chroniqueur Actualités
Un développeur a présenté Free qu'il a décrit comme étant un langage de programmation ésotérique avec un backend de compilateur inhabituel : Free est « un langage de programmation pénible qui s'appuie sur un langage de programmation encore pire. J'ai décidé de nommer ce langage de programmation Free, car il n'y a absolument aucune contrainte de mémoire. Il est fondamentalement impossible pour un programme Free de segfault ou quelque chose comme ça : vous pouvez attribuer arbitrairement à n'importe quel emplacement de mémoire. Ce n'est pas par conception. C'est juste un sous-produit du langage de programmation cible: SMPL ».

SMPL (lire "simple") est un langage de programmation qui ressemble à Brainfuck, langage de programmation exotique inventé par Urban Müller en 1993. Il tire son nom de l’union de deux mots anglais, brain (« cerveau ») et fuck (« niquer »), et joue sur les mots, puisque ce langage est volontairement simpliste, et parce que l'expression Brain Fuck évoque, en argot, ce qui met le cerveau dans un état de confusion par sa complexité apparente. Ce vocabulaire peu flatteur lui a d'ailleurs valu d'être écrit sous d'autres orthographes plus prudes, telles que Brainf*ck, Brainf*** ou encore BF.

L'objectif de Müller était de créer un langage de programmation simple, destiné à fonctionner sur une machine de Turing, et dont le compilateur aurait la taille la plus réduite possible. Le langage se satisfait en effet de seulement huit instructions, notamment :
  • >​ incrémente (augmente de 1) le pointeur.
  • <​ décrémente (diminue de 1) le pointeur.
  • +​ incrémente l'octet du tableau sur lequel est positionné le pointeur (l'octet pointé).
  • -​ décrémente l'octet pointé.
  • .​ sortie de l'octet pointé (valeur ASCII).
  • ,​ entrée d'un octet dans le tableau à l'endroit où est positionné le pointeur (valeur ASCII).
  • [​ saute à l'instruction après le ] correspondant si l'octet pointé est à 0.
  • ]​ retourne à l'instruction après le [ si l'octet pointé est différent de 0.

Les programmes Brainfuck peuvent être traduits en C en utilisant les substitutions suivantes, en considérant que ptr est du type unsigned char* :

Instruction Brainfuck Équivalent en C
> ptr++
< ptr--
+​ ++(*ptr)
-​ --(*ptr)
.​ putchar(*ptr)
,​ (*ptr) = getchar()
[ while(*ptr) {​
]​ }
Le programme suivant affiche le traditionnel « Hello World! » et une nouvelle ligne à l'écran :

Code Brainfuck :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
++++++++++          Affecte 10 à la case 0 
[                   Boucle initiale qui affecte des valeurs utiles au tableau  
   >                avance à la case 1  
   +++++++          affecte 7 à la case 1 
   >                avance à la case 2 
   ++++++++++       affecte 10 à la case 2  
   >                avance à la case 3 
   +++              affecte 3 à la case 3 
   >                avance à la case 4 
   +                affecte 1 à la case 4 
   <<<<             retourne à la case 0 
   -                enlève 1 à la case 0 
]                   jusqu'à ce que la case 0 soit = à 0 
la boucle initialise le tableau selon les valeurs suivantes: 
Case : Valeur 
0 : 0 
1 : 70 
2 : 100 
3 : 30 
4 : 10 
 
>++                    ajoute 2 à la case 1 (70 plus 2 = 72) 
.                      imprime le caractère 'H' (72) 
>+                     ajoute 1 à la case 2 (100 plus 1 = 101) 
.                      imprime le caractère 'e' (101) 
+++++++                ajoute 7 à la case 2 (101 plus 7 = 108) 
.                      imprime le caractère 'l'  (108) 
.                      imprime le caractère 'l'  (108) 
+++                    ajoute 3 à la case 2 (108 plus 3 = 111) 
.                      imprime le caractère 'o' (111) 
>++                    ajoute 2 à la case 3 (30 plus 2 = 32) 
.                      imprime le caractère ' '(espace) (32) 
<<                     revient à la case 1 
+++++++++++++++        ajoute 15 à la case 1 (72 plus 15 = 87) 
.                      imprime le caractère 'W' (87) 
>                      repart à la case 2 
.                      imprime le caractère 'o' (111) 
+++                    ajoute 3 à la case 2 (111 plus 3 = 114) 
.                      imprime le caractère 'r' (114) 
------                 enlève 6 à la case 2 (114 moins 6 = 108) 
.                      imprime le caractère 'l'  (108) 
--------               enlève 8 à la case 2 (108 moins 8 = 100) 
.                      imprime le caractère 'd'  (100) 
>                      repart à la case 3 
+                      ajoute 1 à la case 3 (32 plus 1 = 33) 
.                      imprime le caractère '!' (33) 
>                      va à la case 4 
.                      imprime le caractère '\n'(nouvelle ligne) (10)

Le code effectivement compilé peut donc se réduire à la ligne suivante :

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

SMPL n'est qu'un surensemble de Brainfuck avec trois opérateurs supplémentaires dont la syntaxe est inspirée par Rust. Par exemple en Free, voici le fameux Hello World

Code Free :
1
2
3
4
5
6
7
// This flag enables brainfuck compatibility mode. 
// This disables pointer operations and any number literal greater than 255 
#[enable(brainfuck)] 
 
fn start() { 
    println("Hello, world!"); 
}

Et voici ce qui est affiché :

Code :
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++>+<>>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>-<>]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>-<>]<<<<<<<<<<<<[>>>>>>>>>>>>+<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>-]<<<<<<<<<<<<<[>>>>>>>>>>>>>+<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.<<>>>[-]++++++++++.<<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<>>>[-][-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<
Des développeurs en ont déjà fait un sujet de plaisanterie

Au vu de ce langage qui n'est pas très commun, certains ont déjà fait de l'humour. Le créateur du langage lui-même demande aux autres développeurs « Pardonnez-moi pour ce que j'ai créé ». Un autre déclare « Je vais le soumettre à la direction intermédiaire de Boeing pour leur prochaine mise à jour logicielle », tandis qu'un autre indique que Free n'est « Pas le langage de programmation dont nous avions besoin, mais le langage de programmation que nous méritions ».

Pour un autre, « Cela ressemble à la façon dont nous avons fait le C ++ à l'époque. Gestion de la mémoire? Pfff... il fallait redémarrer le programme toutes les 20 minutes ».

Un autre était tout simplement abasourdi : « Mais qu'est-ce que je viens de lire ? »

Et un autre de souligner « Pouvons-nous arrêter d'ajouter des blagues aux blagues ? Parce que dans 10 ans, je vous garantis que l'une de ces blagues sera prise au sérieux par un stupide DSI et son équipe va devoir développer une plateforme entière dans un sous-ensemble de Brainfuck ».

Bien sûr, l'auteur précise qu'il a proposé ce langage juste pour s'amuser : « cela fonctionne, mais le code compilé est très inefficace ».

Source : Free

Et vous ?

Aviez-vous déjà entendu parler de Brainfuck ? Qu'en pensez-vous ? Mérite-t-il son nom ?
Que pensez-vous de Free ?
Seriez-vous tenté de les étudier ?
Que pensez-vous des propos du développeur qui craint de voir un DSI demander à son équipe d'implémenter une plateforme dans un sous-ensemble de Brainfuck ?
Quelle est la réaction du côté des développeurs qui vous a le plus marqué ?
Une chance pour qu'un sous-ensemble de Brainfuck soit à la mode sur des index comme Tiobe ? Pourrait-il alors être demandé lors des publications d'offres d'emploi ?
  Discussion forum
11 commentaires
  • Neckara
    Inactif
    Boff, ça vaut pas le whitespace.
  • Ryu2000
    Membre extrêmement actif
    Envoyé par Stéphane le calme
    « Pardonnez moi pour ce que j'ai créé »
    (...)
    « Je vais le soumettre à la direction intermédiaire de Boeing pour leur prochaine mise à jour logicielle »
    (...)
    « Pas le langage de programmation dont nous avions besoin, mais le langage de programmation que nous méritions ».
    (...)
    « Mais qu'est-ce que je viens de lire ? »
    Whaa si il y avait un concours des propos les moins originaux les types qui ont dit ça seraient bien placé
    C'est vraiment banal. (bon après c'est la culture MEME, recoller les mêmes phrases sur différentes situations)

    Envoyé par Stéphane le calme
    Aviez-vous déjà entendu parler de Brainfuck ? Qu'en pensez-vous ? Mérite-t-il son nom ?
    C'est très connu comme truc, depuis 1993 ça fait marrer les étudiants en informatique pendant 5 minutes et voilà.
    Au niveau des vieilles blagues de développeur personnellement je préfère ça :
    Bienvenue sur le site of the International Institute of La RACHE
  • Auteur
    Expert éminent sénior
    On pourra remarquer que le petit bout de programme en Free commence par l'instruction #[enable(brainfuck)]
  • el_slapper
    Expert éminent sénior
    Envoyé par hotcryx
    Dans les drôles de langages, il y a aussi celui datant de cette semaine: un langage écrit en chinois

    (obfuscated code!)
    très certainement accessible pour les gens maîtrisant la graphie de l'empire du milieu(un sixième de la planète, quand même...). Mais pour les autres, en effet, difficile de faire plus obfusqué.
  • Nethrandir
    Membre à l'essai
    perso je vous conseille plutôt Ook! : https://esolangs.org/wiki/Ook!
  • Markand
    Membre éclairé
    Moi j'aime bien aussi le LOLCODE.
  • hotcryx
    Membre extrêmement actif
    Dans les drôles de langages, il y a aussi celui datant de cette semaine: un langage écrit en chinois

    (obfuscated code!)
  • Lung
    Expert éminent
    Envoyé par Nethrandir
    perso je vous conseille plutôt Ook! : https://esolangs.org/wiki/Ook!
    C'est la version pour le bibliothécaire ?
  • 23JFK
    Membre expert
    Manque toujours un input pour interagir avec le programme.
  • gaiol
    Nouveau Candidat au Club
    Bravo pour le copier/coller de wikipedia (brainfuck) !