Standard Template Library - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Performances

La question des performances nécessite de définir avant tout ce que l'on entend par programme performant en informatique. En effet, la seule rapidité du code compilé résultant n'est plus un critère absolu pour évaluer un programme. Il est nécessaire de prendre également en compte la qualité du code C++, c'est-à-dire sa facilité de compréhension, de maintenance et de réutilisation, ainsi que la compatibilité du code avec les différents compilateurs disponibles.

Qualité du code

Le principal apport de la STL, c'est un code C++ normalisé pour certains objets classiques, garantissant ainsi un code source lisible, facilement réutilisable.

Parallélisation

Les algorithmes présentés par les STL ne spécifient pas explicitement un ordre d'exécution. La tentation est donc grande de les exécuter de façon parallèle. Par exemple, la norme, à propos de std::for_each, ne précise pas si les éléments doivent être traités en ordre séquentiel. Un autre cas évident est le tri (std::sort) à la complexité de O(n.log(n)), donc très consommateur de temps CPU.

Bien que le problème soit complexe comme tout ce qui touche au parallélisme, il y a actuellement plusieurs approches distinctes:

  • STAPL propose des conteneurs distribués, adaptés au traitement parallèle (évitant les phénomènes d'effondrement), tout en étant utilisable dans un contexte séquentiel.
  • Multi Processing Template Library (MPTL) s'appuie en revanche davantage sur le code existant.
  • Architecture Objet Evolutive pour le Calcul Parallèle sur les Tableaux, et notamment le projet Paradeis, « une extension de la STL pour le calcul parallèle creux ».
  • Range Partition Adaptors (RPA), inspiré d'une note de Alexander Stepanov et Matthew Austen pousse encore plus loin cette démarche de réutilisation des programmes séquentiels et composants existants (conteneurs, algorithmes séquentiels optimisés et spécialisations de templates, optimisations dépendantes du système d'exploitation, etc.) intégrés dans un framework multitâche.
  • Threading Building Blocks (TBB), bibliothèque de Intel, propose plusieurs algorithmes intrinsèquement parallèles (parallel_for, parallel_while, parallel_reduce) ainsi que des conteneurs destinés au traitement parallèle (concurrent_queue), dans une certaine mesure compatible avec la STL.
  • Gnu g++ libstdc++ parallel mode: Une implémentation des STL utilisant OpenMP. De nombreux algorithmes en lecture seule (count), ou bien ne modifiant pas l'ordre des séquences (transform, replace), sont proposés. Cette bibliothèque souffre toutefois des limites d'OpenMP, à savoir une restriction aux itérateurs random_access.

Le problème devenant plus sensible compte tenu de l'apparition de microprocesseur multi cœur, et de la stagnation de leur fréquence d'horloge (« The free lunch is over », interview de Herb Sutter), ces solutions sont en évolution constante. On remarquera dans les évolutions possible du standard de C++ : A Proposal to Add Parallel Iteration to the Standard Library

Compatibilité avec les compilateurs existants

La bibliothèque STL utilise massivement l'ensemble des possibilités du langage C++, en particulier les modèles de classes (template). Dans les années 1990, lors des premières diffusions de la STL, la prise en charge par les compilateurs souffrait de problèmes de compatibilités diverses et il n'était pas rare que la compilation d'un code valide échoue. Cependant, dix ans plus tard, on peut considérer que les diverses implémentations de la STL sont d'excellente qualité, entièrement compatibles avec les compilateurs existants.

L'utilisation des templates entraîne cependant des temps de compilation importants. Bien qu'en constante amélioration, cette limitation est l'une des seules réserves actuellement formulée contre la STL.

Page générée en 0.088 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise