BOP signifie "Boite à Outils de Patrick", j'ai pensé que j'aurais moins de conflits de nom qu'avec PTK ("Patrick Tool Kit") et ça sonne mieux...
Ce sont des outils de developpement pour le langage C. Leur interêt est de présenter des fonctionnalités qui ne se retrouvent pas dans des bibliothèques standarts.
L'ambition de Bop n'est pas d'égaler la STL C++, mais certaines personnes ont des réticences à utiliser C++ notamment en raison du typage fort des variables et d'un coté de ce langage que l'on peut trouver un peu rébarbatif malgré ses très nombreuses qualités.
Bop propose une interface programmatique (qui ici sera appelée API (Application Programmer Interface) par la suite) consistante parmi ses différents composants, cettte API est de ce fait simple à utiliser (malgré les noms de fonction que certains peuvent trouver peu poëtiques), il l'est aussi en raison des exemples permettant de démarrer dans son utilisation et de la maitriser rapidement.
Bop suit une approche objet, mais ni dans sa conception ni dans son implémentation il ne cherche à imiter d'autres langages.
La simplicité de Bop n'empêche pas sa puissance,
il permet de simplifier de manière drastique les programmes s'appuyant sur lui pour gérer leurs données.
La puissance est aussi liée aux performances, Bop est conçu pour être performant sans sacrifier pour cela sa cohérence et la lisibilité de son code.
L'API de Bop est definie par la documentation accessible à partir de cette page, il est possible que vous trouviez des fonctions non documentées ici, dites-vous que vous n'êtes pas certain de les retrouver dans une prochaine version, si vous les retrouvez elles ne feront peut-être pas exactement la même chose. Vous êtes prévenu.
Il s'agit principalement d'accès de bas niveau a des structures simples de données et de quelques fonctions variées regroupées selon leurs objectifs. Les fonctions d'accès à des types de données et les modèles de données qu'elle proposent peuvent être assimilées à des classes mais nous parlereons de type de données et de fonctions selon la terminologie C.
En cliquant sur les liens suivants vous aurez accès à la documentation des différents composants de Bop.
Bopd, Bopm et bopx comprennent des fonctions regroupées selon leur sujet. A Bopc, Boph, Bopl et Bops sont associés des types d'objet, la définition des structure de données et des fonctions d'accès à ces données.
L'API décrite ici est celle de l'utilisation des fonctions et des types déjà existants.
La manière de définir de nouveaux types (Que sais-je, peut-être auriez-vous voulu un B-tree en plus) n'est pas documentée car cette interface est sujette à des changements dans l'avenir.
Toutefois, ces changements ne seront sans doute pas importants et la manière de définir de nouveaux types est très simple,
si vous voulez le faire voir le source bops.c par exemple, vous risquez simplement d'avoir à apporter des modifications en passant à une nouvelle version.
Les eventuelles modifications à apporter seront expliquées dans la documentation de la version ayant modifié la définition de types.
Notons que la définition de nouveaux types et l'application de fonctions standard ( bop?New, bop?Delete, bop?list etc. ) ne necessitent pas de modifications dans Bop et une implémentation assez simple.
Il s'agit des conventions d'écriture que j'ai suivies dans Bop, il ne s'agit évidemment pas de conventions que vous devriez respecter pour utiliser Bop, je les reproduis ici simplement pour aider à mieux assimiler l'API.
Vous l'avez sans doute deviné, dans BOPC, BOPH, BOPL et BOPL, C vient de container, H vient de Hash, L vient de List et S vient de Stack, pour X c'est parce que je ne sais pas d'où le faire venir.
Les noms des structures et fonctions de l'API ont souvent des noms assez semblables entre ces différents composants, sachez que c'est parce qu'elles ont des similarités.
Dans les différents noms utilisés, la première lettre d'un mot utilisé à l'interieur d'un nom (mais non necessairement à son début est toujours en majuscule.
Les types de données (typedefs de structures) commencent toujours par une majuscule.
les instances de ces données commencent par une minuscule.
le nom des fonctions d'accès commencent par une minuscule, il est préfixé par le nom en minuscules du composant auquel appartient la fonction. Cela ne donne pas necessairement des noms esthétiques mais mnémoniques.
les fichiers source des programmes sont appelés bop?.c ('?' étant 'c', 'h', 'l', 'x').
Je ne me suis pas beaucoup fatigué pour trouver ça (merci quand même de vous en être préoccupé) ...
Notons que le choix de la formation du nom des fonctions est discutable, je n'ai cependant pas envie d'en discuter,
il est assez probable que dans des logiciels ultérieurs, j'appelle (ainsi que je le faisais avant) ma_jolie_fonction( ) ce qui dans Bop serait appelé maJolieFonction,
je pense que c'est plus lisible. si vous préferez une autre formation de noms ne manquez surtout pas la doc du préprocesseur C notamment en ce qui concerne les directives #define.
Le paquetage a été écrit et testé sur le système Debian GNU/Linux "Sarge", il contient à la fois les sources, les procédures d'installation et de test ainsi que la documentation.
Le readme.(en anglais).
Bop est un logiciel libre, il est distribué et peut être utilisé selon les termes de la GNU General Public License.
Cette License est également disponible sur le site GNU.
Le principe des tables de haschage est très bien décrit dans "Compilers, Principles, Techniques and Tools" de Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman. J'ai repris leur exemple de fonction de hachage de clés que j'ai légèrement modifiée pour en faire la fonction par défaut de Boph.
A défaut de le leur avoir demandé, qu'ils en soient remerciés.
Le reste du paquetage a été écrit "from scratch".