Article de reference

Bibliothèque (informatique)

Illustration d'une application utilisant libvorbisfile pour lire un fichier Ogg Vorbis En informatique , une bibliothèque est un ensemble de ressources utilisables lors du dével...

Illustration d'une application utilisant libvorbisfile pour lire un fichier Ogg Vorbis

En informatique , une bibliothèque est un ensemble de ressources utilisables lors du développement logiciel pour implémenter un programme informatique . Généralement, une bibliothèque est constituée de code exécutable , comme des fonctions et des classes compilées , ou bien de code source . Une bibliothèque de ressources peut contenir des données telles que des images et du texte .

Une bibliothèque peut être utilisée par plusieurs consommateurs indépendants (programmes et autres bibliothèques). Cela diffère des ressources définies dans un programme, qui ne peuvent généralement être utilisées que par ce programme. Lorsqu'un consommateur utilise une ressource de bibliothèque, il bénéficie de ses fonctionnalités sans avoir à les implémenter lui-même. Les bibliothèques favorisent la réutilisation des logiciels de manière modulaire . Elles peuvent s'appuyer sur d'autres bibliothèques, créant ainsi une hiérarchie de bibliothèques au sein d'un programme.

Lorsqu'un programmeur écrit du code utilisant une bibliothèque, il lui suffit de savoir utiliser son interface de programmation (API), sans avoir à comprendre son fonctionnement interne. Par exemple, un programme peut utiliser une bibliothèque qui abstrait un appel système complexe , permettant ainsi au programmeur d'utiliser la fonctionnalité système sans avoir à se pencher sur les subtilités de cette fonction.

Histoire

L'idée d'une bibliothèque informatique remonte aux premiers ordinateurs créés par Charles Babbage . Un article de 1888 sur sa machine analytique suggérait que les opérations informatiques pouvaient être perforées sur des cartes distinctes de celles utilisées pour les entrées numériques. Si ces cartes perforées étaient conservées pour être réutilisées, alors « progressivement, la machine disposerait de sa propre bibliothèque »

Une femme travaille à côté d'une armoire à dossiers contenant la bibliothèque de sous-programmes sur des bobines de bande perforée pour l'ordinateur EDSAC.

En 1947, Goldstine et von Neumann ont émis l'hypothèse qu'il serait utile de créer une « bibliothèque » de sous-programmes pour leurs travaux sur la machine IAS , un prototype d'ordinateur qui n'était pas encore opérationnel à l'époque. Ils envisageaient une bibliothèque physique d' enregistrements sur fil magnétique , chaque fil stockant du code informatique réutilisable.

Inspirés par von Neumann, Wilkes et son équipe construisirent l'EDSAC . Un classeur à bandes perforées contenait la bibliothèque de sous-programmes de cet ordinateur. Les programmes pour l'EDSAC se composaient d'un programme principal et d'une séquence de sous-programmes copiés depuis la bibliothèque. En 1951, l'équipe publia le premier manuel de programmation, * The Preparation of Programs for an Electronic Digital Computer* , qui décrivait en détail la création et l'objectif de la bibliothèque.

COBOL incluait des « capacités primitives pour un système de bibliothèque » en 1959, mais Jean Sammet les a décrites rétrospectivement comme des « installations de bibliothèque inadéquates ».

JOVIAL possède un pool de communication (COMPOOL), qui est en gros une bibliothèque de fichiers d'en-tête.

Un autre facteur majeur du développement du concept de bibliothèque moderne est l' innovation des sous-programmes en FORTRAN . Les sous-programmes FORTRAN peuvent être compilés indépendamment les uns des autres, mais le compilateur était dépourvu d' éditeur de liens . Par conséquent, avant l'introduction des modules dans Fortran-90, la vérification des types entre les sous-programmes FORTRAN était impossible.

Au milieu des années 1960, les bibliothèques de copie et de macros pour assembleurs étaient courantes. Avec la popularité croissante du système IBM 360 , les bibliothèques contenant d'autres types d'éléments textuels, comme les paramètres système, se sont également répandues.

Dans le système d'exploitation IBM OS/360 et ses successeurs, on appelle cela un ensemble de données partitionné .

Le premier langage de programmation orienté objet , Simula , développé en 1965, permettait d'ajouter des classes aux bibliothèques via son compilateur.

Enchaînement

Le processus d' édition de liens (ou de liaison ) résout les références, appelées symboles (ou liens ), en les recherchant à différents emplacements, notamment dans les bibliothèques configurées. Si l' éditeur de liens (ou de liaison) ne trouve pas un symbole, l'opération échoue. Cependant, plusieurs correspondances peuvent ou non entraîner un échec.

La liaison statique consiste à lier le code lors de la compilation , de sorte que le code exécutable de la bibliothèque soit inclus dans le programme. La liaison dynamique , quant à elle, s'effectue à l'exécution ; elle implique la compilation du programme avec les informations nécessaires à la liaison dynamique avec une bibliothèque de liens dynamiques (DLL). Pour la liaison dynamique, un fichier DLL compatible doit être disponible pour le programme à l'exécution, tandis que pour la liaison statique, le programme est autonome.

L'édition de liens intelligente est effectuée par un outil de compilation qui exclut le code inutilisé lors du processus d'édition de liens. Par exemple, un programme qui n'utilise que des entiers pour ses calculs, ou qui n'effectue aucune opération arithmétique, peut exclure les routines de la bibliothèque de calcul en virgule flottante. Cela permet de réduire la taille du fichier programme et la consommation de mémoire.

Déménagement

Dans un programme ou un module de bibliothèque, certaines références sont stockées sous forme relative ou symbolique et ne peuvent être résolues tant que l'ensemble du code et des bibliothèques n'a pas reçu d'adresse statique finale. La relocalisation consiste à ajuster ces références ; elle est effectuée soit par l'éditeur de liens, soit par le chargeur . En général, la relocalisation ne peut pas être appliquée aux bibliothèques individuelles, car leurs adresses mémoire peuvent varier selon le programme qui les utilise et les autres bibliothèques avec lesquelles elles sont combinées. Le code indépendant de la position évite les références à des adresses absolues et ne nécessite donc pas de relocalisation.

Catégories

Exécutable

Une bibliothèque exécutable est constituée de code converti du code source en code machine ou en une forme intermédiaire telle que le bytecode . Un éditeur de liens permet d'utiliser les objets de la bibliothèque en associant chaque référence à l'adresse où se trouve l'objet. Par exemple, en C , une fonction de bibliothèque est appelée selon la syntaxe et la sémantique d'appel fonction standard du C. [

Une variante est une bibliothèque contenant du code compilé (code objet dans la nomenclature d'IBM) sous une forme qui ne peut pas être chargée par le système d'exploitation mais qui peut être lue par l'éditeur de liens.

Statique

Une bibliothèque statique est une bibliothèque exécutable liée à un programme lors de sa compilation par un éditeur de liens (ou tout autre outil de compilation effectuant cette liaison). Ce processus, et le fichier autonome qui en résulte, constituent une version statique du programme. Une version statique peut ne pas nécessiter de relocalisation supplémentaire si la mémoire virtuelle est utilisée et qu'aucune randomisation de l'espace d'adressage n'est souhaitée.

Sur les systèmes de type Unix, une bibliothèque statique est parfois appelée archive .

Dynamique

Une bibliothèque dynamique est liée lors de l'exécution du programme, soit au chargement , soit à l'exécution . La bibliothèque dynamique a été conçue après la bibliothèque statique afin d'offrir une plus grande flexibilité de déploiement logiciel .