Atrocités linguistiques

Posté par (page perso) . Modéré par Benoît Sibaud.
Tags :
0
2
juin
2003
Rien à voir
Ça fait un mois que vous apprenez le C et vous comprenez toujours pas les pointeurs ?
Vous n'arrivez pas à relire votre programme Perl ?
Votre tortue Logo se déplace toute seul ?

Sachez que vous n'êtes PAS à plaindre ! Bon, si quand même, parce que ce qui va suivre ne va pas vous aider à résoudre votre problème. En tout cas il existe des langages pires. Des programmes pires. Et il y a même des gens qui font ces programmes pires dans ces langages pires!

Parmi les langages on trouve (avec leur "hello world"):

Befunge qui est un langage bi-dimensionnel.
55+".dlrow ,olleH">:#,_@

BrainFuck : Il y a un tableau d'entiers de 1 octet et un pointeur sur ce tableau. Tous les entiers sont initialisés à zéro, et le pointeur pointe vers le premier élément. Il ne reste plus qu'à déplacer le pointeur, et à incrémenter/decrémenter la valeur vers laquelle il pointe.
Rudimentaire non?
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]
>++++++++[<++++>-]<.#>+++++++++++[<+++++>-]<.>++++++++[<+++
>-]<.+++.------.--------.[-]>++++++++[<++++>-]<+.[-]++++++++++.
(il n'y a pas de retour à la ligne en vrai. Ca fait une seule ligne.)


Unlambda est un autre langage de programmation obscure créé dans le seul but de rendre la programmation douloureuse et ardue (ou amusante et pleine de défis si vous préférez).
Tout comme le Scheme, ce langage ne manipule que des fonctions. Et dire que ça suffit!
```s``sii`ki
``s``s`ks
``s``s`ks``s`k`s`kr
``s`k`si``s`k`s`k
`d````````````.H.e.l.l.o.,. .w.o.r.l.d.!
k
k
`k``s``s`ksk`k.*
(atroce non?)


Orthonormal est un autre langage bi-directionnel sympathique
0 'd' 'l' 'r' 'o' 'w' ' ' ',' 'o' 'l' 'l' 'e' 'h' s 0 c 0 ret


Il y en a plein d autres. tous plus immondes (attrayants) les uns que les autres.

Maintenant que vous avez trouvé votre langage de prédilection, essayez de programmer un (une?) quine.
C'est un programme qui affiche son propre code. Mais attention! Pas un qui lit sa source! Et c'est la que ça devient difficile...
Je n'ai pas réussi de mon coté... je vous en poste quelques uns ici.. il y en a d'autres avec les liens... essayez si vous avez du temps!!

Scheme ou Lisp:
((lambda (x)
(list x (list (quote quote) x)))
(quote
(lambda (x)
(list x (list (quote quote) x)))))

C:
char*f="char*f=%c%s%c;main()
{printf(f,34,f,34,10);}%c";
main(){printf(f,34,f,34,10);}

Perl:
$_=q{$_=q{Q};s/Q/$_/;print};s/Q/$_/;print


Y'a des tarés je vous jure :)
Bon, je vous aurait prévenu, n'essayez pas ces langages ni de faire de quines avant d'avoir résolu vos problèmes avec vos langages favoris!
  • # Re: Atrocités linguistiques

    Posté par . Évalué à  10 .

    Deux liens présents sur la page "Les Quines" sont morts. Voici leurs équivalents, à savoir :

    Le programme Hello World en divers langages : http://www.cuillin.demon.co.uk/nazz/trivia/hw/hello_world.html(...)

    Le programme pour écrire les paroles de la chanson 99 Bottles of beer on the wall, en 548 langages : http://99-bottles-of-beer.ls-la.net/(...)

    bonne lecture !
    • [^] # Re: Atrocités linguistiques

      Posté par (page perso) . Évalué à  6 .

      J'avais vu un programme bien amusant sur le site de l'ioccc :
      appellons-le '1.c'.
      Une fois compilé, lancer './1 > 2.c', compiler 2.c et lancer './2 > 3.c'.
      Compiler 3.c, lancer './3 > 1bis.c'
      1.c et 1bis.c étaient identiques.

      La grande question que je me pose, c'est : font-ils ça à la main/de tête ?
      Ou bien ont-ils écrit un programme qui fait ça pour eux ? :)
      • [^] # Re: Atrocités linguistiques

        Posté par . Évalué à  10 .

        Ou bien ont-ils écrit un programme qui fait ça pour eux ?

        Et comme c'est deja surement pas facile d'écrire un programme qui fasse ca, peut etre qu'ils ont fait un programme qui fait ce programme......


        Ok, je sors....
    • [^] # Re: Atrocités linguistiques

      Posté par (page perso) . Évalué à  3 .

      Sans vouloir le faire exprès, quand on veut que l'entrée de lex, normalement sur stdin soit interfacée avec un programme en C, voila comment ild faut redéfinir l'entrée :

      # define input()
      (((yytchar=yysptr>yysbuf?U(*--yysptr):sgetc())==10?(yylineno++,yytchar):yytchar)==EOF?0:yytchar)

      Je n'ai rien inventé et ça fonctionne très bien, mais 12 ans après ça fonctionne toujours et je ne sais toujours pas pourquoi...
      • [^] # Re: Atrocités linguistiques

        Posté par (page perso) . Évalué à  1 .

        Réécrit sous forme de fonction (et sans garantie sur le typage), ça doit donner qqchose comme ça :

        char* input() {

          int x;
          char *y;
          char *yytchar;

          yytchar = yysptr;

          if (yytchar > yysbuf) {
            x = U(* --yysptr);
          }
          else {
            x = sgetc();
          }

          if (x == 10) {
            yylineno++;
            y = yytchar;
          }
          else {
            y = yytchar;
          }

          if (y == EOF) {
            return 0;
          }
          else {
            return yytchar;
          }
        }
  • # Re: Atrocités linguistiques

    Posté par (page perso) . Évalué à  10 .

    Il fut un temps où j'ai regardé deux ou trois pages sur ce genre de sujets amusants, connexes avec la programmation obfusquée :
    - en Java http://www.gamedev.net/hosted/javaextreme/obfuscat.htm(...)
    - En C (le plus facile, puisque déja fait) http://www.ioccc.org/(...)

    Et donc quelques pages bien intéressantes :
    http://www.catseye.mb.ca/esoteric/(...)
    http://www.mines.edu/students/b/bolmstea/essies/(...)
    http://p-nand-q.com/languages.htm(...)
  • # Re: Atrocités linguistiques

    Posté par (page perso) . Évalué à  10 .

    Ces langages sont généralement des délires d'universitaires et pour un grand nombre d'entre eux se basent sur une machine à pile avec des opérations arithmetique de bas niveau (empiler un nombre, additionner les deux sommets et empiler le résultats, etc). Sur ce principe on peut citer entre autre
    Befunge, BrainFuck, WhiteSpace ( http://compsoc.dur.ac.uk/whitespace/(...) ), GOTO++ ( http://gpp.niacland.net(...) ) et Java.

    Ce qui différencie les deux derniers c'est qu'ils ne se contentent pas d'être un langage jouet rigolo mais qu'ils implémentent des choses un peu plus utiles que des additions et des affichage de caractères ( programmation réseau, graphique, parallele, structures de données complexes, etc) donc on peut faire des choses bien plus intéréssantes.

    Bref, ces langages-là utilisent uniquement une couche de sucre syntaxique pour rendre un principe simple plus rigolo voire attrayant.

    Ceuses qui cherchent vraiment des concepts de dinques se tourneront vers d'autres principe de programmation et des langages dérivés. je suggère en particulier les machines chimiques qui ont un bon potentiel.
  • # Re: Atrocités linguistiques

    Posté par (page perso) . Évalué à  4 .

    pour les modéros : les deux liens sont en anglais donc il faudrait changer les drapeaux.

    merci.
  • # hello world !

    Posté par (page perso) . Évalué à  10 .

    A lire sur le site de GNU :

    rubrique humour

    http://www.gnu.org/fun/jokes/helloworld.html(...)

    How the way people code "Hello World" varies depending on their age and job
    • [^] # Re: hello world !

      Posté par . Évalué à  6 .

      Et n'oublions pas le (seul?) example de source qui marche avec 4 langages ( http://www.gnu.org/fun/jokes/happy-new-year.cfbC.html(...) ) :


      cat /*dev/null; echo "Happy New Year"\!
      cat <<c*/ /*dev/null | cat > /dev/null
      c */ () {} /*
      c */ main() { cat(); printf("Happy New Year!\n"); } /*
      17 format(' Happy New Year!')
      write (6,17)
      stop
      end
      c This program runs in four languages with the same effect.
      c The languages are C, Fortran, C Shell and Bourne Shell.
      c Written by Vadim Antonov, avg@hq.demos.su
      c*/
  • # Re: Atrocités linguistiques

    Posté par (page perso) . Évalué à  6 .

    Un sujjet différent mais connexe :
    http://www.willamette.edu/~fruehr/haskell/evolution.html(...)

    la factorielle comme vous l'avez jamais vue, genre avec des entiers à la Peano ou à la Church, ou encore la version combinatorielle (sans aucune variable scalaire).
  • # K

    Posté par . Évalué à  7 .

    Dans le genre "langage obscure mais quand meme utilisé dans des grandes entreprises" il y a K :
    Exemple de code :
    Parser XML en K : http://www.kx.com/a/k/examples/xhtml.k(...)

    Un article de présentation sur Kuro5hin :
    http://www.kuro5hin.org/story/2002/11/14/22741/791(...)

    Vous pouvez meme l'utiliser sous linux pour impressionner tous vos amis geeks :
    http://www.kx.com/download/download.htm(...)
  • # Langages esoteriques

    Posté par . Évalué à  7 .

    J'en profite pour mettre un lien vers l'encyclopedie des langages esoteriques qui liste plein de langages interessants:

    http://www.kraml.at/stupid/(...)

    Entre aute, le Chef (http://www.dangermouse.net/esoteric/chef.html(...) ) dont les programmes ressemblent a des recettes de cuisine, et le Shakespeare (http://www.gnuprojects.org/spl/spl.htm(...) ) dont les programmes ressemblent a des pieces de theatre.

    Bien drole.

    Ahhh, l'humour d'informaticien...
    • [^] # Re: Langages esoteriques

      Posté par (page perso) . Évalué à  1 .

      Je suis très embêté, d'instruction dc a disparu sur les versions récentes.

      Je ne pourrai donc plus utiliser cette petite expression courante qu'affectionnait tant Irvin (l'un des premiers modéros) :

      If you need any help feel free to use:
      echo '16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D4D465452snlbxq'|dc
    • [^] # Re: Langages esoteriques

      Posté par . Évalué à  3 .

      Le Shakespeare est génial!!!

      Quoi de plus beau pour séduire une geekette? Voyez plutôt :

      Romeo, A character to store the sum.
      Juliet, An admirer who helps to calculate the sum.

      Act I: A simple play.
      Scene I: Juliet's conversation with Romeo.

      [Enter Romeo and Juliet]
      Juliet: Listen to your heart!
      Romeo: You are as beautiful as a sweet red rose.
      Listen to your heart.
      Juliet: You are as brave as the sum of me and thyself.
      Open your heart!
      [Exeunt]

      Tous ca pour ajouter deux variables... C'est beau le codage, des fois...

      "Il faut" (Ezekiel 18:4) "forniquer" (Corinthiens 6:9, 10) "avec des chiens" (Thessaloniciens 1:6-9) "morts" (Timothée 3:1-10).

  • # Re: Atrocités linguistiques

    Posté par . Évalué à  7 .

    Bah, y'a pire que le Brainfuck... Y'a le Malbolge, qui gagne sans difficulté le titre de langage de programmation le plus difficile à utiliser; humainement impossible à programmer; pour arriver à coder un Hello World, il a fallu mettre en place des algorithmes génétiques de recherche.

    (en exclusivité, le source de ce merveuilleux programme: (=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@b=`{^Lx8%$Xmrkpohm-kNi;gsedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543s+O<oLm )

    Le site officiel: http://www.mines.edu/students/b/bolmstea/malbolge/(...)
    Et là, l'explication pour le fameux Hello World en Malbolge: http://www.acooke.org/andrew/writing/malbolge.html(...)
  • # Qq liens en Perl

    Posté par Anonyme . Évalué à  7 .

    Voici deux jeux que nous avons chez les Mongueurs de Perl :

    1) Il est maintenant courant de dire "à plus" pour "à plus tard". Les programmeurs C++ qui se croient plus malins que les autres, ont pris pour habitude de dire A++ pour "à plus" à la fin de leurs mails. Les Perl Mongueurs de Paris, qui se croient plus obfuscateurs que les autres, ont adapté la chose à leur langage de prédilection. D'autant plus que deux Mongueurs (Stéphane et BooK) ont gagné le premier et deuxième prix respectivement dans des concours d'Obfuscated Perl (le Perl Assombri). Il a été question un moment de pouvoir incrémenter une variable sans que cela se sache.

    http://paris.mongueurs.net/aplusplus.html(...)

    Je ne suis que 2ème, mais je vais m'y remettre ... :-))

    (2) L'obfuscation, ou assombrissement en français, consiste à façonner un bout de code ou un programme afin de le rendre totalement incompréhensible à un lecteur humain, même aidé d'outils informatiques. Il s'agit plus ou moins d'établir un dialogue secret entre le programmeur et sa machine, qui sera la seule à comprendre ce qu'il demande, et à l'exécuter. Bien sûr, la performance n'est pas du tout le critère principal. En revanche l'aspect artistique ou humoristique d'un programme peut être particulièrement apprécié.

    http://paris.mongueurs.net/assombri/(...)


    $A += $A !~ santana;
    • [^] # Re: Qq liens en Perl

      Posté par . Évalué à  1 .

      Trop facile le Perl !
      La quine en Perl est le seul des programmes ci-dessus que j'ai compris,
      presque immédiatement.
  • # Re: Atrocités linguistiques

    Posté par . Évalué à  6 .

    ouaip, j'ai un quine a proposer :





    c'est normal que y ait rien. un programme sans ligne de code, si il affiche rien, il affiche quand meme son contenu :)

    ok -1
    • [^] # Re: Atrocités linguistiques

      Posté par . Évalué à  4 .

      Tu as de la chance que les brevets logiciels n'existe pas parce que Georg-Christoph Lichtenberg pourrait te reprocher de t'inspirer de son "couteau sans lame auquel il manque le manche".

      Remarque idiote, Georg-Christoph Lichtenberg vivait au XVIII° siècle, son invention serait donc déjà tombée dans le domaine public de plus l'idée d'ordinateur n'existait pas encore, mais son inventeur (Charles Babbage) était né !

      -1 car nous ne somme pas sur LinuxCulture
    • [^] # Re: Atrocités linguistiques

      Posté par . Évalué à  2 .

      je ne vois rien, je n'ai donc pas vu d'erreur dedans.
    • [^] # Re: Atrocités linguistiques

      Posté par (page perso) . Évalué à  4 .

      Et en plus il fonctionne sous tous les langages ! (cf. plus haut)
      • [^] # Re: Atrocités linguistiques

        Posté par (page perso) . Évalué à  3 .

        Ha non, ca fonctionne pas sous tous les langages, ca ne compile meme pas avec gcc :

        $ touch truc.c
        $ gcc truc.c
        /usr/lib/crt1.o: In function `_start':
        /usr/lib/crt1.o(.text+0x18): undefined reference to `main'
        collect2: ld returned 1 exit status
  • # Re: Atrocités linguistiques

    Posté par (page perso) . Évalué à  2 .

    en parlant d'atrocités, je redonne l'URL d'un ptit concours qu'on a fait il y'a quelques mois, qui consistait a ecrire une demo graphique en moins de 4kb de sources (SDL et glut autorisés seulement, ANSI C, doit compiler sous Linux, Win32 (vc++) et MacOSX).
    Le code est laid au possible, l'avantage c'est que le resultat est "joli" (tout depend ce qu'on appelle joli remarquez :)


    http://www.demonic.demon.nl/4k/(...)
  • # Générateur de Quines

    Posté par . Évalué à  2 .

    Sur: http://www.excessus.demon.co.uk/misc-hacks/#quine(...)
    il y a programme qui permet de générer un quine à partir de n'importe quel proegramme (en C)...
  • # Re: Atrocités linguistiques

    Posté par . Évalué à  1 .

    Pourquoi chercher ailleurs ce que l'on utilise tout les jours.
    Je connais un langage dont la grammaire et l'orthographe n'ont aucune régle si ce n'est celle des exceptions.
    C'est la langue françaises.
  • # Re: Atrocités linguistiques

    Posté par (page perso) . Évalué à  2 .

    Je me suis amusé à faire ma propre quine (programme dont le but est d'afficher sa source, sans lire son fichier source bien sur) en Shell... Bon, bien sûr en shell et en utilisant les outils standards c'est pas vraiment dur, mais ça marche !

    Pour ceux que ça amuse, voilà la source :

    #!/bin/bash

    ZIP="begin-base64 644 -\n
    QlpoOTFBWSZTWbXqgFwAABnfgEQQfOrQCgAgwBQ/6d+eIACANCakxoI0aZGR\n
    6mExMNQxpoNADJoDI00MTRlQc2CKXPFyL8XB7x5eDPFgj3shmm9ThipX7uJn\n
    iowrEpZapRQd7UncM3KG6JsguWPWY6DMK3IFlkRnEO3REpEhgKNNUFFgGG/6\n
    +2VK+tzWbBITn3AeT+OJCHPgSMJo1NwBh94EU60wQMAeZFif8XckU4UJC16o\n
    BcA=\n
    ====\n
    "

    ZOP=$(echo "$ZIP" | sed s/\\\\n/\\\\\\\\n/)
    echo -e "$ZIP" | uudecode | bunzip2 | gawk -v zip="$ZOP" '{ printf($0) } /ZIP=/ { if (i==0) {print zip; print "\""; i++} } { print "" }'

    Enjoy ;-)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.