Liens connexes

Dépêche modérée par

Dépêche éditée par

: Google libère la bibliothèque d'expressions rationnelles RE2

Posté par weeber (). Modéré le 16 mars 2010.
35
Le 11 mars Google a libéré le code source d'une bibliothèque d'expressions rationnelles appelée RE2.
RE2 a été faite pour répondre aux besoins de Google, elle est optimisée pour la rapidité, a une empreinte mémoire réduite, gère les threads et propose une alternative aux méthodes utilisées jusqu'à présent.

Cet article revisite brièvement l'histoire des expressions rationnelles, puis le problème posé par les références arrières et, enfin, l'apport de RE2 par rapport aux implémentations existantes.

> Lire la suite (48 commentaires, moyenne: 3,2).   [dépêche : 2951 caractères]

Qu'est-ce-que c'est?

Les expressions rationnelles sont une notation pour décrire un jeu de chaînes de caractères.
Elles se présentent sous la forme d'une suite de caractères, on appelle cette suite un motif.
Ce motif décrit une ou plusieurs chaînes de caractères pour permettre de les trouver dans du texte, de la récupérer et de lui appliquer des traitements tels que les remplacer.

Par exemple:
couleurs? trouvera couleur et couleurs

L'histoire des expressions rationnelles

Leurs prémices remontent aux années 50 avec le mathématicien Cole Kleene. Il créa les modèles réguliers afin de décrire des machines d'état simples.
Michael Rabin et Dana Scott ont ensuite proposé un traitement mathématique de ces modèles dans un article qui leur a valu le Prix Turing.
Le langage SNOBOL a été la première implémentation des modèles rationnelles, mais il ne comprenait pas encore toutes les fonctionnalités des expressions rationnelles.
Ken Thompson a ensuite implémenté la notation de Kleene dans un éditeur de texte appelé QED afin d'utiliser les motifs pour rechercher du texte.
Il a ensuite ajouté ces fonctionnalités dans l'éditeur ed. Depuis ce temps, beaucoup de variations de l'adaptation originale de Thompson sont utilisées dans les outils tels qu'awk, Emacs, vi et lex.

Les références arrières

Les références arrière permettent d'ajouter de nombreuses fonctionnalités aux expressions rationnelles.

Par exemple:
(chat|chien)\1 détecte chatchat et chienchien mais pas chatchien ni chienchat.

Cependant, la puissance que les références arrières apportent amène aussi un coût très élevé.
Dans le cas le plus défavorable, les implémentations connues telles que celle du langage Perl utilisent des algorithmes de recherche qui ont un coût exponentiel.
Les références arrière sont indispensables, elles ne peuvent être supprimées des langages.
Cependant leurs implémentations peuvent êtres améliorées, c'est ce qu'a fait Russ Cox.

Les optimisations

Afin de réduire leurs coûts, Russ Cox a revu les algorithmes a partir de ceux créés par Ken Thompson.
Il a - entre autres - réécrit ceux qui sont implémentés dans le programme grep et a aussi ajouté d’autres algorithmes afin de prendre en charge des fonctionnalités supplémentaires.
Est ainsi née la bibliothèque RE2, qui offre la plupart des fonctionnalités des expressions rationnelles implémentées dans le langage Perl (PCRE).
RE2 est une bibliothèque C++ qui a l'avantage de garantir un temps d'exécution linéaire - et non plus exponentiel - avec une empreinte mémoire limitée. Allez donc voir les comparaisons de performances entre PCRE et RE2 sur cette page.
Cette bibliothèque est très utilisée chez Google, par exemple dans Code Search, ou dans certains de leurs outils internes.

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Dur

Posté par Snarky (Jabber id, page perso, ) le 16/03/2010 à 13:50. (lien). Évalué à 7.

J'aime pas l'ampleur Google... Mais je l'aime bien quand même... Je crois qu'il faut que j'aille voir un psy.

--
Milite pour un about:black sur les navigateurs ! ( シ Sauvons la planète ツ )

comparatif graphique

Posté par zero heure (Jabber id, page perso, ) le 16/03/2010 à 13:50. (lien). Évalué à 6.

le petit graphique en haut de cette page est très parlant
http://swtch.com/~rsc/regexp/regexp1.html

les trolleurs fous sont priés de noter que l'échelle de temps du second graphique est graduée en microsecondes

--
J'ai vu bien des choses dans ma petite vie, et je mesure amèrement l'impuissance à les dire. (JP Rosnay, Le 13ème apôtre) http://www.poesie.net/apotre2.htm

Démocratisation

Posté par Sytoka Modon (page perso, ) le 16/03/2010 à 15:24. (lien). Évalué à 3.

Bonne dépêche. Je rajouterais cependant que les expressions rationnelles ont été surtout démocratisé par le langage Perl qui l'a mis au coeur du langage dès ses débuts.

De plus, la communauté Perl est toujours très active sur ce thème avec Perl6 dont la grammaire est écrite en expression rationnelle mais aussi via le mouvement "Modern Perl" ont l'ont peut (doit) utiliser le modificateur 'x' qui permet de mettre des espaces, des retours chariots et même des commentaires dans ses regex ! Cela permet d'avoir des expressions plus facilement compréhensible et donc au final moins de bogue et un code plus maintenable.

Corrections

Posté par ChrisJ (page perso, ) le 16/03/2010 à 19:06. (lien). Évalué à 2.

Dans « Qu'est-ce que c'est » :
- « un jeu de chaînes » : « un ensemble de chaînes »
- « de les trouver..., de LES récupérer, de LEUR appliquer... »

Dans « L'histoire des expressions rationnelles » :
- « machines d'états » : ajouter « automates » ?
- « modèles rationnelles » : « modèles rationnels »

Dans « Les optimisations » :
- « Les références arrière sont indispensables, elles ne peuvent être supprimées des langages » : à mon avis, il faudrait préciser, parce qu'on peut très bien les supprimer d'un langage d'expressions rationnelles. Cela diminue son pouvoir d'expressivité, c'est tout.

RE2 et références arrières.

Posté par jeberger (Jabber id, page perso, ) le 16/03/2010 à 20:01. (lien). Évalué à 6.

Les références arrière sont indispensables, elles ne peuvent être supprimées des langages.

Sauf que justement, RE2 les supprime! C'est comme ça qu'ils obtiennent le gain de vitesse...

Bon, résultat ?

Posté par yoho (page perso, ) le 17/03/2010 à 23:26. (lien). Évalué à 1.

Est-ce que perl, python, etc... vont finir par utiliser RE2 ou non ?

Utilisant perl en tant qu'administrateur système, mis à part les backreference style "\1", il n'y a rien qui me manquerait dans RE2 (et encore, je les utilises rarement) quand je regarde les expressions grisées ici : http://code.google.com/p/re2/wiki/Syntax

Question subsidiaire : il y a-t-il une différence entre "expressions rationnelles" et "expressions régulières" ?

Revenir en haut de page