J'ai eu beaucoup de succès. D'abord, j'ai utilisé le code suivant :
#include <boost/xpressive/xpressive.hpp>
#include <iostream>
using namespace std;
using namespace boost::xpressive;
//A simple regex test
int main()
{
std::string hello( "hello world!" );
sregex rex = sregex::compile( "(\\w+) (\\w+)!" );
smatch what;
if( regex_match( hello, what, rex ) )
{
std::cout << what[0] << '\n'; // whole match
std::cout << what[1] << '\n'; // first capture
std::cout << what[2] << '\n'; // second capture
}
return 0;
}
C'était juste un hello world de Boost Xpressive (voir ci-dessous pour le lien). D'abord, j'ai compilé avec le -H
dans gcc. Il a montré une énorme liste d'en-têtes qu'il utilisait. Ensuite, j'ai regardé les drapeaux de compilation que mon IDE (code::blocks) produisait et j'ai vu quelque chose comme ça :
g++ -Wall -fexceptions -g -c main.cpp -o obj/Debug/main.o
J'ai donc écrit une commande pour compiler le fichier Xpressive.hpp avec exactement les mêmes drapeaux :
sudo g++ -Wall -fexceptions -g /usr/local/include/boost/xpressive/xpressive.hpp
J'ai de nouveau compilé le code original avec l'option -H
et j'ai obtenu ce résultat :
g++ -Wall -fexceptions -H -g -c main.cpp -o obj/Debug/main.o
! /usr/local/include/boost/xpressive/xpressive.hpp.gch
main.cpp
. /usr/include/c++/4.4/iostream
.. /usr/include/c++/4.4/x86\_64-linux-gnu/bits/c++config.h
.. /usr/include/c++/4.4/ostream
.. /usr/include/c++/4.4/istream
main.cpp
Le ! signifie que le compilateur a pu utiliser l'en-tête précompilé. Un x signifie qu'il n'a pas pu l'utiliser. L'utilisation des drapeaux de compilation appropriés est cruciale. J'ai enlevé le -H et fait quelques tests de vitesse. L'en-tête précompilé avait une amélioration de 14 secondes à 11 secondes. Pas mal mais pas génial.
Note : Voici le lien vers l'exemple : http://www.boost.org/doc/libs/1_43_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.examples Je n'ai pas réussi à le faire fonctionner dans le poste.
BTW : J'utilise le g++ suivant
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
0 votes
Je l'ai essayé et j'avais le cas d'utilisation optimal pour les en-têtes précompilés parce que ma source c est générée par le compilateur et non écrite par l'utilisateur. Sun Studio et surtout Visual Studio ont beaucoup amélioré le temps de construction. Avec gcc, c'était encore pire que sans les en-têtes précompilés. C'était avec la version 3.4, je n'ai pas encore testé la version 4.x, mais la vitesse et gcc sont mutuellement exclusives.
0 votes
@Lothar quel était le code ? Je trouve g++ environ 10x plus rapide que les compilateurs récents de Visual Studio, sur du code fortement modélisé.
0 votes
Je n'utilise pas de modèles dans mon code C++. C'est juste du C + la gestion des exceptions + de belles extensions C++. Même maintenant, 6 ans après cette question, VS2010 est une magnitude plus rapide. Mais en attendant, j'ai 16 cœurs et je peux vivre avec.