Journal Brèves de Pythran

Posté par (page perso) . Licence CC by-sa
33
22
jan.
2014

Commençons très fort : « comment allez vous, yau de poële ?»

Aux détours de mes pérégrination dans le monde de l'open source à travers ce magnifique projet de traducteur Python Scientifique vers C++ que certains d'entre vous suivent depuis quelque temps déjà, le (bien connu ?) Pythran, j'apprends plein de truc. Alors hop on partage !

Au programme (ahah) :

  • de la conception d'un logo
  • des temps de compilation en C++
  • de la gloire

Pleins de projets ont un logo. Un logo c'est joli, classouille, ça fait bien sur les présentations et c'est… pas un truc de programmeur. La preuve, c'est que je m'y suis essayé, et ça avait donné ça. Par chance, un super ex-étudiant (ex-super étudiant me semblait peu clair) a des relations, et les adorateurs de Pythran (comptez bien 5 personnes) ont pu choisir parmi plusieurs logos ! Une fois le choix fait, un petit coup de GIMP permet de passer en mode deux couleurs pour avoir un look moins crayonné, et facilite la vectorization de l'image. Hop, un petit coup d'Inkscape et on finit avec un beau logo votre navigateur affiche-t-il le SVG ? sinon comme ça peut-être ?

Temps de compilation

Pythran simule le polymorphisme dynamique de Python en utilisant le polymorphisme statique fournit par les template de C++ (et vive C++11 et les variadics template d'ailleurs). Un gros inconvénient est que la bibliothèque utilisée par Pythran pour réimplémenter (une toute petite partie de) la bibliothèque standard Python est du coup fournit sous forme d'un fichier d'en-tête. Oui, un fichier d'en-tête, naïf que j'étais :-) Quel désastre, il fallait près d'une minute pour compiler un « hello world » car on tirait toutes les dépendances (oui, même nt2) inutiles.

Comme Pythran a une connaissance complète du code généré, un gros chantier a été entrepris : éclater le bousin en pleins de fichiers d'en-tête et n'inclure que le strict minimum. C'est chose faite et on est retombé sur des temps de compilation raisonnables, de l'ordre de quelques secondes, plus pour les quelques gros cas. Le temps de validation (plus de 1000 cas test quand même) est passé de plus de deux heures (invivable) à moins de trente minutes (raisonnable).

NT2 et toutes les libs Boost sont construites comme ça, ça aurait du me mettre la puce à l'oreille…

Petit désagrément, tout l'historique du fichier est perdu, car l'arborescence a complètement changée. Mais je ne voyais pas de solution au problème.

la gloire

Après presque deux ans de dev, recevoir un mail d'un américain qui utilise le projet, puis d'un français, forcément linuxfrien, c'est… très troublant ! On a envie de répondre à toutes les questions, corriger tout les problèmes relevés, bref c'est chouette.

Et quel surprise de présenter son compilo à l'autre bout de la planète et de croiser des français qui t'abordent en disant « je lis linuxfr, j'aime bien ce que tu fais ».

Ça, c'est du carburant propre pour la machine à coder !

  • # Navigateur et SVG

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

    Encore faut-il que le serveur web dise que c'est un svg et non du texte.

  • # pré-compilation ?

    Posté par . Évalué à 2.

    Je ne m’y suis remis que récemment, alors je vais peut-être dire une bêtise (j’ai pas bien compris à quoi servait le extern template du C++11), toutefois mon astuce pourrait améliorer les temps de compilation je suppose.

    Ce que je fais, c’est créer un .h, par exemple (bidon) :

    template <class T>
    void f (T);

    et un .cpp :

    template <class T>
    void f (T x)
    {
      std::cout << x << std::endl;
    }
    
    template void f<int> (int);
    template void f<string> (string);
    // etc.

    Ainsi je compile le nécessaire dans mon .cpp, une fois et un seule, tandis que l’inclusion de mon .h ne me coûte rien en terme de temps de compilation.

    Le seul inconvénient, c’est qu’il faut prévoir tous les cas possibles dans le .cpp.

    • [^] # Re: pré-compilation ?

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

      Le seul inconvénient, c’est qu’il faut prévoir tous les cas possibles dans le .cpp

      Et oui. Malheureusement, la plupart des algos sont génériques, à la STL et il existe une infinité de cas possibles…

      Ceci dit ce n'est pas le cas de tous les algos, et on pourrait quand même les pré-instancier pour les types les plus connus.

      Ensuite (et indépendamment des problèmes de temps de compilation) c'est assez confortable de ne livrer que des fichiers d'en-tête, comme ça on a un paquet composé uniquement de .py et de .hpp qui est donc relativement facile à distribuer. Bref, beurre, argent du beurre, crémière…

      Pour le mot clef export, je croyais qu'il avait été supprimé du standard car supporté par un unique compilo avant 2011, mais enfin il est juste passé en obsolescence (je ne cite pas le standard).

  • # ben... je préfère ton logo

    Posté par . Évalué à 10.

    en toute honnêteté. ..

    "Gentoo" is an ancient african word, meaning "Read the F*ckin' Manual". "Gentoo" also means "I am what I am because you all are freaky n3rdz"

    • [^] # Re: ben... je préfère ton logo

      Posté par . Évalué à 6.

      pareil

      • [^] # Re: ben... je préfère ton logo

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

        Et en ascii art ?

                                         ##
                                         ##
                                         ###
                            ##########   ###
                          #############   ###
                      ##################  ####
                      ################### # ###
                    #########   ########### ####
                 ############## ##########   ###
            ############# ## #############    ###
        ##############     ##  ###########    ###
                      #######    ######  ##  ####
                 #############    ####    #  ###
              ################    ####    ######
            ##################     ####   #####
           ##############     ###   ####   ####     ############
         ############            ### ####  ###########################
         ##  #######                #############                ########
        ###########                ##############                     ######
        ############           #########################                 ####
        ###  #########     ################################               ####
        ######################################################              ###
         ####   ################     ##################### ######           ####
          ###   ###  #####    ##    ####### #############   ##   ###        ####     # #
           #######    ####    ########               #####         #####    ####     ##
             ######  ###### #######                     ######            #####     ##
                #############                              #########################
        
    • [^] # Re: ben... je préfère ton logo

      Posté par . Évalué à 4. Dernière modification le 23/01/14 à 12:15.

      Pas convaincu non plus, l'ancien était rigolo.

      Tu aurais pu faire une demande ici comme pour i3 https://linuxfr.org/users/grom/journaux/i3-recherche-un-contributeur-pour-son-logo

  • # Séminaire calcul Python et… pythran

    Posté par (page perso) . Évalué à 4. Dernière modification le 23/01/14 à 02:56.

    https://www.lri.fr/seminaire.php?sem=555

    D'ailleurs c'est la même personne que tu as rencontré à l'autre bout de la planète.

    Python 3 - Apprendre à programmer en Python avec PyZo et Jupyter Notebook → https://www.dunod.com/sciences-techniques/python-3

  • # Commentaire supprimé

    Posté par . Évalué à 2.

    Ce commentaire a été supprimé par l'équipe de modération.

  • # vous yau de poële

    Posté par . Évalué à -1.

    Tu tu… si on sais pas ce qu'est un tuyau, peut-être le sait-on du vousyau.

    Allez, c'est peut-être fort intéressant, mais je vais me coucher.

Suivre le flux des commentaires

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