• # Keep ROOT out-of-your life

    Posté par . En réponse à la dépêche Sortie de ROOT 6.00/00. Évalué à 7.

    10 ans de ROOT, et si j'ai un conseil à donner aux jeunes, c'est de ne pas l'utiliser. (Même si la nouvelle équipe qui a repris le projet à l'air dynamique et qu'on voit enfin des avancées)

    ROOT à quelques atouts :

    • Les entrée sortie sur de gros fichiers sont efficace et c'est pas simple de faire mieux (avec ce que le physicien moyen a sous la main)
    • ROOT est complet, on est à peu près sur qu'il y a un TDoSomething dans ROOT ce qui évite de perdre du temps à chercher une librairie qui le fait
    • La documentation de ROOT est en générale correcte, si on sait chercher on y trouve quelque-chose

    Par contre ROOT a pleins de défauts

    • ROOT ignore l'existence du C++ moderne (Certe c'est un peu la faute de CINT), c'est à peine si on y trouve des template, des passage par référence, ou des fonctions de la librairie standard (je parle même pas de RAII). C'est dommage vu le nombre de gens qui apprennent le C++ avec ROOT et qui se retrouve prisonnier de mauvaises pratiques
    • Les plots par défauts sont moches, il y a eu beaucoup de travail ces derniers temps, mais devoir commencer un programme par une fonction genre :
      ```
      void set_plot_style_color() {
      const Int_t NRGBs = 5;
      const Int_t NCont = 255;

      Double_t stops[NRGBs] = { 0.00, 0.34, 0.61, 0.84, 1.00 };
      Double_t red[NRGBs] = { 0.00, 0.00, 0.87, 1.00, 0.51 };
      Double_t green[NRGBs] = { 0.00, 0.81, 1.00, 0.20, 0.00 };
      Double_t blue[NRGBs] = { 0.51, 1.00, 0.12, 0.00, 0.00 };
      TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
      gStyle->SetNumberContours(NCont);
      }```

    Pour avoir des plots qui ressemblent à quelque chose, ca motive pas (On notera au passage que j'interviens sur des variables globales, voir ce que je disais sur le C++ moderne)
    - ROOT + Valgrind = Feu d'artifice, Il suffit d'inclure un header de ROOT à un projet pour voir valgrind envoyer un nombre impressionnant de messages et rendre toute recherche de fuite de mémoire ou autre problème impossible (Pas de surprises, dans les exemples on peut trouver ce genre de ligne, ou l'on passe un new en argument AddFrame(fEcan, new TGLayoutHints(kLHintsTop | kLHintsLeft | kLHintsExpandX | kLHintsExpandY,0,0,1,1));

    Bref pour moi les défauts du projets dépasse les avantages, et même si j'avoue que la V6 fait envie (plus que les nouvelles fonctionalités c'est surtout la nouvelle dynamique qui me fait dire qu'il se peut que le projet évolue dans le bon sens) , je vais passer mon tour, python + scipy répond à pas mal de mes besoins (Et puis j'ai quitté le monde de la physique à haute énergie)