Standard Template Library - Définition et Explications

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

La Standard Template Library aussi appelée STL est une bibliothèque C++, normalisée par l'ISO (document ISO/CEI 14882) et implémentée à l'aide des templates.

Cette bibliothèque fournit :

  • un ensemble de classes conteneurs, tel que les vecteurs, les tableaux associatifs, les listes chaînées, qui peuvent être utilisées pour contenir n'importe quel type de données (Dans les technologies de l'information (TI), une donnée est une description élémentaire, souvent codée, d'une chose, d'une transaction d'affaire, d'un événement, etc.) à condition qu'il supporte certaines opérations comme la copie et l'assignation.
  • une abstraction ( En philosophie, l'abstraction désigne à la fois une opération qui consiste a isoler par la pensée une ou plusieurs qualités d'un objet concret pour en former une représentation intellectuelle, et le produit de cette...) des pointeurs : les iterators. Ceux-ci fournissent un moyen simple et élégant de parcourir des séquences d'objets et permettent la description d'algorithmes indépendamment de toute structure de données.
  • des algorithmes génériques tels que des algorithmes d'insertion/suppression, recherche (La recherche scientifique désigne en premier lieu l’ensemble des actions entreprises en vue de produire et de développer les connaissances...) et tri.
  • une classe string permettant de gérer efficacement et de manière sûre les chaînes de caractères.

Historique

L'architecture (Architectures est une série documentaire proposée par Frédéric Campain et Richard Copans, diffusé sur Arte depuis 1995.) de la bibliothèque STL a été créée en grande partie par une seule personne, Alexander Stepanov. En 1979, il commença à mettre en forme ses premières idées de programmation (La programmation dans le domaine informatique est l'ensemble des activités qui permettent l'écriture des programmes informatiques. C'est une étape importante de la conception de logiciel...) générique, une technique révolutionnaire dans le domaine du développement logiciel (En informatique, un logiciel est un ensemble d'informations relatives à des traitements effectués automatiquement par un appareil...). Bien que Dave Musser ait formulé certains aspects de la programmation générique dès 1971, ceux-ci restaient limités, à l'époque, au champ (Un champ correspond à une notion d'espace défini:) très spécialisé de l'algèbre (L'algèbre, mot d'origine arabe al-jabr (الجبر), est la branche des mathématiques qui étudie, d'une façon générale, les structures algébriques.) informatique (L´informatique - contraction d´information et automatique - est le domaine d'activité scientifique, technique et industriel en rapport avec le traitement automatique de l'information par des machines...).

Stepanov sut reconnaître le potentiel de la programmation générique et persuada ses collègues de General Electric (General Electric est un conglomérat américain fondé en 1892 par la fusion d'une partie de Thomson-Houston Electric Company et de Edison General Electric...) (dont, initialement, Dave Musser et Deepak Kapur) de creuser le concept pour en faire l'une des bases du développement de logiciel (Le développement de logiciel comprend l'ensemble des étapes et processus qui permettent de passer de l'expression d'un besoin informatique à un logiciel fonctionnel et fiable.). À cette époque, aucun langage de programmation (Un langage de programmation est un langage informatique, permettant à un être humain d'écrire un code source qui sera analysé par une machine, généralement un ordinateur. Le...) ne proposait de réel support pour cette nouvelle méthode de programmation générique.

Ada fut le premier langage important à fournir ce support, avec son unité générique. Stepanov et Musser développèrent et publièrent une bibliothèque Ada, disponible dès 1987, dédiée aux calculs utilisant des listes. Celle-ci incluait une grande partie de leur recherche sur la programmation générique. Cependant, Ada ne parvint pas réellement à dépasser le cadre de l'industrie de défense, et le c++, malgré son manque de maturité, se dégagea rapidement comme un langage à la fois adapté à la programmation générique et susceptible d'être diffusé plus largement. Un des autres avantages du c++ réside dans son modèle de calcul, qui permet un accès très souple à une zone de stockage mémoire (D'une manière générale, la mémoire est le stockage de l'information. C'est aussi le souvenir d'une information.), à travers les pointeurs. Cela permet d'obtenir du code très général sans perdre en efficacité.

De nombreuses recherches furent nécessaires pour développer, non pas des composants individuels, mais l'architecture (L’architecture peut se définir comme l’art de bâtir des édifices.) d'une bibliothèque complète basée sur la programmation générique. D'abord aux Laboratoire AT&T de Bell (Bell Aircraft Corporation est un constructeur aéronautique américain fondé le 10 juillet 1935. Après avoir construit des avions de combat durant la Seconde Guerre...), puis au Centre de Recherche Hewlett-Packard (Hewlett-Packard Company, officiellement abrégée en HP, est une entreprise d'informatique et d'électronique multinationale américaine. Elle fait partie des...), Stepanov essaya différentes architectures et implémentations d'algorithmes, en C puis en C++. Musser participa à cette recherche, et en 1992, Meng Lee rejoignit le projet (Un projet est un engagement irréversible de résultat incertain, non reproductible a priori à l’identique, nécessitant le concours et l’intégration...) de Stepanov chez HP et devint l'un des principaux contributeurs.

Ce travail aurait probablement été poursuivi un certain temps (Le temps est un concept développé par l'être humain pour appréhender le changement dans le monde.) comme un simple projet de recherche et aurait amené à une bibliothèque propriétaire HP, si Andrew Koenig, au courant du projet, n'avait pas demandé à Stepanov de présenter ses idées lors d'une conférence du comité ANSI/ISO, en Novembre 1993. Le comité, qui s'était réuni pour normaliser le C++, répondit très favorablement et demanda, par l'intermédiaire de Koenig, un avant-projet officiel pour la réunion (La Réunion est une île française du sud-ouest de l'océan Indien située dans l'archipel des Mascareignes à environ 700 kilomètres à...) de Mars 1994. Malgré un délai (Un délai est d'après le Wiktionnaire, « un temps accordé pour faire une chose, ou à l’expiration duquel on sera tenu...) extrêmement court, Stepanov et Lee réussirent à fournir une première proposition, qui reçut l'approbation préliminaire du comité lors de la réunion de Mars.

Le comité demanda cependant plusieurs changements et extensions (dont certains importants), et un petit groupe de membres rencontra Stepanov et Lee pour les aider à détailler certaines caractéristiques. En particulier, il fallait montrer la cohérence de l'une des extensions les plus significatives (les conteneurs associatifs) en les implémentant entièrement, ce que Stepanov délégua à Musser. C'est sans doute l'une des phases du projet qui aurait pu facilement devenir incontrôlable, mais là encore, Stepanov releva le défi et fit une proposition complète, approuvée définitivement par le comité ANSI/ISO en Juillet 1994. On trouvera des détails supplémentaires sur cette histoire dans un interview qu'Alexander Stepanov donna en Mars 1995 dans le Dr. Dobb's Journal.

Le document (Dans son acception courante un document est généralement défini comme le support physique d'une information.) 17 de Stepanov et Lee fut alors incorporé dans l'avant-projet de la norme (Une norme, du latin norma (« équerre, règle ») désigne un état habituellement répandu ou moyen considéré le plus...) ANSI/ISO C++ (1, une partie des articles 17 à 27). Cela influença d'autres parties de la bibliothèque standard C++, en particulier les fonctions de manipulation de chaînes (objet string du C++), et certains standards adoptés auparavant furent modifiés en conséquence.

Malgré le succès de la STL auprès du comité, il restait la question de sa diffusion (Dans le langage courant, le terme diffusion fait référence à une notion de « distribution », de « mise à disposition » (diffusion d'un produit, d'une information), voire de...) et de son utilisation pratique. Les diffuseurs de compilateur et de bibliothèques logicielles indépendantes pouvaient bien sûr développer leur propre implémentation (Le mot implantation peut avoir plusieurs significations :) de la STL, en se basant sur l'avant-projet de norme désormais public, et vendre cette implémentation, soit comme produit à part entière, soit comme partie intégrante d'un de leur produit. Atul Saini fut l'un des premiers éditeurs à reconnaître le potentiel commercial (Un commercial (une commerciale) est une personne dont le métier est lié à la vente.) de la STL. Il commença à l'étudier comme ligne de développement économique pour son entreprise Modena Software Incorporated avant même que la STL soit complètement (Le complètement ou complètement automatique, ou encore par anglicisme complétion ou autocomplétion, est une fonctionnalité informatique permettant à l'utilisateur de limiter la quantité d'informations qu'il...) acceptée par le comité.

Les perspectives de large diffusion de la STL augmentèrent considérablement lorsque Hewlett-Packard décida, en Août 1994, de rendre disponible gratuitement sur Internet (Internet est le réseau informatique mondial qui rend accessibles au public des services variés comme le courrier électronique, la messagerie instantanée et le World Wide Web, en utilisant le protocole de...) sa propre implémentation. Celle-ci, développée (En géométrie, la développée d'une courbe plane est le lieu de ses centres de courbure. On peut aussi la décrire comme l'enveloppe de la famille des...) par Stepanov, Lee et Musser au cours de la normalisation avec l'ANSI/ISO, devint la base de toutes les implémentations proposées aujourd'hui par les diffuseurs de compilateurs et de bibliothèques logicielles.

Implémentation actuelle

La bibliothèque STL est principalement un ensemble (En théorie des ensembles, un ensemble désigne intuitivement une collection d’objets (les éléments de l'ensemble), « une multitude qui peut être comprise comme un tout », comme...) d'objets et de méthodes standards pour le c++. La norme ANSI/ISO précise les fonctionnalités de ces différents objets, mais pas la façon concrète (La concrète est une pâte plus ou moins dure obtenue après extraction d’une matière première fraîche d’origine...) dont ceux-ci doivent être implémentés. Pour cette raison, il existe de nombreuses bibliothèques STL différentes. Elles fournissent toutes un support des objets et algorithmes définis comme standards, et apportent pour la plupart un certain nombre (La notion de nombre en linguistique est traitée à l’article « Nombre grammatical ».) d'extensions qui ne sont, à l'heure (L’heure est une unité de mesure du temps. Le mot désigne aussi la grandeur elle-même, l'instant (l'« heure qu'il est »), y compris en sciences (« heure...) actuelle, pas reconnus comme standards par la norme. Cette multiplicité d'implémentations est similaire à celle qui existe au niveau des compilateurs.

Du point (Graphie) de vue (La vue est le sens qui permet d'observer et d'analyser l'environnement par la réception et l'interprétation des rayonnements lumineux.) des licences, la norme elle-même n'est soumise à aucun copyright, et tout (Le tout compris comme ensemble de ce qui existe est souvent interprété comme le monde ou l'univers.) le monde (Le mot monde peut désigner :) est donc libre de développer sa propre implémentation de la bibliothèque STL. Par contre, l'implémentation elle-même de la bibliothèque peut être ou non soumise à une licence, éventuellement propriétaire.

L'une des implémentations les plus diffusées de la bibliothèque STL a été développée historiquement par Hewlett-Packard, puis par Silicon Graphics (Silicon Graphics, Inc. (SGI), est une société américaine qui construit des stations de travail (workstations) dédiées aux domaines de l'infographie, de la 3D et du traitement vidéo.). Cette implémentation est "libre de droit", sous copyright, c'est-à-dire que l'on peut la copier, la distribuer et la modifier, mais que l'on ne peut pas se réclamer en être l'auteur.

Il existe aussi une implémentation de la STL en licence GNU (GNU est un système d'exploitation composé exclusivement de logiciels libres.). Dans les différentes distributions Linux (Au sens strict, Linux est le nom du noyau de système d'exploitation libre, multitâche, multiplate-forme et multi-utilisateur de type UNIX créé par Linus Torvalds, souvent désigné comme le...), elle est incluse dans le paquet libstdc++.

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 (Le code source (ou les sources voire le source) est un ensemble d'instructions écrites dans un langage de programmation informatique de haut niveau,...) lisible, facilement réutilisable.

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 90, lors des premières diffusions de la STL, la prise en charge (La charge utile (payload en anglais ; la charge payante) représente ce qui est effectivement transporté par un moyen de transport donné, et qui donne lieu à un paiement ou un bénéfice non pécuniaire pour être transporté.) 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, 10 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.

Exemples de programme

 
 // Met dans le vecteur (En mathématiques, un vecteur est un élément d'un espace vectoriel, ce qui permet d'effectuer des opérations d'addition et de multiplication par un scalaire. Un n-uplet peut constituer un exemple de vecteur,...) v1 la seconde ( 
 Seconde est le féminin de l'adjectif second, qui vient immédiatement après le premier ou qui s'ajoute à quelque chose de nature identique. 
 La seconde est une unité de mesure du temps....) moitié du vecteur v2 
 v1.assign(v2.begin() + v2.size() / 2, v2.end()); 
 // Applique la fonction test à chaque membre de v1 
 for_each(v1.begin(), v1.end(), test); 
 

Diagramme (Un diagramme est une représentation visuelle simplifiée et structurée des concepts, des idées, des constructions, des relations, des données statistiques, de l'anatomie etc....) des conteneurs

Cet article vous a plus ? Partagez-le sur les réseaux sociaux avec vos amis !
Page générée en 0.082 seconde(s) - site hébergé chez Amen
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
Ce site est édité par Techno-Science.net - A propos - Informations légales
Partenaire: HD-Numérique