Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Chroniqueur Actualités

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

    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 :
    [LIST]
    [*]>​ incrémente (augmente de 1) le pointeur.
    [*]<&#8203; décrémente (diminue de 1) le pointeur.
    [*]+&#8203; incrémente l'octet du tableau sur lequel est positionné le pointeur (l'octet pointé).
    [*]-&#8203; décrémente l'octet pointé.
    [*].&#8203; sortie de l'octet pointé (valeur ASCII).
    [*],&#8203; 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.
    [*]]&#8203; retourne à l'instruction après le [ si l'octet pointé est différent de 0. [/LIST]
    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--
    +&#8203; ++(*ptr)
    -&#8203; --(*ptr)
    .&#8203; putchar(*ptr)
    ,&#8203; (*ptr) = getchar()
    [ while(*ptr) {&#8203;
    ]&#8203; }


    Le programme suivant affiche le traditionnel « Hello World! » et une nouvelle ligne à l'écran :

    Code Brainfuck :Sélectionner tout -Visualiser dans une fenêtre à part
    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 -Visualiser dans une fenêtre à part
    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 - Visualiser dans une fenêtre à part
    [-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++>+++++++++++++++++++++++++++++++++>+<>>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<+>>>>>>>-]<<<<<<<[>>>>>>>+<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>-]<<<<<<<<[>>>>>>>>+<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>-]<<<<<<<<<[>>>>>>>>>+<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>-<>]<<<<<<<<<<[>>>>>>>>>>+<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>-]<<<<<<<<<<<[>>>>>>>>>>>+<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>-<>]<<<<<<<<<<<<[>>>>>>>>>>>>+<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>-]<<<<<<<<<<<<<[>>>>>>>>>>>>>+<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<[>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>-]<<<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>[-]<<<<<<<<<<<<<<<>[<>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>>>>>>>>>-<>]<<<<<<<<<<<<<<<<<<<<[>>>>>>>>>>>>>>>>>>>>+<<<<<<<<<<<<<<<<<<<<-]>>>>>>>>>>>>>>>>>>>>>.>.>.>.>.>.>.>.>.>.>.>.>.>.<<>>>[-]++++++++++.<<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<>>>[-][-]<<<<<<<<<<<<<<<<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<<<<<<<<<<<<<[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<
    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 ?
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    Inactif  
    Boff, ça vaut pas le whitespace.

  3. #3
    Membre éclairé
    Moi j'aime bien aussi le LOLCODE.

  4. #4
    Nouveau Candidat au Club
    Bravo pour le copier/coller de wikipedia (brainfuck) !

  5. #5
    Membre extrêmement actif
    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
    Keith Flint 1969 - 2019

  6. #6
    Expert éminent sénior
    On pourra remarquer que le petit bout de programme en Free commence par l'instruction #[enable(brainfuck)]

  7. #7
    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!)
    Si la réponse vous a aidé, pensez à cliquer sur +1

  8. #8
    Futur Membre du Club
    perso je vous conseille plutôt Ook! : https://esolangs.org/wiki/Ook!

  9. #9
    Expert confirmé
    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 ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. Écrivez dans un français correct !!

    Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise
    OpenGL 2.1 - Oracle 10g - Interbase (7 - XE) - PostgreSQL 11.6

  10. #10
    Membre chevronné
    Manque toujours un input pour interagir avec le programme.

  11. #11
    Expert éminent sénior
    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é.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  12. #12
    Membre émérite
    d'autant plus que les traductions automatiques sont loin d'être fo-folles dans ce contexte précis. xD
    Pensez à utiliser les pouces d’appréciation, pour participer à la visibilité de l'apport d'un propos, ou l'intérêt que vous y prêtez... qu'il soit positif ou négatif.

###raw>template_hook.ano_emploi###