Journal Un peu de fun polyglotte

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
18
11
oct.
2026

Pour le plaisir des yeux de l'esprit, juste parce que le concept est amusant :

En C:

#define def int
#define foo(k) foo(long k) { some_label
#define return(f) return f; }

def foo(i):
    return(++i)

En Python:

#define def int
#define foo(k) foo(long k) { some_label
#define return(f) return f; }

def foo(i):
    return(++i)

Je n'ai pas réussi à tirer parti des accolades des dictionnaires Python pour avoir quelque chose qui contienne des instructions C. Mais si quelqu'un du lectorat voit d'autres moyens de détourner la syntax Python pour l'adapter au C, j'ai hâte de lire ça :-)

Est-ce utile ? Pas directement, mais c'est très amusant (ce qui est déjà utile en soi). La page wikipedia anglaise sur le sujet est un petit bonbon de geekerie, j'adore:

https://en.wikipedia.org/wiki/Polyglot_(computing)

On y apprend entre autres qu'il y a des applications en sécurité informatique ;-)

  • # Pour les moldus

    Posté par  (site web personnel) . Évalué à 4 (+4/-2).

    Pour ceux qui se demandent "C'est quoi la différence ?" : il n'y en n'a pas, et c'est ça qui est beau.

    • [^] # Re: Pour les moldus

      Posté par  (site web personnel, Mastodon) . Évalué à 3 (+2/-2).

      Et les moldus de mon genre, par contrecoup, vont demander à quoi ça sert d'avoir quarante-douze mille langages de développement si c'est pour écrire la même chose ? Et ce quand les mêmes geeks essaient de me faire croire que ce serait mieux s'il n'y avait qu'une seule langue humaine et un seul système d'écriture.

      Je n’ai aucun avis sur systemd

    • [^] # Re: Pour les moldus

      Posté par  . Évalué à 7 (+5/-0).

      Sauf si j'ai raté quelque chose, foo(i) donne i en Python et i + 1 en C.

      • [^] # Re: Pour les moldus

        Posté par  . Évalué à 4 (+2/-0).

        • [^] # Re: Pour les moldus

          Posté par  . Évalué à 1 (+0/-0).

          Pour compléter, en surchargeant les opérateurs +, on peut voir que ++p revient à à deux appels de l'opérateur unaire : +(+p)

          >>> class Plop:
          ...     def __add__(self, other):
          ...         print("add", type(other))
          ...         return self
          ...     def __iadd__(self, other):
          ...         print("iadd", type(other))
          ...         return self
          ...     def __pos__(self):
          ...         print("pos")
          ...         return self
          ... 
          >>> p = Plop()
          >>> p+1
          add <class 'int'>
          <__main__.Plop object at 0x76c577813860>
          >>> p += 1
          iadd <class 'int'>
          >>> +p
          pos
          <__main__.Plop object at 0x76c577813860>
          >>> ++p
          pos
          pos
          <__main__.Plop object at 0x76c577813860>
      • [^] # Re: Pour les moldus

        Posté par  (site web personnel) . Évalué à 5 (+4/-1).

        Je crois que "polyglotte" ça joue sur la similitude de la syntaxe du code, pas forcément sur l'exécution.

        • [^] # Re: Pour les moldus

          Posté par  (site web personnel, Mastodon) . Évalué à 5 (+2/-0).

          C'est comme ça que je le comprends (mais je suis une moldu).

          Je n’ai aucun avis sur systemd

        • [^] # Re: Pour les moldus

          Posté par  (site web personnel, Mastodon) . Évalué à 4 (+2/-0).

          À première vue, les exemples donnés sur la page wikipedia donnent le même résultat : poly dans le script (écrit) et dans le run (parlé)

          “It is seldom that liberty of any kind is lost all at once.” ― David Hume

        • [^] # Re: Pour les moldus

          Posté par  . Évalué à 1 (+0/-1).

          Oui, en fait il suffit que le même fichier puisse être interprété par différents programmes, peu importe le résultat (cf. l'exemple de l'attaque GIFAR dans la page wikipédia)

  • # Vieux The Daily WTF

    Posté par  (site web personnel) . Évalué à 5 (+3/-0).

    Ça m'a rappelé ça. Je me permet de le reproduire ici :

    Ludwig Von Anon sent in some code from the UI component of a large, multi-platform system he has the pleasure of working on. At first glance, the code didn't seem all too bad …

    procedure SelectFontIntoDC(Integer a) begin
      declare fonthandle fh;
      if (gRedraw is not false) then begin
        fh = CreateFontIndirect(gDC);
        SelectObject(gDC, fh);
        DeleteObject(fh);
      end;
    end;

    Seems fairly normal, right? Certainly nothing that meets our … standards. Of course, when you factor in the name of the codefile (which ends in ".c") and the header included throughout the entire project ("pascal.h"), I think it becomes pretty apparent that we're entering Whiskey Tango Foxtrot country:

    #define procedure void
    #define then
    #define is
    #define not !=
    #define begin {
    #define end }

    Yeeeeeeeee Haw! Sorry, just can't get enough of Mr. Burleson.

  • # Standard Cocorico

    Posté par  (site web personnel) . Évalué à 4 (+3/-0).

    Ça n'a pas grand chose à voir mais dans la catégorie des trucs amusants qu'on peut faire avec des define on a aussi le Standard Cocorico.

    Ce commentaire est sous licence CC0: faites-en ce que vous voulez tant que vous ne m'attribuez pas de fausses paroles.

    • [^] # Re: Standard Cocorico

      Posté par  (site web personnel, Mastodon) . Évalué à 3 (+1/-0).

      Et qui a connu le LSE, qui est le résultat d'une évolution d'un langage plus ancien, le LSD ?

      • [^] # Re: Standard Cocorico

        Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0).

        émoi émoi & moi ; et j’ai de beaux souvenir de ce basic très structuré (en plus de causer en Molière) bien avant d’autres.

        “It is seldom that liberty of any kind is lost all at once.” ― David Hume

        • [^] # Re: Standard Cocorico

          Posté par  (site web personnel) . Évalué à 4 (+2/-0).

          Et moi je me souviens d'un prof qui avait participé à sa création et qui nous en parlait sans arrêt comme du truc révolutionnaire qui aurait du conquérir le monde mais n'avait pas marché, faute à pas de chance !

          • [^] # Re: Standard Cocorico

            Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0).

            Oui, vraiment pas de chance ; ça aurait du conquérir la francophonie (le jargon anglais était quand même déjà une barrière pour certaines personnes qui n’ont pas pu prendre le train de la programmation)

            “It is seldom that liberty of any kind is lost all at once.” ― David Hume

    • [^] # Re: Standard Cocorico

      Posté par  (site web personnel) . Évalué à 6 (+3/-0).

      Je radote je suis vieux mais revoici l'histoire : il y a longtemps, à l'époque des ordinosaures, j'étais en prépa maths, on faisait du Turbo Pascal pour faire de l'informatique appliquée aux maths, et on utilisait une bibliothèque ayant deux intérêts :

      1. cacher les trucs compliqués parce qu'on ne voulait pas faire de nous des développeurs (*) (donc les initialisations de périphériques, la gestion des fichiers, etc.)
      2. franciser le tout parce que le but n'était pas l'anglais ou l'informatique mais faire des maths et de l'algorithmique

      Et du coup, arrivé chez toi, si tu avais un ordi et une copie de Turbo Pascal, ben tu ne pouvais rien faire. Il fallait se faire en douce une copie de la bibliothèque en français et la ramener chez soi pour pouvoir relancer des programmes palpitants comme la transformée de Fourier rapide.

      Autant le 1. se comprend, autant le 2. est plus discutable (surtout que ça ne change pas les mots clés du langage), car des commentaires feraient tout autant l'affaire (clear_screen(); // efface l'écran ).

      * en un sens, ça n'a pas marché, localement en tout cas

      • [^] # Re: Standard Cocorico

        Posté par  (site web personnel) . Évalué à 2 (+0/-0). Dernière modification le 12 octobre 2026 à 13:47.

        • en un sens, ça n'a pas marché, localement en tout cas

        et globalement : il n'y a "que" Logo qui pouvait se permettre d'être multilingue :-) (et plus dans une niche : Forth voire LISP dont tu définis les "mots"/instructions manipulés pour tes besoins de plus haut niveau.

        quelque part, Scratch repart du même principe avec sa programmation graphique (la structure est compréhensible du fait de la représentation graphique), manque les commentaires et l'organisation/groupage des blocs pour mettre plus en avant l'algorithmique voire l'architecture logicielle ;-)

      • [^] # Re: Standard Cocorico

        Posté par  (site web personnel, Mastodon) . Évalué à 2 (+0/-0).

        Et si ce qui n’a pas marché était qu’il faille copier la bibliothèque en douce ? Voilà comment on a loupé le coche du LL…

        “It is seldom that liberty of any kind is lost all at once.” ― David Hume

Envoyer un commentaire

Suivre le flux des commentaires

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