30 votes

Quand devez-vous utiliser une STL autre que celle qui est fournie avec votre compilateur ?

J'étais curieux de connaître les implémentations de la STL en dehors de ce qui est fourni avec gcc ou Visual Studio, alors une recherche rapide sur Google a donné quelques résultats, tels que :

Dans quelles circonstances doit-on utiliser une autre bibliothèque de modèles standard ?

Par exemple, la page d'Apache contient une liste d'éléments tels que "conformité totale à la norme C++" et "optimisé pour des compilations rapides et des fichiers exécutables de taille extrêmement réduite". S'il est si bon, pourquoi ne remplacerait-il pas libstdc++ ?


Par souci d'exhaustivité, voici quelques-unes des autres implémentations de la STL :

  • STLPort
  • STXXL (qui est en quelque sorte usage spécial, destiné aux grands ensembles de données qui ne tiennent pas en mémoire)
  • Dinkumware (commercial)
  • SGI STL
  • libstdc++ (mise en œuvre du CCG)

13voto

ltcmelo Points 2323

Je n'ai jamais eu à utiliser une version STL autre que celle fournie avec le compilateur. Mais voici quelques points qui me viennent à l'esprit.

  • Sécurité des fils : La STL d'Apache fournit un commutateur de compilation pour activer/désactiver certaines fonctionnalités de sécurité des fils.
  • Localisation : Encore une fois, la STL d'Apache est livrée avec un bon support pour de nombreuses langues différentes.
  • Structures de données : Vous pourriez avoir besoin d'un basic_string qui est basée sur COW (copy-on-write) et la version de la STL fournie avec votre compilateur ne le permet pas.
  • Extensions non standard : Des caractéristiques particulières que vous aimez chez d'autres implémentations de la STL. Par exemple, hash_map (et les versions apparentées) de Dinkumware (qui est livré avec Visual Studio) ont une conception sensiblement différente de celle des versions de hash_map (et connexes) de STLPort .
  • Questions binaires : Contraintes dans certains environnements (logiciels embarqués) dues à la taille du code. Dans ce cas, si vous n'avez pas besoin de la STL complète, il peut être intéressant d'utiliser une version réduite.
  • Performance : Et si vous découvriez, après profilage, que l'"autre" implémentation STL vous donne des performances nettement meilleures pour une application particulière. (Avec autant de détails concernant les algorithmes et les structures de données, cela pourrait être réellement possible).
  • Mode débogage : Certaines implémentations de la STL offrent des fonctionnalités intéressantes pour le débogage. Par exemple, la vérification des plages d'itérateurs.

10voto

Len Holgate Points 12579

J'utilise parfois STLPort plutôt que la STL fournie avec Visual Studio. À l'époque où la VC6 était prise en charge, la STL livrée avec était boguée et l'utilisation de la STLPort (ou une autre STL) a beaucoup de sens (surtout si vous construisez du code multithread).

Aujourd'hui, il s'agit souvent davantage de performances (taille ou vitesse). Par exemple, la STL fournie avec VS2008 n'est pas très conviviale dans une situation multithread car elle utilise le verrouillage autour des objets locaux, ce qui entraîne des synchronisations entre les threads. (Voir ici http://stackoverflow.com/questions/225362/convert-a-number-to-a-string-with-specified-length-in-c/226719#226719 pour plus de détails sur un exemple de ce type).

3voto

Charles Salvia Points 28661

Je n'ai jamais eu besoin d'utiliser une autre STL, mais je peux imaginer des scénarios où il pourrait être utile d'utiliser, par exemple, la version Apache, si vous avez besoin de petits exécutables parce que vous développez pour une plate-forme embarquée.

Une autre raison pourrait être d'utiliser une version de la STL qui garantit certaines choses qui ne sont pas nécessairement garanties par la norme. Par exemple, pour s'assurer que vous avez des chaînes de caractères non COW afin de pouvoir écrire du code thread-safe.

3voto

Clay Fowler Points 1402

Des tiers peuvent implémenter des versions améliorées de la STL qui tentent d'offrir diverses choses, comme une taille plus petite, une exécution plus rapide, etc. Vous pouvez choisir l'une de ces implémentations alternatives parce que vous voulez l'un de ces attributs de leur implémentation. Vous pouvez également choisir l'une d'entre elles lorsque vous faites du développement multiplateforme parce que vous voulez éviter les différences de comportement entre les versions gcc et Visual Studio de votre produit (pour ne citer qu'un exemple).

Il n'est pas nécessaire d'attendre la sortie d'une nouvelle version d'un compilateur avec une implémentation intégrée de la STL afin d'obtenir une nouvelle implémentation de celle-ci si vous avez des besoins spécifiques.

3voto

ChrisInEdmonton Points 2040

STLport possède ce qu'ils appellent un "mode de débogage puissant" qui effectue toute une série de vérifications en cours d'exécution pour "l'exactitude de l'utilisation des itérateurs et des conteneurs". Cela permet d'attraper un certain nombre d'erreurs qui ne seraient pas immédiatement évidentes. Je recommande vivement l'utilisation de STLport pour le débogage et les tests.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X