(c++) BOOST

BOOST

Par fabi, mardi 18 janvier 2005 à 01:19 :: Prog :: #3 :: rss

Un petit test de la librairie BOOST.

La librairie BOOST commence a être très connu par les amis du C++. J'ai donc voulu faire un petit test de ces qualités et ces défauts.

BOOST est entrain de devenir, comme la STL en son temps,un prochain standard, il est donc inintéressant de l'étudier pour prévoir le futur du c++, et de plus,cette librairie utilise souvent des techniques, voir des bidouilles toujours intéressant à connaitre.

Déjà, passons sur cette légende répandu, la partie qui doit être standardisé bientôt dans BOOST est vraiment minime, malheureusement: voir ici cela concerne les librairies les moins intéressantes je pense.

Donc, BOOST c'est quoi en gros ? une collection de lib, complètement hétéroclite, on y trouve des nouvelles fonctions "random", de la "metaprogrammation par le préprocesseur" (une horreur sans nom). Bref en piquant au hasard dans les diverses librairies, on pense que c'est un délire de geek en manque de pizza. Les auteurs se présentent comme proche du comité de standardisation, les gens qui adorent les templates. Dans les fait,il y a énormément de template dans BOOST (je suis pas fan de template...) . La qualité a par contre l'air d'être bien respecté, test de régression, norme de codage, espace de nom, norme de doc...les auteurs ont l'air très pointilleux sur ce point,plutôt encourageant.

Je n'ai utilisé que des librairies simples,donc pour l'instant je peux pas trop parler du reste (a part si je fais une section humour dans ce texte...)

La librairie "format". Je dois précise que j'adore cette librairie,simple mais si utile...elle manquait vraiment au C++! Cette librairie ce résume a une seul classe, Format. Son but est d'allié la facilité de "printf" (facilité relative,j'ai jamais aimé printf) avec le C++ Actuellement, vous avez deux façons de formaté du texte: Le vieux printf...sa syntaxe est souvent

printf("l'age de %s est %i ans.",truc,age);

Ce bon vieux printf et ces amis scanf,sprintf... sont responsable de la plupart des attaques par "buffer overflow".Des librairies sur linux et windows permettent de les éliminer du code, les outils de qualité les détestent, bref c'est une mauvaise habitude à éradiquer.On peut voir aussi que si on ne donne pas le bon type d'argument ou le bon nombre,un plantage est à craindre (ceci est détecter par pas mal de compilo actuel,dans les cas les plus simple).Le fait d'avoir à apprendre X flags, qui sont parfois plus subtile qu'on le pense me freine un peu aussi.

De l'autre le nouveau cout, de syntaxe

cout<<"l'age de"<<<"est"<<<".";

C'est une syntaxe plus sure a cause du typage du C++...mais le problème est la esthétique, le formatage ressemble pas a ce qu'on attends; Par exemple, par mégarde,j'ai oublié les espaces devant et après "truc" et "age".

Format réconcilie les deux,prenant le meilleur, on est pas loin de la facilité du php, et même,peut être mieux! avec format,on écrira:

cout<

On combine donc les avantages du printf (on voit bien ce qu'on aura en sortie) avec ceux du c++ (les %1% ne parlent pas de type,juste de ou mettre l'argument)

La librairie est facilement configurable pour lancer une exception ou non si le nombre d'argument est correct. Et autre intérêt, on peut répéter l'argument!

Imaginons que je veux générer automatiquement une classe:

class NOMDECLASSE
{
NOMDECLASSE() {};
~NOMDECLASSE(){};
}

Avec printf,on aura:

char patron=\
"class %s\n"\
"{\n"\
"%s() {};\n"\
"~%s(){};\n"\
"}"

printf(patron,nom,nom,nom);

Avec cout: cout<<"class "<<<\n"<<"{\n"<<<"() {};\n~"<<<(){};\n}"; (je rappel au passage que endl et \n sont très différent) (et que ce code est fait de tête,désolé pour les erreurs ;) )

Avec format: string patron=

"class %1%\n"\
"{\n"\
"%1%() {};\n"\
"~%1%(){};\n"\
"}"

cout<

Plus lisible quand même :) Dommage que ce langage ne permettent pas de prendre de chaine sans les analyser,d'où les \n et \ seul en fin de chaque ligne,c'est dommage. Ça prouve qu'avec quelques librairies le C++ devient un langage "web" tout a fait acceptable.

Aucun commentaire: