Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Chroniqueur Actualités
    Avatar de Patrick Ruiz
    Homme Profil pro
    Redacteur web
    Inscrit en
    février 2017
    Messages
    759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Redacteur web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : février 2017
    Messages : 759
    Points : 26 416
    Points
    26 416

    Par défaut ripgrep 11 est disponible et marque un changement de numérotation de l’outil de recherche de regexes

    ripgrep 11 est disponible et marque un changement de numérotation de l’outil de recherche d’expressions régulières
    Compatible avec VS Code

    « ripgrep est un outil ligne de commande qui recherche dans vos fichiers les motifs que vous lui donnez. ripgrep se comporte comme si vous lisiez chaque fichier ligne par ligne. Si une ligne correspond au motif fourni à ripgrep, cette ligne sera imprimée. Si une ligne ne correspond pas au motif, la ligne n'est pas imprimée », indique l’auteur.

    L’un des modes de mode de fonctionnement les plus utilisés de ripgrep est celui dit de recherche récursive. Un développeur peut s’en servir pour rechercher des motifs au sein de la totalité des fichiers d’un répertoire donné. Illustration avec le cas de la recherche de toutes les définitions de fonctions qui ont le mot write pour nom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $ rg 'fn write\('
    src/printer.rs
    469:    fn write(&mut self, buf: &[u8]) {
    
    termcolor/src/lib.rs
    227:    fn write(&mut self, b: &[u8]) -> io::Result<usize> {
    250:    fn write(&mut self, b: &[u8]) -> io::Result<usize> {
    428:    fn write(&mut self, b: &[u8]) -> io::Result<usize> { self.wtr.write(b) }
    441:    fn write(&mut self, b: &[u8]) -> io::Result<usize> { self.wtr.write(b) }
    454:    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
    511:    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
    848:    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
    915:    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
    949:    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
    1114:    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
    1348:    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
    1353:    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
    Dans cet exemple, l’utilisateur ne spécifie pas de fichier. En l’absence de chemin d’accès, ce que ripgrep fait par défaut est d’effectuer les recherches au sein du répertoire courant. Ici, ripgrep renvoie des définitions de fonctions trouvées au sein de fichiers dans les répertoires src et termcolor de l’arborescence des sources de ripgrep.

    L’outil est compatible avec Visual Studio Code – l’éditeur open source et multiplateformes de Microsoft – et Atom. Dans le cas de Visual Studio Code, la fonctionnalité de recherche multi lignes dont on a fait mention à l’occasion de la sortie de la version 1.29https://www.developpez.com/actu/2331...-de-Microsoft/ s’appuie sur ripgrep. Par exemple, un développeur qui a de la peine à localiser une section de code particulière peut s’en servir. Illustration avec un motif de recherche constitué des balises <body> et </body>.

    Nom : multiline.gif
Affichages : 1062
Taille : 1,04 Mo

    La version 11 de ripgrep est disponible depuis peu et marque un changement dans la numérotation de l’outil ; on passe de 0.10.0 à 11.0.0. D’après la note d’information y relative, rigrep 11 est une nouvelle version majeure à partir de laquelle les numéros feront l’objet d’incrémentations un certain nombre de fois par année.

    La disponibilité de cette nouvelle mouture fait suite à des signalements d’utilisateurs relatifs à la lenteur de l’outil lors de cas d’utilisation avec les drapeaux -f et -F. ripgrep 11 apporte réponse à ces situations où l’on fournit en même temps plusieurs motifs de recherche. D’après le développeur derrière l’outil, l’utilisation de l’une des commandes rg -f motifs de recherche ou rg -F motifs de recherche devrait déboucher sur une obtention plus rapide des résultats.

    Après la recherche récursive, l’une des fonctionnalités les plus usitées de ripgrep est celle de filtrage automatique, c’est-à-dire, celle qui permet d’indiquer à l’outil ce sur quoi une recherche ne porte pas. Avec la sortie de la version 11, Andrew Gallant annonce des améliorations en ce qui concerne la prise en charge du filtrage automatique pour Apache Thrift, ASP, Bazel, Brotli, BuildStream, bzip2, C, C++, Cython, gzip, Java, Make, Postscript, QML, Tex, XML, xz, zig et zstd.

    ripgrep : outil de recherche récursive d’expressions régulières le plus rapide ?

    Du point de vue de la vitesse, la réponse d’ après Andrew Gallant est oui. « ripgrep est plus rapide que grep, ag, git grep, ucg, pt, sift », précise-t-il. Une vingtaine de résultats de benchmark officiels de comparaison avec d’autres outils de recherche récursive d’expressions régulières est disponible. ripgrep y est comparé à différents outils de recherche sur le terrain de la recherche de motifs au sein d’une version compilée du noyau de Linux.

    Nom : wAh.png
Affichages : 953
Taille : 33,0 Ko
    Résultats de recherche du motif \wAh (mots contenant la chaîne de caractères Ah)

    Mais, des résultats de benchmark, ça se discute. Noter à ce propos que sur bon nombre de résultats proposés, ripgrep est au coude-à-coude avec Universal Code Grep (ucg) comme l’auteur finit par le reconnaître. « Prenez également en compte que ces benchmarks ont été exécutés sur une instance EC2 qui utilise une machine virtuelle, ce qui est de nature à pénaliser des outils de recherche qui s’appuient sur des cartes de la mémoire », prévient-t-il.

    Source : Notes de version

    Et vous ?

    Qu’en pensez-vous ?

    Faites-vous usage de ripgrep ? Si oui, comment le comparez-vous aux autres outils de recherche d’expressions régulières ? Est-il le plus rapide ?

    Quel est votre outil favori de recherche d’expressions régulières ? Pourquoi ?

    Voir aussi :

    La rubrique Libres & Open Source
    Contribuez au club : Corrections, suggestions, critiques, ... : Contactez le service news et Rédigez des actualités

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    juillet 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : juillet 2013
    Messages : 49
    Points : 107
    Points
    107

    Par défaut quelques précisions

    Du peux que j'ai suivi ce projet, j'ai été impressionné par la qualité de son avancement.
    L'algo est basé sur une machine à état fini.
    C'est écrit dans le langage Rust (qui est sans doute jeune en terme d'optimisation à la compilation comparé à un dinosaure comme C++) et le nombre de doc et de tests unitaires est tout simplement colossale.
    L'auteur a effectué un réel comparatif en profondeur des différents softs "équivalents".
    Il a mis en place des vrais benchmarks : travaille bien plus coûteux mais plus ingrat que l'écriture de code en lui-même.
    Une fois en place, il essai d'en tirer des leçons. Sa dernière lubie : il a identifier que manipuler des chaines de caractères en Rust avait un coût au runtime non négligeable car pleinement compatible UTF8.
    C/C++ triche d'avantage sur ce point. Résultat des courses, il crée un type string plus souple afin de gagner en perf sur ce terrain.
    La prochaine étape c'est peut-être du JIT dans la lib de regex.

    De ce que je lis ici https://github.com/gvansickle/ucg/issues/102, les auteurs respectifs de ripgrep et ucg ont plutôt tendance à se tirer vers le haut.

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/09/2017, 09h53
  2. Réponses: 0
    Dernier message: 19/11/2012, 16h52
  3. Réponses: 2
    Dernier message: 18/02/2006, 20h00
  4. Savoir si une lettre reseau est disponible en C++
    Par barthelv dans le forum Windows
    Réponses: 1
    Dernier message: 02/09/2005, 15h05
  5. DevC++ avec un nouveau MinGW est disponible
    Par HRS dans le forum Dev-C++
    Réponses: 1
    Dernier message: 28/02/2005, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo