« GLib » : différence entre les versions

Contenu supprimé Contenu ajouté
mis en forme
Jujuhyuiai (discuter | contributions)
Annulation de la modification de Sousou93600 (d)
Balise : Annulation
(Une version intermédiaire par le même utilisateur non affichée)
Ligne 3 :
{{Infobox Logiciel
| couleur boîte =
| nom = GLIbGLib
| logo =
| alternative logo =
Ligne 31 :
| version suivante =
}}
'''GLlbGLib''' est une [[Bibliothèque logicielle|bibliothèque]] [[Logiciel libre|libre]] pour le [[langage C]] et spécifiquement l'[[interface de programmation]] [[GTK (boîte à outils)|GTK]]. Sans se substituer à la [[bibliothèque standard du C]], elle en réécrit certains aspects, comme les fonctions de traitement de chaînes alphanumériques et de fichiers, ou la gestion des erreurs d'appel ; mais implémente aussi des [[structures de données]] élaborées : [[arbre (structure de données)|arbres]], [[table de hachage]] et [[liste (informatique)|listes]]. Cette bibliothèque offre les principales fonctions de gestion de la [[Programmation événementielle|boucle d'événements]] (clics souris, frappe clavier, signaux en général) de GTK : [[pile d'exécution]], [[Tas (allocation dynamique)|tas mémoire]], [[Fonction de rappel|callbacks]].
 
De par son caractère très général et sa licence libre, cette bibliothèque est utilisable pour programmer toutes sortes d'applications, en évitant certaines difficultés de la bibliothèque standard de C.
 
== Développement ==
C'était à l'origine un sous-ensemble de fonctions destinées à faciliter le [[Portage informatique|portage du code]] GTK sur différentes plates-formes, en donnant aux [[Type (informatique)|type]]s (booléens, entiers longs, pointeurs) le même format et la même taille en octets ; le codage des entiers, notamment, pose un problème de compatibilité particulier : le « [[boutisme]] ». Au moment de la conception de GTK 2 (appelé alors GTK+ 2), les développeurs décidèrent de sortir de l'[[Interface de programmation|interface]] GTK toutes les fonctions non-graphiques pour en faire une bibliothèque généraliste<ref name="Krause">Cf. {{Ouvrage |auteur1=Andrew Krause |titre=Foundations of GTK+ Development. Expert's Voice in Open Source. |éditeur=Apress |année=2007 |pages totales=630 |passage=5 |isbn=978-1-59059-793-4 |isbn2=1-59059-793-1}}</ref> : GLlbGLIb. Elle s'est désormais étendue pour offrir des fonctionnalités supplémentaires (sécurité sur l'adressage des [[Chaîne de caractères|chaînes de caractères]], formats date/heure, gestion de l'espace-disque, [[Appel système|appels système]], etc.).
 
GLlbGLIb fait partie du paquet [[GTK (boîte à outils)|GTK]] du [[projet GNU]]. Elle est distribuée selon les termes de la licence [[GNU LGPL]].
 
== Nécessité de GLlbGLIb ==
Outre la portabilité des données, GLlbGLIb a été conçu pour donner à GTK une [[Programmation orientée objet|structure de langage objet]], qui n'existe pas en langage C. Il s'agit de créer une arborescence de types abstraits :
 
<center>'''GtkObject''' → '''GtkWidget''' → '''GtkContainer''' → '''GtkBin''' → '''GtkWindow'''</center>
Ligne 53 :
Lorsque l'on modifie une fenêtre, il faut donc gérer la communication entre ces couches logiques pour que l'actualisation graphique se fasse correctement<ref name="Wright">Cf. {{Ouvrage |auteur1=Peter Wright |titre=Beginning GTK+/GNOME Programming |éditeur=Wrox |année=2000 |pages totales= |passage=92-97 |isbn=978-1-86100-381-2 |titre chapitre=Controlling the User Interface Layout}}.</ref>.
 
GLlbGLIb apporte les outils qui permettent cette communication entre couches superposées :
* des structures de données hiérarchisées et de taille variable,
* des aiguillages de routine dépendant du contexte, par le mécanisme des [[Fonction de rappel|fonctions de rappel]].
Ces outils sont rassemblés dans une partie essentielle de GLlbGLIb, [[GObject]].
 
== Contenu ==
=== Fonctions sécurisées pour les chaînes et tableaux ===
* allocation mémoire (<tt>g_try_malloc</tt>, <tt>g_free</tt>, etc.) : par rapport à la fonction standard <tt>malloc</tt>, GLlbGLib se charge de la gestion des erreurs et arrête le programme si l'allocation se passe mal. Il est possible d'allouer un tableau et de l'initialiser simultanément, et de préciser si la zone allouée se termine (ou non) par une valeur 0 conventionnelle{{sfn|Mettier|p=106-114}}.
* vérification des limites de représentation pour les types de base ;
* chaîne de caractères (<tt>g_string_new</tt>, <tt>g_string_insert</tt>, etc.) : on a pu écrire qu'{{citation|''en langage C, il n'existe pas type chaîne, mais plutôt une convention pour les représenter''<ref name="Delannoy">Cf. {{Ouvrage |langue=fr |auteur1=Cl. Delannoy |titre=Programmer en langage C |éditeur=Eyrolles |lieu=Paris |année=2009 |pages totales=267 |passage=145 |isbn=978-2-212-12546-7 |lire en ligne=https://books.google.com/books?id=3xdaW2EAK_MC&printsec=frontcover |titre chapitre=8. Les chaînes de caractère}}</ref>}}. D'ailleurs certaines fonctions, comme <tt>gets</tt> (supprimée dans norme C11) ou <tt>strcpy</tt> sont délicates à manipuler ; GLlbGLib associe systématiquement aux chaînes de type GString leur longueur, ce qui évite les débordements{{sfn|Mettier|p=81}}.
* les conversions de types : les fonctions de conversion de chaîne en nombre de GLlbGLib sont systématiquement dotées d'un indicateur d'erreur. En particulier, la fonction de [[conversion de type]] d'une chaîne "0" en entier retourne un code d'erreur qui n'est jamais codé par un 0, ce qui supprime une ambiguïté{{sfn|Mettier|p=93}}.
 
=== Structures de donnée évoluées ===
GLlbGlib permet de créer et de manipuler des [[structures de données]] évoluées, avec leurs [[Macro-définition|macro]]s associées (par ex. <tt>g_array_index()</tt> ) :
* [[liste chaînée|listes chaînées]] et [[File (structure de données)|files]]. Bien que les primitives de ces fonctions ne soient pas très difficiles à programmer en langage C<ref name="Klemens">Cf. par ex. {{Ouvrage |auteur1=B. Klemens |titre=21st Century C |éditeur=O'Reilly |année=2015 |pages totales= |passage=139-140 |isbn=978-1-4919-0389-6 |titre chapitre=6. Your Pal the Pointer}}</ref>{{,}}<ref name="Kalicharan">Cf. par ex. {{Ouvrage |auteur1=N. Kalicharan |titre=Data structures in C |éditeur=CreateSpace Independent Publ. |année=2012 |pages totales=330 |isbn=978-1-4382-5327-5 |titre chapitre=3. Linked lists}}</ref>, GLlbGlib les fournit{{sfn|Mettier|p=58-61}}.
* [[Arbre (Informatique)|arbres]] équilibrés : l'apport de GLlbGlib est de doter les arbres d'une [[relation d'ordre]] entre branches, ce qui permet d'accélérer les recherches d'un nœud{{sfn|Mettier|p=62}}.
* [[table de hachage|tables de hachage]] : GLlbglib fournit cette structure pour les données de type entier, caractère ou pointeur, en les dotant d'une [[relation d'équivalence]], et même d'un algorithme de parcours{{sfn|Mettier|p=68-76}}.
 
=== Interaction avec l'utilisateur ===
* interprétation de la [[ligne de commande]] : le langage C permet de compter et de décoder les paramètres passés en option après le nom du programme exécutable, en ligne de commande. La librairie standard propose une fonction sommaire, getopt(), qui permet le décodage ; toutefois, celle-ci suppose encore une syntaxe assez stricte. GLlbGLib offre, avec les fonctions <tt>G_option_context_parse()</tt> etc. une [[Analyse syntaxique|syntaxe complète]] qui permet par exemple de grouper les options.
 
=== Analyse de fichiers structurés courants ===
GLlbGLib fournit des fonctions d'analyse de certaines données structurées (sous-ensemble du [[XML]], [[Fichier de configuration|fichiers de configuration]]), ou de décodage des [[expressions régulières]]. Les expressions régulières fournissent un moyen précieux de tester la présence d'un motif dans une chaîne de caractère, ou d'extraire une partie d'une chaîne. GLlbGlib offre des fonctions de comparaison, de tri et d'extraction utilisant la syntaxe d'expression régulière de la norme [[POSIX]].
 
== Bibliographie ==