Journal fusebox : transformations composées sur des systèmes de fichiers FUSE

Posté par  (site web personnel) . Licence CC By‑SA.
15
10
sept.
2025

Chers tous, voici un petit projet qui me faisait envie depuis longtemps et que j'ai réalisé récemment.

Il s'agit d'utiliser FUSE pour enchaîner des transformations simples, et surtout spécifiées de façon concise sans errno ni masques bit-à-bit, sur une arborescence de fichiers existante : filtrer les fichiers affichés, changer le nom ou le contenu des fichiers, etc.

Le projet prend la forme d'une bibliothèque Java, appelable depuis des scripts JBang par exemple.

Q : Keuwah ?! Mais pourquoi un langage aussi peu cool ?
R : Parce que c'était un des langages que je connaissais qui avait des bindings FUSE. Parce que le typage fort est très appréciable pour comprendre ce qu'on fait, par rapport à Python. Parce que j'aurais pu coder en Scala ou Kotlin mais que, faisant du Java au boulot, je n'avais pas envie de me mettre à confondre les syntaxes.

Exemple : Voici un script qui monte une vue d'une arborescence de fichiers dans laquelle les fichiers Markdown sont remplacés par leur traduction en HTML :

    FuseboxFS fs = LocalFS.at("/dossier/source")
            // On va transformer uniquement les fichiers en .md
            .mapFiles(glob("**.md"), file ->  
                    // (Le nouveau contenu est en lecture seule)
                    file.mapContent(content -> content.mapAsString(md ->
                            mdToHtml(file.name(), md)
                    ))
            )
            // On a maintenant des fichiers .md qui contiennent du HTML.
            // Tout renommage doit être défini dans les 2 sens
            .mapNames(glob("**.md"), glob("**.html"),
                    name -> name.substring(0, name.length() - 3) + ".html",
                    name -> name.substring(0, name.length() - 5) + ".md"
            );
    Fusebox.mount("markdown_to_html", fs, "/point/de/montage");

Le script complet fait 50 lignes.

⚠️ Attention : ceci est expérimental et très peu testé. Toute utilisation est à vos risques et périls.

Les 2 sens de lecture

Mon but était de pouvoir définir des transformation en partant d'une arborescence de fichiers existante, comme sur des Stream ou autre collection dans tout langage un tant soit peu fonctionnel.

Cependant, je voulais un fonctionnement dynamique, potentiellement en lecture-écriture, et non un chargement de tous les fichiers sources pour les transformer.

Or, le résultat doit être un système de fichiers qui reçoit des chemins relatifs au point de montage, et détermine le contenu des fichiers correspondants par exemple.

Une transformation sur les noms de fichiers (par exemple) doit donc être définie dans les 2 sens :
- le sens origine → point de montage, pour lister les entrées d'un dossier, par exemple ;
- le sens point de montage → origine, pour retrouver le contenu des fichiers en partant du point de montage.

Implémentation

Dans sa version actuelle, fusebox utilise Apache Commons VFS comme backend et jfuse pour monter le système de fichier transformé.

Les interfaces de la bibliothèque sont inspirées de celles de VFS (FuseboxFS, FuseboxFile, FuseboxContent pour FileSystem, FileObject, FileContent chez VFS), mais simplifiées et adaptées au besoin.

L'implémentation actuelle est partielle, il manque notamment l'écriture et le déplacement de fichiers.

J'ai laissé visible dans le dépôt l'implémentation précédente, à base de java.nio, qui est beaucoup plus complète, quoiqu'un peu moins élégante.

Conclusion

Est-ce que tout ceci sert réellement à quelque chose ? Ça reste à voir ! Si sous Unix, « tout est fichier », alors, le ciel Long.MAX_VALUE est la limite ?

Dans tous les cas, je serais ravi de lire vos commentaires et, sait-on jamais, vos retours d'utilisation !

  • # Binaire natif ?

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

    Intéressant… je ne pensais pas que c’était aussi simple de se servir de fuse avec Java.

    Est-ce que tu as essayé de le compiler et de le faire marcher avec native-image ?

  • # Pouvoir sans limite : le script

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

    C'est vraiment intéressant. Par contre, si on veut pouvoir profiter de cette flexibilité, il faut que ça soit rapidement itérable, et là, c'est forcément du script.
    Je crois que c'est vaguement possiblement avec Java aujourd'hui (coucou jshell), mais il faudrait un truc de script pour vraiment en profiter. Après, c'est pas la panacée :

    • Python. Probablement ce qu'il y a de mieux, mais pas sans défaut
    • JS. Ahah, même si avec bun, ça peut le faire
    • Perl, bienvenue dans les années 2000
    • Shell, bienvenue dans les années 1970
    • lua, l'écosystème est limité, mais le langage se prête à se genre de chose
    • [^] # Re: Pouvoir sans limite : le script

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

      Oui, si tu suis les liens, je parle bien de scripts JBang ! Et je pense que la lib pourrait aussi être utilisée dans des scripts Kotlin ou Scala, mais je n'ai pas essayé.

    • [^] # Re: Pouvoir sans limite : le script

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

      Perl a aujourd'hui le mot clef class. Le langage évolue. La période Perl6 / Raku est passée.

      Exemple de ce que sait faire Perl, on peut déclarer des variables locales au bloc et non à la routine. Cela peut donner du code bien plus sur dans le cas de boucle par exemple (les variables peuvent alors être locale à la boucle).

      Bref, cela reste un langage très intéressant, même en 2025. J'utilise Python si nécessaire et Perl si besoin.

      Il y a un mois, je me suis amusé avec ChatGPT à lui dire de me faire un script en Perl. Il a voulu à plusieurs reprises me le (re)faire en Python a mesure que le projet avançait en me disant que Python, c'était bien mieux. J'ai finit par lui demander ce qu'il y avait de MIEUX dans le moteur Python. Sa réponse a été qu'au final, les deux langages même s'ils n'ont pas la même syntaxe, c'est globalement bonnet blanc et blanc bonnet ! Fin de ses tentatives voulant me forcer sur un langage de script ;-)

      • [^] # Re: Pouvoir sans limite : le script

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

        Est-ce que ChatGPT ne fait pas le même genre de réponse qu'un programmeur : ce qu'il y a de mieux (pour lui) en matière de langage c'est, dans une bonne mesure, celui qu'il maîtrise le mieux ? Sachant que son expertise provient, non de logique, mais de la masse d'information disponible, Python serait nécessairement supérieur à nombre d'autres langages à cet égard.

        « IRAFURORBREVISESTANIMUMREGEQUINISIPARETIMPERAT » — Odes — Horace

        • [^] # Re: Pouvoir sans limite : le script

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

          Non, je ne pense pas que cela provienne de son expertise. À mon humble avis, cela provient des textes écrit ou là un peu partout qui disent que Python est super et tout et tout. Il répète cela comme un automate.

          Pour moi la preuve est de lui avoir demandé d'expliciter clairement les choses et qu'il s'est retrouvé sec à me dire que finalement, c'était bien pareil !

      • [^] # Re: Pouvoir sans limite : le script

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

        Bonjour,

        Je connais perl et python dans des contextes professionnels.
        je ne pratique plus le langage perl depuis quelques années
        mais si cela peut vous éclairer voici mon humble avis :

        la grosse différence entre les 2 langages concernent la lisibilité
        qui est excellente en python et parfois difficile en perl
        Surtout si on ne pratique pas perl tout les jours

        Reprendre un script python quelques mois après sa mise en prod se fait rapidement
        c'est plus difficile avec le langage perl.

        je devais effectuer des modifications sur un script perl d'environ 3000 lignes et en gros il me fallait 3 jours pour effectuer une modification
        - 1 journée pour se remettre dans le script
        - 1 journée pour effectuer la modif / test etc …
        - 1 journée pour la mise en exploitation

        Par contre ce script a tourné pendant 15 ans, a été migré plusieurs fois de machines et de l'OS AIX vers Linux avec une utilisation quotidienne d'une douzaine d'utilisateurs.

        La lisibilité est le seul point faible, à ma connaissance, du langage Perl dans sa version 5 pour être précis.

        Sinon pour le reste rien à redire, et si je me souviens bien il y a dans perl des méthodes pour découper des textes qui sont d'une simplicité déconcertante
        avec l'utilisation des opérateurs ou modifieurs .. et …
        du style
        if /debut/ .. /fin/ { }

        Si mes souvenirs sont bons. Bien sur on peut faire la même chose en python mais c'est pas pareil ce qui est dommage

        • [^] # Re: Pouvoir sans limite : le script

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

          Il y a des choses particulièrement bien en Perl qu'il n'y a pas d'aussi pratique en Python. Et inversement bien sur !

          Déclaration d'une variable dans une boucle / bloc. La variable est ainsi initialisée à chaque pas. Impossible de récupérer la valeur de l'itération précédente en programmant ainsi. Cela évite bien des erreurs.

          my $var

          Déclaration d'un label pour chaque boucle.

          next LABEL
          last LABEL # dans une boucle

          À mettre en début de traitement pour virer les cas particulier et indenter le moins possible le code.

          next INNER_LOOP if $var !~ m/^yes$/i;
          

          Personnellement, la gestion des boucles est un point important du fait qu'on les utilise souvent beaucoup en programmation déclarative. Les labels en Perl permettent de gérer clairement les boucles imbriquées.

          Après, il est toujours possible de faire autrement, mais ce n'est pas toujours aussi compréhensible.

          • [^] # Re: Pouvoir sans limite : le script

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

            Déclaration d'une variable dans une boucle / bloc. La variable est ainsi initialisée à chaque pas. Impossible de récupérer la valeur de l'itération précédente en programmant ainsi. Cela évite bien des erreurs.

            Personnellement j'ai vu passer plusieurs fois cet argument ces dernières semaines mais il peine à me convaincre. Je serais curieux de détails car je ne lis pas le Perl.

            Par exemple en python on fera

            for x in ensemble_des_valeurs:
                stroumph(x)

            Dans ce cas la portée de x est par construction limitée à la boucle. Non seulement la variable est ainsi initialisée à chaque pas, mais je vois mal comment on peut récupérer une valeur de l'itération précédente.

            Quant à une portée de variable limité à un bloc qui ne soit pas une boucle ou une fonction, je peine à imaginer un cas où c'est d'un usage convainquant ; je suis preneur d'un exemple.

            la gestion des boucles est un point important du fait qu'on les utilise souvent beaucoup en programmation déclarative.

            Ou pas. :)

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

            • [^] # Re: Pouvoir sans limite : le script

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

              Quant à une portée de variable limité à un bloc qui ne soit pas une boucle ou une fonction, je peine à imaginer un cas où c'est d'un usage convainquant ; je suis preneur d'un exemple.

              with open("/etc/hosts") as f:
                print(f.readlines())

              C'est assez utile, les context managers en Python, et c'est justement fait pour ça :)

            • [^] # Re: Pouvoir sans limite : le script

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

              Je n'ai plus en tête des bouts de code ou je me suis fait piéger. Mais des bouts de code avec variables locales à la boucle, c'est hyper classique. Exemple :

              INIT_EACH_SWITCH:
              for my $sw (@SWITCH_LIST) {
                my ($session, $error) = Net::SNMP->session($sw);
                print "$error\n" if $error;
                ...
              

              Les variables $session et $error sont locales à la boucle et ne sont pas définies avant. Il n'y a aucun risque que leurs valeurs proviennent du passage précédent.

              Je me souvient que dans certains cas, il met arrivé d'initialiser la valeur d'une variable, disons $toto dans un test if () {}. Si le test n'est pas bon, alors on peut alors avoir cette variable $toto avec la valeur de la boucle précédente, alors qu'avec une déclaration dans la boucle, $toto vaut systématiquement 0.

              En Python, j'ai aussi eu ce genre d'erreur. En début de boucle, il faut systématiquement écrire toto=0. En cas d'oubli, le programme fonctionne cependant et parfois sors des valeurs aberrantes. Il n'est pas toujours évident de détecter cet oubli. Je trouve donc beaucoup plus parlant le my $toto; de Perl d'autant plus que s'il n'est pas mis, Perl gueule et refuse d’exécuter le script (avec use strict;).

              Je suis loin d'être parfait et je code (malheureusement) avec régulièrement des erreurs… Si le langage m'évite des erreurs sur les boucles, tant mieux !

    • [^] # Re: Pouvoir sans limite : le script

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

      Perl, bienvenue dans les années 2000

      C'est quoi cette manie de vouloir absolument dénigrer ce langage, il a certes le système d'adressage de variable $/%/@ qui est étrange voir rebutant, mais il permet

      • d'éviter les mauvaise frappe (use strict)
      • garder une compatibilité ascendante avec les différentes versions
      • d'utiliser simplement les regEx
      • avoir une modélisation objet,

      surtout pour pousser python :

      Probablement ce qu'il y a de mieux

      alors que ce langages à plusieurs tares majeurs

      • instabilité de l'interpréteur (un code de 2020 a de fort risque de ne pas tourner sur un python de 2025); le pire c'est que ça ne se voit pas forcément au démarrage, mais lorsqu'on va passer dans un coin précis du code.
      • pas de protection contre les faute de frappe
      • la délimitation des blocs par l'indentation : avoir présenté cela comme une fonctionnalité m'a toujours abasourdi; n'importe quel éditeur de texte dédié à du code peut refaire ton indentation en fonction de tes préférences.

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

      • [^] # Re: Pouvoir sans limite : le script

        Posté par  (site web personnel) . Évalué à 7 (+6/-0). Dernière modification le 12 septembre 2025 à 20:54.

        J'ai fait du Perl dans une expérience professionnelle passée et j'avais constaté que c'était un langage convenable pour faire des choses.

        Cependant, si l'on peut troller entre personnes consentantes uniquement…

        Je viens, pour me faire prouver à moi-même les qualités du langage, de m'essayer à la lecture de la documentation officielle sur les fonctions sous-routines, et je n'ai plus de doute :
        - On voit dès les premiers paragraphes le respect de Perl pour son ascendance, la façon présentée comme normale d'accéder aux arguments d'une sous-routine étant toujours un décalage d'index de tableau.
        - 200 lignes plus tard, on découvre cependant une syntaxe beaucoup plus quelconque et populaire dans les langages sans goût dits "de haut niveau", de la forme f ($x, $y).
        - J'admets avec humilité que, face à la richesse du document, je n'ai pas encore déterminé avec certitude s'il y avait des paramètres nommés.
        - En revanche, j'ai découvert des fonctionnalités qui m'avaient toujours manqué, telles que la possibilité d'autoriser une sous-routine à être appelée avec un nombre obligatoirement pair de paramètres additionnels qui ne seront jamais lus. (On peut aussi, bien sûr, ne pas imposer la parité du nombre de paramètres additionnels qui ne seront jamais lus.)

        Si l'on ajoute les fonctionnalités notables mentionnées ici telles que les variables limitées à un bloc et la possibilité d'obliger à les déclarer, je suis forcé de reconnaître que la rigueur mêlée de souplesse de Perl me le rendra incontournable à chaque fois que je lancerai un IDE sur mon écran couleur.

        🙃

      • [^] # Re: Pouvoir sans limite : le script

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

        Cela dit, il faut distinguer les qualités "objectives" (avec de gros guillemets) d'un outil et le fait de le choisir parce qu'on le connait, parce qu'on en a envie, ou pour toute autre raison.

        D'un côté, je considère que la simplicité de Python le rend nettement supérieur à tout autre langage de script connu, en dehors de cas d'usage spécifiques.

        D'un autre côté, j'ai réalisé il y a 2 ans un projet de 3000 lignes de code avec tests auto tout en Zsh, trouvant à cette occasion pas moins de 4 bugs dans le langage…

      • [^] # Re: Pouvoir sans limite : le script

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

        la délimitation des blocs par l'indentation : avoir présenté cela comme une fonctionnalité m'a toujours abasourdi; n'importe quel éditeur de texte dédié à du code peut refaire ton indentation en fonction de tes préférences.

        L'indentation as code est ce qui rebute le plus dans python, ce que je peu comprendre.

        Pour certain dont je fais partie, cela impose une lisibilité et structure le code, alors que pour d'autres c'est rédhibitoire.

        Heureusement il ya suffisamment de langage pour trouver celui qu'il faut …

        • [^] # Re: Pouvoir sans limite : le script

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

          Pour certain dont je fais partie, cela impose une lisibilité et structure le code, alors que pour d'autres c'est rédhibitoire.

          Checkstyle avec pre-commit hook fait le même job;
          sinon dans le meilleur éditeur de texte du monde
          ctrl - debut
          ctrl - espace
          ctrl - end
          ctrl - alt-\

          et paf t'as ton fichier indenté correctement selon tes préférences.

          tous les éditeurs de code de l'époque où le python a été crée étaient capable de le faire.

          Heureusement il ya suffisamment de langage pour trouver celui qu'il faut …

          Le soucis c'est justement y'a déjà pleins de langages lua, js, perl, bash, zsh, csh tcsh, lisp, perl, zig, tcl, awk, sed, jsh…

          python prends une place très importantes, et il est conseillé a pleins de gens, un nouveau aura du mal à se faire de la place.

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

          • [^] # Re: Pouvoir sans limite : le script

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

            python prends une place très importantes, et il est conseillé a pleins de gens, un nouveau aura du mal à se faire de la place.

            Oui il faut des étendards pour les nouveaux arrivants, et python remplit bien ce rôle : open source, facile d'utilisation, généraliste, large communauté etc … même M$ est obligé de s'y mettre :)

            Par contre dire que python résoudra tout les problèmes c'est faux

            Mais je trouve aussi intéressante l'idée d'avoir un langage généraliste qui couvre beaucoup de cas ou du moins les plus basics et les plus courants

          • [^] # Re: Pouvoir sans limite : le script

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

            tous les éditeurs de code de l'époque où le python a été crée étaient capable de le faire.

            Hum, pas sur qu'en 1989, tous les éditeurs étaient capable de cela.

            Sinon, pour le calcul numérique (non HPC), Python mélange aujourd'hui deux types d'objet qui ne fonctionnent pas pareil : les intrinsèques et les numpy. Cela oblige a du bricolage qui ne sera pas facile à corriger.

            Julia pourrait prendre sa place dans le calcul, on verra. Je pensais qu'il aurait déjà pris plus de place en 2025. Alors ce sera peut-être un autre.

            • [^] # Re: Pouvoir sans limite : le script

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

              Hum, pas sur qu'en 1989, tous les éditeurs étaient capable de cela.

              https://en.wikipedia.org/wiki/Python_(programming_language)

              première version 1991, les trolls vi/emacs de 1985.

              et surtout la version 1.0 date 1994.

              Depuis ils ont sorti 2 versions majeurs, avec au moins 1 avec de gros breaking changes (tu ne fais pas tourner du python2 avec python3), je ne peux pas parler pour le changement 1->2. Bref les 'contraintes' de jeunesse n'ont plus lieux d'être.

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

              • [^] # Re: Pouvoir sans limite : le script

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

                En général, ce genre de choix lié au formatage est fait dès le début, c'est pour cela que je suis remonté à 1989.

                • [^] # Re: Pouvoir sans limite : le script

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

                  En général, ce genre de choix lié au formatage est fait dès le début, c'est pour cela que je suis remonté à 1989.

                  Oui et quand on se rends compte qu'on a un truc obsolète on peut aussi décider de le virer, les occasions ne manquent pas 1.0, 2.0, 3.0

                  d'ailleurs j'ai l'impression qu'on peut toujours mixer tabulation et espace ;)

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

                  • [^] # Re: Pouvoir sans limite : le script

                    Posté par  (site web personnel) . Évalué à 2 (+0/-0). Dernière modification le 25 septembre 2025 à 09:16.

                    Bonjour

                    d'ailleurs j'ai l'impression qu'on peut toujours mixer tabulation et espace ;)

                    Si tu mixes tab et espace tu aura droit à cette erreur :

                    TabError: inconsistent use of tabs and spaces in indentation

                    C'est sur le PEP8 qui date de 2001

                    • [^] # Re: Pouvoir sans limite : le script

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

                      TabError: inconsistent use of tabs and spaces in indentation

                      Je viens de tester sur un fichier, avec du python 3.10

                      Je peux avoir un bloc if indenté avec des espaces
                      un autre bloc indenté avec des tabulation

                      et je peux même mixer une indentation avec 1 tab et 1 espaces.

                      Donc non ils ne s'en sont pas débarrassé,

                      if(1==1):
                       print("1 espace 0 tabulation")
                       if(2==2):
                          print("1 espace /1 tabulation")

                      passe sans problème

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

                      • [^] # Re: Pouvoir sans limite : le script

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

                        Tu fais ça avec quel éditeur ?

                        car beaucoup corrige automatiquement

                        • [^] # Re: Pouvoir sans limite : le script

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

                          C'est quand même fou qu'avec un exemple il faille quand même se justifier encore ça prends 2 minutes à tester dans ton environnement

                          11:44:03 kerbi ~/tmp 
                          [540] ;) $ cat plop.pt 
                          #!/usr/bin/python3
                          
                          
                          print("plop")
                          if( 1==1 ):
                           print("oookk")
                           if( 2==2):
                                  print("oookk")
                           print("plop")
                          
                          11:46:03 kerbi ~/tmp 
                          [541] ;) $ ./plop.pt 
                          plop
                          oookk
                          oookk
                          plop
                          11:46:09 kerbi ~/tmp  
                          [542] ;) $ od -a plop.pt 
                          0000000   #   !   /   u   s   r   /   b   i   n   /   p   y   t   h   o
                          0000020   n   3  nl  nl  nl   p   r   i   n   t   (   "   p   l   o   p
                          0000040   "   )  nl   i   f   (  sp   1   =   =   1  sp   )   :  nl  sp
                          0000060   p   r   i   n   t   (   "   o   o   o   k   k   "   )  nl  sp
                          0000100   i   f   (  sp   2   =   =   2   )   :  nl  sp  ht   p   r   i
                          0000120   n   t   (   "   o   o   o   k   k   "   )  nl  sp   p   r   i
                          0000140   n   t   (   "   p   l   o   p   "   )  nl
                          0000153
                          
                          

                          où tu vois bien l’enchaînement de nl sp ht (new line, space, horizontal tab)

                          Alors oui pour mettre la tabulation c'est pas simple, même kate remplace, mais le sed et le ctrl-v le font très bien.

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

                          • [^] # Re: Pouvoir sans limite : le script

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

                            En fait je code en python avec vi sur différente machines et j'ai la flemme de paramétrer vim pour obtenir un code python propre avec que des espace ou que des tabs
                            donc je termine mes sessions d'édition avec un

                            :%s/^I/ /g

                            pour transformer chaque TAB en 4 espaces
                            et si j'oublie j'ai le message d'erreur, c'est pour cela que je comprends pas pourquoi tu n'as pas la même erreur

                            ma version de python une 3.11 ou 3.12 sur debian 12

                            • [^] # Re: Pouvoir sans limite : le script

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

                              je l'ai fait sur du python 3.10.12

                              essayes avec mon code, de ce que je comprends t'as toujours pas essayé et tu te bases sur ton utilisation, l'analyse est faite par blocs, donc si une ligne tu as n espace et la suivante une tabulation ça va râler; d'ailleurs en fonction du nombre d'espaces on a pas forcément la même exception :)

                              ps : passe à emacs c'est tellement mieux :P

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

                              • [^] # Re: Pouvoir sans limite : le script

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

                                OK j'essaye

                                ps : passe à emacs c'est tellement mieux :P

                                Je croyais que le débat était terminé depuis longtemps et que c'est vi qui avait gagné :)

                              • [^] # Re: Pouvoir sans limite : le script

                                Posté par  (site web personnel) . Évalué à 2 (+0/-0). Dernière modification le 25 septembre 2025 à 16:18.

                                OK j'ai essayé et tu as raison

                                une ligne avec 2 tabs et une ligne avec n espaces => ça passe
                                Le tout est de ne pas mélanger TAB et espace sur la même ligne

                                C'est vrai que je transforme les TAB en 4 espaces …

                                ps : passe à emacs c'est tellement mieux :P

                                Je croyais que le débat était terminé depuis longtemps et que c'est vi qui avait gagné :)

  • # Python a un typage fort

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

    Parce que le typage fort est très appréciable pour comprendre ce qu'on fait, par rapport à Python.

    Python a un typage fort. Par contre il n'est pas statique mais dynamique. Les deux notions n'ont rien a voir.

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.