Boost : Bibliothèque indispensable ou phénomène de mode ? Peut-on, doit-on s'en passer ?
Bonjour tout le monde,
note: je créé ce sujet pour éviter de polluer une autre discussion.
Alors voilà, ça fait plus de 10 ans que je programme intensément en c++. J'utilise boost dans quasiment tout mes projets.
Mais, je persiste à dire que, sauf dans le cas particulier de l'apprentissage du langage, boost c'est comme les pointeurs: il ne faut l'utiliser que si l'on ne peut pas faire autrement.
Tout d'abord, l'installation est lourde. Si on installe tout, ça peut prendre plus de 3Go. Donc, outre le fait que c'est lourd, cela peut poser des problèmes de transport etc. Par exemple, moi j'aime bien me promener avec une clé usb sur laquelle j'ai des projets persos. Ce n'est évidemment pas possible d'avoir les différentes versions de boost utilisées par mes projets sur ma clé usb.
Ensuite, boost est une lib, pour ainsi dire, constamment en travaux. Et les testeurs ce sont nous. Je comprend bien les raisons de cette situation, mais c'est parfois assez enervant. Par exemple, j'ai constemment des problèmes de portabilité avec boost. Jamais de gros problèmes insurmontables, mais c'est toujours ennuyeux de modifier son source juste (auquel on a réfléchi, choisi telles solutions, etc.) juste pour un problème de portabilité.
Autre chose, c'est que boost n'est pas toujours facile à utiliser, et parfois il fait perdre plus de temps que ce qu'il nous en fait gagner. J'ai personnellement vécu une très mauvaise expérience avec boost::graph (je crois que maintenant c'est mieux, mais il y a 2-3 ans c'était l'enfer à utiliser, et j'ai fini par implémenter mon propre graphe et ses algos).
Enfin, mais cette critique est commune à toutes les libs, l'utilisation d'une lib externe peut poser problème lorsqu'on change de contexte (changement d'ordinateur, d'os, etc.). Le poids de boost et son évolution rapide ne facilitant pas la chose.
Je ne parlerai pas de la documentation, car ça fait longtemps que je n'y ai pas jeté un coup d'oeil, et j'ai ouïe dire que ça s'est nettement amélioré.
Pour finir, je trouve que beaucoup des choses qui sont dans boost ne sont pas indispensables, et bien souvent il est préférable de faire notre propre code, qui sera plus adapté à notre contexte et plus facile à optimiser. Car ce qui prend le plus de temps dans notre métier, ce n'est pas l'écriture du code, mais l'organisation du programme.
Voilà, c'est mon point de vue, et je suis curieux de voir comment vous allez démonter mes arguments. Mais je tiens à insister sur 2 points: Je suis bien conscient que boost
1. est gratuit, open source, que ses contributeurs sont bénévoles, etc.
2. implémente plein de choses géniales et souvent très utiles, voire indispensables. Par exemple, j'aurai maintenant du mal à me passer de boost::bind et boost::function, même s'il est possible de faire autrement.
Mais ces 2 points ne nous empêchent pas de critiquer constructivement le produit.
Boost - c'est comme tout, il ne faut pas en abuser...
Je crois que nous sommes tous d'accord. Boost est bien écrit et est très utile.
Toutefois, je travaille actuellement sur un énorme projet vieux d'une dizaine d'année qui repose sur une grosse partie de boost.
Les anciens architectes (si on peut les qualifier d'architectes) ont utilisés comme des petits fous Boost, le système est devenu très long à compiler, les templates de Boost (spécialement, spirit, bind et function ) sont absolument partout, et puis function a ses propres limites et on s'est retrouvé coincé dans ces limites..
Mon bémol, les templates, il faut les utiliser avec parcimonie, quand on a réellement besoin et de prendre soin de bien encapsuler son usage.
Et même,tous ces outils et facilités de langage comme le future Cx01 sont un plus à avoir mais j'essaye de toujours privilégier la solution la plus simple et peut-être moins fun mais qui marche...
Quand je pense à la quantité softs de qualités industriel qui ont été écrit qu'en C (Linux etc..).
Excusez-moi d'être un vieux rochon
PS:
Je vous donne un excellent lien sur les delegates en C++
http://www.codeproject.com/KB/cpp/FastDelegate.aspx
C'est fascinant de comparer son implémentation avec Boost::function