Journal C sans accolades, IA un problème

21
7
déc.
2025

Sommaire

Tout part d'un projet pédagogique où l'on décrypte un message secret à l'aide d'une attaque statistique pour repérer les lettres les plus courantes, et donc le e. Ce qui m'amène à penser qu'un jour il faudrait quand même que je lise Georges Perec et en particulier La disparition, trois cents pages sans la lettre e. Surgit alors la question : peut-on écrire un programme en langage C sans accolades ? Question métaphysique à peine moins importante que celle dont la réponse est 42. Ça tombe bien, je dois réfléchir justement à quelques heures à enseigner à des étudiants non informaticiens sur les bons usages de l'IA (à prendre dans ce journal essentiellement au sens des LLM et GPT).

ChatGPT essaie de retomber sur ses pattes

Je donne donc ma langue au chat (désolé mais tant qu'à verser dans la facilité, j'y vais à fond !) : « peut-on écrire un programme en langage C sans accolades ? »

Oui… et non, selon ce que l’on appelle “écrire un programme”.
[…]
Mais beaucoup de structures du langage fonctionnent très bien avec une seule instruction, donc sans accolades.
Exemple valide de programme sans aucune accolade :

#include <stdio.h>

int main()
    if (printf("Bonjour !\n"))
        return 0;
    else
        return 1;

[…]
Même ceci est un programme C valide :

int main()
    return 0;

L'outil me propose même de générer des programmes encore plus longs sans accolades. Sauf qu'il y a apparemment confusion entre le fait que les accolades ne sont pas obligatoires après par exemple un if ou un for et le cas des fonctions. Je ne suis pas familier avec la lecture de la norme C, mais ISO/IEC 9899:2024 ne semble pas envisager qu'une fonction main() puisse être dépourvue d'accolades (section « 5.1.2.3.2 Program startup »). Ça ne compile pas, même avec des options telles que -std=legacy. Et dans le Kernighan et Ritchie, 2e édition (1988), je lis :

la fonction la plus succincte possible est rien() {}, qui ne fait rien et ne retourne rien.

Quoique de nos jours, avec gcc il faut ajouter l'option -Wno-implicit-int pour que ce soit accepté, sinon l'absence de type de la fonction bloque la compilation (depuis la norme C99). Mais il faut bien des accolades, sinon c'est un prototype (à condition de rajouter un point-virgule).

Pas plus de succès avec d'autres compilateurs disponibles sur https://godbolt.org/. Oui, je teste largement car après tout je ne suis pas expert des normes C et de la longue histoire du langage, avec tous ses recoins obscurs. On peut en écrire des choses en C !

Je tape alors : « Ces programmes ne compilent pas avec gcc. Avec le premier programme, j'obtiens par exemple ce genre d'erreurs : "error: expected declaration specifiers before ‘if’"».

Tu as tout à fait raison — merci d’avoir collé l’erreur. Mes exemples précédents étaient faux : en C standard (et avec gcc), le corps d’une fonction doit être une compound statement, c’est-à-dire entouré d’accolades { … }.

Le problème n'est pas seulement que les exemples étaient faux, mais qu'ils étaient faux au sens algorithmique du terme. Si l'agent avait simplement lancé gcc et récupéré sa valeur de retour, il aurait eu accès à la vérité booléenne !=0. Mais j'imagine que les outils IA dédiés au codage sont capables de faire ça.

Je n'ai pas tout collé de sa réponse, mais mon félin gratuit me baratine sur son erreur, il m'embobine. Il ignore que la confiance est plus facile à perdre qu'à regagner.

J'ai aussi essayé d'ajouter le mot « compilable » ou « exécutable » dans ma question, pour éviter tout malentendu, mais j'obtiens toujours des textes affirmant avec un aplomb présidentiel que les codes frelatés inclus compilent. Décidément, rien à faire, je crois qu'il préfère le Rust :

au minimum, la définition d’une fonction comme fn main() exige un bloc délimité par { … }.

Finalement, en remplaçant simplement « sans accolades » (j'avais mis un s car elles marchent par pairs) par « sans aucune accolade », j'obtiens cette fois des réponses correctes. Peut-être y a-t-il donc un problème de prompteur. Je me sers très peu de ces outils pour mon usage personnel, donc je m'y prends peut-être mal pour prompter. Mais ça ne change pas le fait que l'outil déclare compilables des codes qui ne compilent pas.

Mistral à moitié gagnant

Le Chat de Mistral AI me répond qu'il est possible d'écrire un programme en C sans accolades et me donne des exemples de fonctions ne contenant pas d'accolades, en tous cas à l'intérieur des accolades de la fonction ! La réponse est donc juste à condition qu'on considère qu'il y a un sous-entendu dans l'affirmation, ou qu'il y a un malentendu concernant ma question. Mais au moins, les codes compilent.

« Réponse Flash » Gordon chez Qwant

Je passe en anglais dans Qwant, espérant probablement accéder plus facilement au grand savoir mondial, et dans un style plus orienté mots-clés pour moteur de recherche : « a C language program without braces ». La réponse est beaucoup plus courte et inattendue :

Programme C sans accolades
Le contexte mentionne l'utilisation de digraphs en C, qui permettent de remplacer les accolades { et } par <% et %>, ainsi que les crochets [ et ] par <: et :>. Voici un exemple de programme C utilisant ces digraphs pour éviter les accolades :
[…]
Les digraphs sont une fonctionnalité peu utilisée aujourd'hui, mais ils étaient utiles pour les claviers ne disposant pas des caractères spéciaux comme les accolades et les crochets.

Mais la réponse est juste et ce programme minimaliste compile :

int main(void) <% %>

Bon, je suis content, j'ai appris quelque chose, aussi juste qu'inutile. Je me dis qu'il doit s'agir d'une syntaxe des années 70, mais d'après mon livre de C. Delannoy, c'est un ajout de la norme C99. Dans la norme C23, on la trouve à la section « 6.4.6 Punctuators », avec également des digraphes pour les crochets et les dièses.

Je pourrais juste reprocher à l'IA de Qwant d'avoir écrit digraphe sans e, mais ma question en anglais a peut-être embrouillé les neurones de monsieur l'agent. Moi aussi, il m'arrive de fauter.

Quarante-deux

La question « peut-on écrire un programme en langage C sans accolades ? » serait-elle plus profonde qu'il n'y paraît ? Elle amène les différents outils à des réponses bien différentes, et fait perdre la tête à certains.

Mes rêvasseries me ramènent à Marie Stuart, reine d’Écosse, qui a également perdu la tête le 8 février 1587, suite à l'attaque par analyse fréquentielle de ses messages, qui étaient chiffrés en grande partie par substitutions de lettres. Et comme d'après Wikipedia, « le substantif français "accolade" dérive du latin ad collum, au cou, auquel s'ajoute le suffixe dérivationnel -ade », décidément tout se tient dans ce journal qui pourrait sembler sans queue ni tête.

  • # Les revenentes

    Posté par  (Mastodon) . Évalué à 9 (+7/-1).

    Juste pour dire que l'ami Georges Perec a aussi écrit une nouvelle où la seule voyelle est le 'e'. Certes c'est une nouvelle (et pas un roman), certes il s'est autorisé des fautes de Français (à commencer par le titre), mais merde, quel jongleur !

    Sinon pour utiliser régulièrement les ChatMistralClaude, j'ai vite remarqué qu'ils sont très forts (mais vraiment) sur les sujets courants où la bibliographie afflue, mais ils restent limités quand tu demandes un truc un peu tordu.

    Quand on sait la façon dont ils fonctionnent (bouffage de corpus quasi illimité) c'est intuitif, mais ça reste valide y compris avec les versions les plus récentes (où ils font largement plus que de la proba du prochain mot).

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # constat similaire

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

    ah, je vois que toi aussi tu rencontres les mêmes soucis que moi avec l'IA^W^W les LLM généralistes (un marteau c'est pour les clous, pour les vis un tournevis est plus adapté…)

    Je n'ai pas tout collé de sa réponse, mais mon félin gratuit me baratine sur son erreur, il m'embobine. Il ignore que la confiance est plus facile à perdre qu'à regagner.

    j'ai beau demander un taux de confiance de ses propres réponses, il prétend que c'est de l'ordre de 100% sans jamais douter, ni être en mesure d'une démarche de « parler à son canard »1 o_O

    alors, oui, je suis un peu exigeant, j'ai utilisé de l'IA dès les années 90 (oui, au millénaire dernier…), que ce soit du système expert (ça marchottait, corpus insuffisant :/) ou du réseau de neurones (avec des proc aujourd'hui considérés poussifs, ça mettait 24h à générer des premières réponses déjà inexactes à l'époque, problèmes de synapses…)
    Bref, je vois quelques utilisations qui marchottent avec supervision obligatoire, mais contrairement aux zélotes de l'IA qui leur confieraient leur vie (ou mort), je trouve que les promesses faites ne sont pas encore tenues :/

    Je me sers très peu de ces outils pour mon usage personnel, donc je m'y prends peut-être mal pour prompter. Mais ça ne change pas le fait que l'outil déclare compilables des codes qui ne compilent pas.

    ça c'est « un peu » ballot pour une IA censée aider à coder… à ce niveau, ce n'est même pas de l'imitation artificielle, mais plutôt (l'ami de Mickey<) de l'imitation superficielle… peut être demander à l'IA de se restreindre à du code compilable ? :D


    1. méthode éprouvée que la méthode du canard en plastique, approchant les résultats de la méthode de la RACHE 

    • [^] # Re: constat similaire

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

      peut être demander à l'IA de se restreindre à du code compilable ?

      Il a bien précisé dans le journal qu'il a essayé sans succès.

      Après, ça dépend du type d'outil. Avec un agent qui supporte MCP (la possibilité d'appeler des outils externes), RAG (l'utilisation de resources externes pour générer des réponses et fournir des sources) et chaines de pensées (la fourniture d'un raisonnement étape par étape) j'ai personnellement vu des résultats impressionnants sur ce genre de question.

      En gros, le modèle donne une première réponse, essaie, voie que ça ne marche pas, modifie sa réponse et réitère. Mon expérience personnelle c'est avec Gemini 3 et une couche "proprio" de mon employeur pour l'embarqur dans un outil en ligne de commande qui à accès au répertoire courant (mais il faut valider chaque commande exécutée). Et pour générer ou revoir du code, c'est absolument fabuleux.

      Par contre, ça coûte cher! L'outil donne le nombre de tokens et autres stats, j'ai essayé de recouper ça avec les tarifs Google (qui sont assez obscurs pour moi) et j'ai l'impression que je m'en tire à ~20€ pour une revue de patch. Qui en général fait des remarques intéressantes mais se concentre un peu trop sur des "lints" et rate des trucs importants (genre faille de sécurité).

      Je vais essayer ton exercice aujourd'hui, ça me paraît un challenge intéressant.

      • [^] # Re: constat similaire

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

        Il a bien précisé dans le journal qu'il a essayé sans succès

        bin oui, il n'a pas trouvé le bon prompt :D Alors qu'en appliquant une méthode Shadok1 il aurait pensé à le demander à son IA o_O

        j'ai personnellement vu des résultats impressionnants sur ce genre de question.

        Moi aussi. Impressionnants de contradictions, visiblement la notion de preuve et celle de raisonnement reproductible n'a pas (encore) été intégrée aux LLM.
        Un des intérêts, c'est que cela permet de s'intéresser à des points auxquels tu n'aurais pas pensé — bon, généralement c'est parce que ce n'est pas pertinent — pour autant si ça ressort, c'est que c'est un élément (trop) présent dans le corpus d'entraînement. Ce pourquoi une IA non libre ne reste qu'une boîte noire, là où une boîte blanche est étudiable (voire améliorable)

        Ce que tu indiques sur MCP et RAG ressemble encore (pour moi) à un pansement sur une jambe de bois : en quoi cela est effectivement utilisé comme boucle de rétroaction permettant d'affiner la réponse et — soyons fou — permettant d'identifier (et lister) les essais non retenus ? Si le corpus est incomplet, ce serait tout de même plus simple d'indiquer que la réponse proposée est une projection vue que non présente dans le corpus d'entraînement. Pour cela, il faudrait une IA qui soit en mesure d'identifier les limites de ses réponses ? plutôt qu'un menteur avéré, ce que je constate régulièrement…


        1. plus ça rate, plus ça a de chance de fonctionner, et il y a d'autres moyens absurdes^Wshadoks 

        • [^] # Re: constat similaire

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

          Il fut élevé au grade de Grand Désordinateur et les Shadoks décidèrent que ce serait lui la super-intelligence qui les guiderait désormais dans l'organisation de leur nouvelle planète.

          Jacques Rouxel, Les Shadoks et le Désordinateur, 2000.

      • [^] # Re: constat similaire

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

        le coût est un point connexe : tu paies pour obtenir des résultats plus précis ou spécifiques ;-)

        Par contre, ça coûte cher! L'outil donne le nombre de tokens et autres stats, j'ai essayé de recouper ça avec les tarifs Google (qui sont assez obscurs pour moi) et j'ai l'impression que je m'en tire à ~20€ pour une revue de patch.

        bah 20 € c'est 10 min de mon boulot à une époque où mon TJM était de l'ordre de 900 €… la pause café coûtait cher au client, pourtant c'était souvent là qu'on agrégeait les infos permettant d'avancer plus vite dans notre boulot :D (perso, c'est plutôt les réunions d'une heure non productives que je trouvais coûter cher, mais là c'était considéré normal o_O)

        Pour le prix, cela me semble normal de savoir en estimer le ROI et le gain net obtenu (si proche de 0 c'est déjà bien vu que cela permet de réaliser des choses qui n'auraient pas été faites autrement, si c'est négatif là il va falloir rééquilibrer :D)

      • [^] # Re: constat similaire

        Posté par  (site web personnel) . Évalué à 5 (+3/-0). Dernière modification le 08 décembre 2025 à 12:26.

        Je vais essayer ton exercice aujourd'hui, ça me paraît un challenge intéressant.

        Bon ben j'ai essayé et c'était presque même pas drôle, il a réussi du premier coup:

        > Can you please write a C program that will compile and which doesn't use any
        > curly braces? Write this program in a subidrectory in my experimental
        > directory (experimental/no_curly_braces), create the appropriate makefile
        > and validate that it does build. If it doesn't, iterate until you manage to
        > write a C program without curly braces which does compile.
        

        (ouais je lui parle en anglais)

         ✦ I will start by creating the directory and then writing the C program using digraphs to avoid curly braces.
         ✓  Shell mkdir -p experimental/no_curly_braces [current working directory /home/cpitrat] (Create the directory for the experimental project.)
        
         ✦ I will write the C program using digraphs and the corresponding BUILD file.
         ✓  WriteFile Writing to experimental/.../no_curly.c
        1 #include <stdio.h>
        2
        3 int main(int argc, char *argv[]) <%
        4   printf("Hello, world!\n");
        5   return 0;
        6 %>
         ✓  WriteFile Writing to experimental/.../Makefile
        1 all:
        2    gcc experimental/no_curly_braces/no_curly.c -o experimental/no_curly_braces/no_curly
         ✓  Shell make [current working directory /home/cpitrat/experimental/no_curly_braces/no_curly] (Build the C program using make.)
        gcc experimental/no_curly_braces/no_curly.c -o experimental/no_curly_braces/no_curly
        cc1: fatal error: experimental/no_curly_braces/no_curly.c: No such file or directory
        compilation terminated.
        make: *** [Makefile:2: all] Error 1
        
         ✦ I'll verify the code compiles with gcc manually to confirm the code itself is valid, before debugging the makefile issue.
         ✓  Shell gcc experimental/no_curly_braces/no_curly.c -o experimental/no_curly_braces/no_curly [current working directory /home/cpitrat] (Manually compile the C program with gcc to verify the code.)
        
         ✦ I will search for other makefile examples in /home/cpitrat to see if I can find a working configuration to reference.
         ✓  WriteFile Writing to experimental/.../Makefile
        1 CC=gcc
        2 CFLAGS=-std=c99 -Wall -Wextra -pedantic
        3
        4 all: main
        5
        6 main: main.c
        7     $(CC) $(CFLAGS) -o main main.c
        8
        9 clean:
        10     rm -f main    
        

        Heureusement qu'il se plante dans le Makefile, ça rend l'exercice intéressant. Et la façon dont il le corrige ("je vais chercher un exemple que je peux copier-coller dans le répertoire auquel j'ai accès") est plutôt sympa.

        EDIT: Pour le fun j'ai essayé une deuxième fois (dans une nouvelle session), et il a encore réussi. Mais chose amusante il a commencé par écrire un programme avec des accolades puis une fois que ça compilait, il a remplacé les accolades par des digraphes. Le makefile a marché du premier coup.

  • # Peut-on faire du pain grillé sans grille pain ?

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

    Est-ce que tu es sûr de demander à la bonne IA ?

    Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

  • # mauvaise prémisses

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

    trois cents pages sans la lettre e. Surgit alors la question : peut-on écrire un programme en langage C sans accolades ?

    Déjà faudrait le faire sans parenthèses, qui sur un programme normal seront généralement plus présente, ensuite il ne faut pas oublier que le i est assez présent (if, while, i, main, switch, int, printf, stdio, include…)

    Bref sur un code C raisonnable, je ne suis pas certain que les accolades soient les caractères les plus présents

    Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: mauvaise prémisses

      Posté par  (site web personnel, Mastodon) . Évalué à 3 (+1/-0). Dernière modification le 08 décembre 2025 à 18:48.

      Bref sur un code C raisonnable, je ne suis pas certain que les accolades soient les caractères les plus présents

      En tout cas, emblématiques…

      • [^] # Re: mauvaise prémisses

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

        Je prends les 59 mots clés listé en premier…

        1. Retirer les lignes vides rajoutées lors du copier-coller
          :%g/^$/d↵ → 3 fewer lines
          :%g/^\t/d↵ → 3 fewer lines
          ⎈g nous informe qu’on a 59 lignes…
        2. Retirer les annotations pour ne garder que les mots-clés
          :%s/ (.*$//↵ → 27 substitutions on 27 lines
        3. Maintenant épeler les caractères présents
          :%s/\(.\)/\1\r/g↵ → 395 substitutions on 59 lines
          ⎈g nous informe qu’on a 454 lignes, mais…
        4. …on a rajouter des lignes vides dans l’opération. Les virer
          :g/^$/d↵ → 59 fewer lines
          …autant qu’il y avait de mot-clés (donc cette étape n’est pas nécessaire si on n’épelle pas les sauts de ligne en sus)
        5. On peut maintenant répondre à la question des caractères les plus présents…
          • :w kw.txt↵ pour sortir de l’éditeur,
            puis, dans la console : sort kw.txt | uniq -c | sort -nr↵
          • :%sort↵ puis :%!uniq -c↵ → 395 lines filtered
            puis :%sort! n↵ (Vim c’est bon, mangez-en)
          • Résultat/Spoil (pour les plus de dix occurrences)
         38 e
         36 t
         29 o
         29 i
         27 l
         27 a
         26 n
         23 r
         21 s
         19 _
         18 c
         14 u
         11 f
         10 g
        

        Plutôt que juste les mots clés, il faudrait faire l’exercice avec un vrai code source pour prendre en compte aussi les symboles (accolades, parenthèses, signe d’égalité, etc.) Ces derniers ne viendront pas en tête mais seront certainement en bonne position je pense.

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

  • # Trop facile

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

    En dehors des digraphes, il y a une autre solution beaucoup plus simple, voici le code:

    Ce programme vide ne fait rien. Il a permit de mettre fin à une situation ennuyeuse pour le jury de l'IOCCC: tous les ans, ils recevaient de nombreux programmes prétendant être le plus court programme C capable d'afficher son propre code source. Ce programme vide a placé le record à 0 octets, ce qui a réglé le débat de façon définitive (au moins jusqu'à que quelqu'un invente les fichiers de taille négative).

    Voir la fiche détaillée de cette participation à l'IOCCC pour les détails.

    • [^] # Re: Trop facile

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

      Mmh … il faut quand même un compilateur particulier pour compiler smr.c :

      ~winner/1994/smr: make
      rm -f smr
      cp smr.c smr
      chmod +x smr


      d'un autre coté, il permet de compiler le plus court programme dans n'importe quel langage …

      • [^] # Re: Trop facile

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

        Intéressant, ça dépend ce qu'on appelle compiler puisque c'est tout une chaîne.

        gcc le compile en fichier objet, mais c'est le linker qui refuse un programme sans main() :

        $ gcc -c smr.c
        $ gcc smr.c
        /usr/bin/ld : /usr/lib/gcc/x86_64-linux-gnu/15/../../../x86_64-linux-gnu/Scrt1.o : dans la fonction « _start » :
        (.text+0x1b) : référence indéfinie vers « main »
        collect2: error: ld returned 1 exit status
        • [^] # Re: Trop facile

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

          On est dans un cas où GCC n’a rien préparé à lier Essaie gcc -v pour voir qu’il crée la référence par défaut, puis essaie avec -nostdlib entre autres pour voir. Enfin, ajoute du -o plutôt que d’appeler LD par la suite.

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

          • [^] # Re: Trop facile

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

            $ gcc -v smr.c
            [...]
            /usr/bin/ld : /usr/lib/gcc/x86_64-linux-gnu/15/../../../x86_64-linux-gnu/Scrt1.o : dans la fonction « _start » :
            (.text+0x1b) : référence indéfinie vers « main »
            collect2: error: ld returned 1 exit status
            $
            $ gcc -nostdlib smr.c
            /usr/bin/ld : avertissement : le symbole d'entrée _start est introuvable ; utilise par défaut 0000000000001000
            • [^] # Re: Trop facile

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

              Ah oui, les -nostdlib et -nodefaultlibs lui disent que tu t’en occupes en assembleur…
              LD génère le _start à partir du main() et pour se passer de LD il faut déjà compiler avec --no-dynamic-linker au moins. Il y a un beau billet qui décrypte le tout et que j’avais eu envie de poster une fois (mais je ne sais plus pourquoi je ne l’ai pas fait.)

              Je ne suis pas devant un poste avec les outils de compilation pour tester. As-tu essayé, comme je le suggérais, gcc -v smr.c -o smr ?

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

              • [^] # Re: Trop facile

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

                Oui, avec le -o ça se termine de la même façon qu'avec -v seul.

                • [^] # Re: Trop facile

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

                  Le collect2 du message d’erreur m’a intrigué et en grattant un peu j’atterris sur la page du manual qui nous explique que c’est bien parce que ça tente de faire les initialisations communes à C et C++ au niveau de main() en vain et que cet utilitaire s’occupe de faire appel à LD ou équivalent (ce peut même être une réinjection dans GCC lui-même il semble). La page recommande d’utiliser -lgcc avec -nostdlib, mais je n’ai pas su faire. Bref, bien des choses ont changée depuis 1994…

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

            • [^] # Re: Trop facile

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

              Je viens de voir rapidement qu’il semble faire quelque chose comme
              gcc -std=gnu90 -Wall -Wextra -O3 smr.c

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

              • [^] # Re: Trop facile

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

                Bon, testé ce matin et ça marche pas chez moi… Il faudra pouvoir le faire avec la version qui avait cour en 1994…
                Par ailleurs, le Makefile tente de faire une inclusion foireuse dans la mesure où la destination n’existe pas chez moi et que je n’ai pas réussi à retrouver le fichier inclus sur le dépôt.

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

              • [^] # Re: Trop facile

                Posté par  . Évalué à 1 (+0/-0). Dernière modification le 12 décembre 2025 à 08:19.

                Ces drapeaux sont bien déclarés dans le Makefile, mais je n'ai pas l'impression qu'ils servent à grand chose.

                Les directives utilisées pour construire le "binaire" smr sont les suivantes :

                ENTRY= smr
                PROG= ${ENTRY}
                
                ${PROG}: ${PROG}.c
                    ${RM} -f $@
                    ${CP} $< $@
                    ${CHMOD} +x $@

                Ce qui donne la sortie que je mentionnais ci-dessus, pas d'appel à ${CC}, le "compilateur" ici c'est cp

                • [^] # Re: Trop facile

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

                  Ah le filou… (bien vu !)

                  $ touch smr
                  $ chmod +x smr
                  $ ./smr && echo OK || echo KO
                  OK

                  Ça juste marche… XD

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

    • [^] # Re: Trop facile

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

      Ça rappelle l'Énergie négative en physique. On prend pas les fichiers de taille négative au sérieux mais … il y a de quoi spéculer ! Si on stocke un fichier sur un stockage à antimatière il devient un antifichier ?

      Du coup pour le code golf ça deviendrait complètement non borné comme problème ! On va devoir prendre une métrique quadratique.

  • # Question connexe : La disparition est-elle française ?

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

    Tu as testé d'appliquer les programmes du projet pédagogique sur les statistiques des lettres sur "La disparition" ? Ça serait drôle que ce soit pris pour une autre langue !

    • [^] # Re: Question connexe : La disparition est-elle française ?

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

      Là, on supposait que c'était en français, c'était semi-manuel.

      Je crois qu'un algo ne s'en sortirait pas, une langue en caractères latins sans e ça doit être rare… Il faudrait peut-être fouiller du côté des langues construites ! Zut, c'est raté pour le klingon. Voir chez Tolkien ? Sinon, en construire une…

      D'après Wikipedia, le e est à 14,7 % en français. Le lituanien est à 5,62 %.

      • [^] # Re: Question connexe : La disparition est-elle française ?

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

        Mais si ça se trouve la distribution des lettres des mots sans "e" est relativement différente de celle des ceux avec ?

        Et pour le fun, en comptant les lettres dans /usr/share/dict/french il y a quand même des variations intéressantes ! Très peu de mots avec "z" et sans "e" par exemple, évidemment pour les autres voyelles ça change aussi beaucoup, et pas de manière uniforme j'ai l'impression :

        (Évidemment c'est sous réserve que les calculs soient corrects)

        Caractère Nombre (total) Nombre dans les mots sans e
        1 0 1
        ' 181 0,05 15 0,04
        - 4573 1,25 482 1,17
        . 51 0,01 41 0,1
        a 317432 86,71 56832 138,18
        à 107 0,03 33 0,08
        â 43829 11,97 7049 17,14
        b 49235 13,45 7171 17,43
        c 116642 31,86 15544 37,79
        ç 5859 1,6 1195 2,91
        d 82862 22,64 7318 17,79
        e 381053 104,09 0
        é 247821 67,7 0
        è 25521 6,97 0
        ê 4729 1,29 0
        ë 43 0,01 0
        f 45865 12,53 7033 17,1
        g 55348 15,12 5907 14,36
        h 39347 10,75 5128 12,47
        i 325062 88,8 52227 126,98
        î 6559 1,79 1025 2,49
        ï 1993 0,54 431 1,05
        j 6749 1,84 1124 2,73
        k 1861 0,51 545 1,33
        l 138837 37,93 17632 42,87
        m 85264 23,29 9052 22,01
        n 258746 70,68 36605 89
        o 204480 55,86 38614 93,88
        ô 1831 0,5 373 0,91
        ö 3 0 0
        p 80316 21,94 10000 24,31
        q 17459 4,77 1766 4,29
        r 304383 83,15 24898 60,53
        s 348278 95,14 47416 115,28
        t 238240 65,08 30467 74,07
        u 123947 33,86 17896 43,51
        ú 29 0,01 13 0,03
        ù 3 0 3 0,01
        û 2629 0,72 433 1,05
        ü 89 0,02 27 0,07
        v 34498 9,42 3656 8,89
        w 601 0,16 178 0,43
        x 8675 2,37 815 1,98
        y 11569 3,16 1807 4,39
        z 38146 10,42 548 1,33
        Total : 3660746 411300
  • # Les bons usages

    Posté par  (site web personnel) . Évalué à 9 (+7/-0). Dernière modification le 08 décembre 2025 à 17:08.

    je dois réfléchir justement à quelques heures à enseigner à des étudiants non informaticiens sur les bons usages de l'IA

    C'est à dire, « bons usages » ? En supposant qu'ils et elles acceptent de participer à la catastrophe écologique et possiblement bientôt sociale qu'elle représente actuellement ?

    Bon courage, quelques heures pour dire « il n'y en a pas », c'est un peu long xD

    … à moins que tu utilises ces quelques heures pour rentrer dans les détails pour le démontrer…

    … :-)

    Allez, je m'enfuis en courant.

    • [^] # Re: Les bons usages

      Posté par  (site web personnel, Mastodon) . Évalué à 9 (+7/-0). Dernière modification le 08 décembre 2025 à 21:17.

      "Bon usages", c'est clairement plutôt une façon d'explorer les limites de l'outil.

      En 2024, je m'y suis mis essentiellement pour voir ce qu'ils pouvaient en faire, puisque je sais que beaucoup utilisent ChatGPT tous les jours. Et donc voir quelles évaluations il fallait revoir. En gros, exit les rapports bibliographiques rédigés hors salle.

      De mon côté, je m'interroge encore sur ce que je pourrais en faire. En enseignement, je pourrais sûrement écrire plus vite mes polycopiés, mes exercices de programmation, etc. Sauf que j'aime vraiment faire ça, donc j'y perdrais la moitié du plaisir à faire mon travail.

      Dans tous les cas, plus la bulle éclatera tôt mieux ce sera à tout point de vue. Malheureusement ça tarde, peut-être parce que les États se sont laissés eux aussi hypnotisés par les gourous de la tech. Je ne me souviens pas que c'était comme ça en 2001, les États étant alors vraiment à la traîne dans la compréhension de ce qu'impliquaient Internet et le Web. Cette fois, j'ai l'impression que la bulle est non seulement alimentée par le capital-risque mais aussi par l'argent public :-\ Bref, ça siphonne !

      Un atterrissage s'impose.

      • [^] # Re: Les bons usages

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

        J'enseigne aussi, dans le supérieur privé. Et pas pour former des informaticiens (d'ailleurs, si tu parles de C à des non informaticiens, tu vas les perdre…)

        L'IA est en train de bouleverser le monde de l'enseignement. Dans mon établissement, nous avons beaucoup de formations certifiées par Qualiopi, donc pilotées par le ministère du travail. Et depuis la rentré, des modules sur l'usage de l'IA sont apparues dans les programmes. Nous avons par exemple un bachelor en management (bac vers bac +3) qui comprends 60 heures de formation à l'IA les deux premières années. Et c'est tant mieux, les "jeunes" ne savent pas plus se servir d'un ordinateur que de l'IA (je ne vais pas rentrer dans les détail, mais je constate tous les jours ce qui est dit dans l'article Pourquoi les jeunes sont devenus si nuls en informatique). Revers de la médaille, le temps pris par l'IA a remplacé le temps passé sur la bureautique et l'utilisation de l'ordinateur, dont ils ont pourtant besoin…

        Coté formateurs, c'est mitigé. Certains continuent avec leurs cours de 15 ans presque illisibles car photocopiés 28 fois. D'autres se mettent plus ou moins timidement à l'IA pour préparer leurs cours. Je fais parti de la seconde catégorie. Créer un exercice sur les KPI d'un site web ou un bilan sur Excel, ça n'a rien de marrant. Mais il est rare que j'utilise la sortie brut d'une IA, j'y apporte toujours ma touche, et surtout une vérification drastique. Donc un peu de ChatGPT, un peu de Mistral, un peu de Copilot (l'école étant 100% Microsoft, nous avons accès à la version éducation). Et surtout Perplexity, qui à drastiquement réduit mon usage des moteurs de recherche !

        Reste les évaluations. Les rendus de travaux à la maison, c'est inutile. Ça sera souvent fait par l'IA, avec des prompts de 4 mots, dont totalement nul. Les oraux avec question du jury sont en train de revenir en force : le support sera certainement créé par IA, mais j'ai toujours un malin plaisir lorsque je suis jury de demander des explications sur ce qui me parait trop bien écrit dans une présentation. Et les épreuves sur table avec papier stylo calculatrice ne sont pas prêtes de disparaitre.

  • # Un programme sans accolades ?

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

    FORTRAN SAIT LE FAIRE DEPUIS SOIXANTE ANS

    • [^] # Re: Un programme sans accolades ?

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

      J'ai trouvé 37 accolades ouvrantes dans la norme Fortran 2023, dont les trois-quarts dans des codes en C (concernant l'interopérabilité C/Fortran) et le reste dans des notations de la norme.

      • [^] # Re: Un programme sans accolades ?

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

        DECLARE COMMENT REPLY2THIS
        REPLY2THIS IS : PEUX-TU NOUS FAIRE LA MEME POUR COBOL ?
        END SECTION

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

        • [^] # Re: Un programme sans accolades ?

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

          • [^] # Re: Un programme sans accolades ?

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

            Du coup, ça tourne sur un Amstrad CPC ?

            ;-)

            • [^] # Re: Un programme sans accolades ?

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

              ça tourne sur un Amstrad CPC ?

              Je pense que oui, mais je n'ai pas encore essayé. Mais c'est une bonne question à poser dans comp.os.cpm, un recoin bien sympa du Usenet…

              /me va installer z80pack juste après la sieste…

              • [^] # Re: Un programme sans accolades ?

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

                Énorme, ça me donne envie de faire chanter le lecteur cassette …en espérant que l’environnement de développement ne sera pas aussi frustre que sur les zos.

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

                • [^] # Re: Un programme sans accolades ?

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

                  Pour les applications CP/M, a priori c'est forcément sur disquettes, le lecteur de cassettes n'est pas pris en charge.

                  Désolé de casser le fun avec cette mauvaise nouvelle.

                  Pour l'Amstrac CPG 464 il faudra donc ajouter un DDI-1.

                  Et je ne sais pas pour Cobol, mais pour d'autres langages comme Modula 2, les compilateurs recommndent même dwutiliser une extension mémoire avec un ramdisk ou au roins un deuxième lecteur de disquettes (une disquette avec les outils de compilation, et l'autre avec le source à compiler). Ceci sans compter que le CPM+ disponible uniquement sur les machines avec 128K de mémoire, permettrait d'avoir presque tout l'espace mémoire du z80 (63Ko) disponibles pour le compilateur. Avec CPM 2.2 il faudra que tout rentre dans environ 40Ko de RAM.

          • [^] # Re: Un programme sans accolades ?

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

            le tarif des normes est un véritable scandale.

            Certaines d'entre elles sont obligatoires (tel ou tel produit doit répondre aux exigences de la norme XXXX, et c'est imposé par la Loi. Genre "résistance au feu" des matériaux de construction).
            Sinon d'une manière générale, l'application de normes est volontaire. Par ex: les ISO 9000.

            Pour un particulier un peu curieux, c'est coûteux de vouloir connaitre les tenants et aboutissants du truc.
            Mais pour les pros en exercice c'est un véritable budget: car dans l'immense majorité des cas (j'imagine, au vu de ma pratique), une norme n'a pas une existence propre et autonome en soit mais s’intègre dans un corpus bien plus vaste. Ainsi, il n'est pas rare de devoir consulter une dizaine de normes "connexes" pour pouvoir appliquer correctement les prescriptions de la norme XXXX.
            Pour eux, à priori, hors de question d'utiliser des ressources autres que celles, officielles, publiées par l'AFNOR (exit le blog de Dédé le maçon ou le téléchargement d'une norme via un canal pas tout à fait légal).

            "Si tous les cons volaient, il ferait nuit" F. Dard

  • # Essai avec Euria

    Posté par  (site web personnel, Mastodon) . Évalué à 4 (+2/-0). Dernière modification le 09 décembre 2025 à 16:36.

    C’est une réponse cinglante aux modèles opaques et énergivores de la Silicon Valley et des répliques chinoises. Ce 9 décembre, l’hébergeur suisse Infomaniak a dévoilé Euria, son propre assistant d’intelligence artificielle. Accessible gratuitement sur mobile et le Web, Euria ne se contente pas de rivaliser avec ChatGPT sur le plan des fonctionnalités : elle introduit un modèle vertueux (inédit) où chaque requête contribue à chauffer des foyers à Genève, tout en garantissant qu’aucune donnée personnelle ne sert à l’entraînement des modèles. Ah oui, c’est open source !

    https://goodtech.info/euria-ia-gratuite-suisse-alternative-chatgpt-chauffage/

    Je pose ma question fétiche à Euria :

    […]
    ✅ Conclusion :
    On ne peut pas écrire un programme C valide sans aucune accolade — au moins celles de la fonction main() sont indispensables.
    Exemple minimal :
    #include
    int main() {
    printf("Hello\n");
    return 0;
    }
    Sans les accolades autour du corps de main(), le code est invalide.

    Réponse acceptable. Fier de mon nouveau savoir, je demande aussi : « Et avec des digraphes ? ».

    Oui, on peut écrire un programme en C sans utiliser explicitement les accolades {} — en utilisant les digraphes <% et %> à la place.

    Sauf que le code fourni avec digraphes ne compile pas car les parenthèses de la fonction main() ont été oubliées. Allez, 12/20.

    • [^] # Re: Essai avec Euria

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

      C'est curieux d'oublier les parenthèses obligatoires de la fonction main() si l'outil génère du texte probable.

      • [^] # Re: Essai avec Euria

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

        pas forcément si l'outil est spécialisé langage de programmation globalement et pas spécifiquement le C, le fait de modifier un détail comme l'absence des accolades peut suffire à le faire basculer sur d'autre type de langages où les parenthèses ne sont pas de mise :)

        Il ne faut pas décorner les boeufs avant d'avoir semé le vent

    • [^] # Re: Essai avec Euria

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

      C'est un bon exemple de « comment trouver du foin dans une botte de foin à l'aide des llm ».

      Adhérer à l'April, ça vous tente ?

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.