Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Trolldi : découvrez Free, un langage de programmation pénible
Qui s'appuie sur un langage de programmation encore pire

Le , par Stéphane le calme

24PARTAGES

35  0 
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 : Sélectionner tout
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 : Sélectionner tout
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 : Sélectionner tout
[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++>+<>>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>-<>]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>-<>]<<<<<<<<<<<<[>>>>>>>>>>>>+<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>-]<<<<<<<<<<<<<[>>>>>>>>>>>>>+<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.<<>>>[-]++++++++++.<<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<>>>[-][-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<
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 ?

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Neckara
Expert éminent sénior https://www.developpez.com
Le 07/02/2020 à 8:04
Boff, ça vaut pas le whitespace.
9  0 
Avatar de Ryu2000
Membre extrêmement actif https://www.developpez.com
Le 07/02/2020 à 9:42
Citation Envoyé par Stéphane le calme Voir le message
« 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)

Citation Envoyé par Stéphane le calme Voir le message
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
9  0 
Avatar de Auteur
Expert éminent sénior https://www.developpez.com
Le 07/02/2020 à 10:50
On pourra remarquer que le petit bout de programme en Free commence par l'instruction #[enable(brainfuck)]
6  0 
Avatar de el_slapper
Expert éminent sénior https://www.developpez.com
Le 07/02/2020 à 15:09
Citation Envoyé par hotcryx Voir le message
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é.
4  0 
Avatar de Nethrandir
Futur Membre du Club https://www.developpez.com
Le 07/02/2020 à 11:47
perso je vous conseille plutôt Ook! : https://esolangs.org/wiki/Ook!
3  0 
Avatar de Markand
Membre confirmé https://www.developpez.com
Le 07/02/2020 à 9:07
Moi j'aime bien aussi le LOLCODE.
1  0 
Avatar de hotcryx
Membre extrêmement actif https://www.developpez.com
Le 07/02/2020 à 11:17
Dans les drôles de langages, il y a aussi celui datant de cette semaine: un langage écrit en chinois

(obfuscated code!)
1  0 
Avatar de Lung
Expert confirmé https://www.developpez.com
Le 07/02/2020 à 12:50
Citation Envoyé par Nethrandir Voir le message
perso je vous conseille plutôt Ook! : https://esolangs.org/wiki/Ook!
C'est la version pour le bibliothécaire ?
1  0 
Avatar de 23JFK
Membre expérimenté https://www.developpez.com
Le 07/02/2020 à 14:47
Manque toujours un input pour interagir avec le programme.
1  0 
Avatar de gaiol
Nouveau Candidat au Club https://www.developpez.com
Le 07/02/2020 à 9:18
Bravo pour le copier/coller de wikipedia (brainfuck) !
0  0