• Google Libera Biblioteca de Expressões Regulares RE2 para C++

    O Google acaba de liberar a RE2, uma biblioteca de expressões regulares para a linguagem de programação C++, baseada na teoria de autômatos, com capacidade de uso limitado da pilha e alta performance. As expressões regulares foram introduzidas pela primeira vez em 1970 por Ken Thompson, como uma forma de descrever padrões de texto em seu editor de texto QED. Desde então, as expressões regulares foram incorporadas de forma profunda na cultura Unix, em ferramentas como ed, sed, grep, egrep, awk e lex, além de estar embarcada no núcleo de linguagens como Perl, Python e JavaScript. As expressões regulares também se tornaram parte da cultura geek.


    O Google faz uso de expressões regulares através de sua infra-estrutura e aplicações, porém tem notado que implementações comuns foram baseadas em uma busca em modo backtrack (de retorno).


    Saiba Mais:

    [1] Heise Online: http://www.h-online.com/open/news/it...-C-954000.html
    Comentários 3 Comentários
    1. Avatar de osmano807
      osmano807 -
      Engraçado, fui fazer um benchmark pra ver qual implementação era melhor: GNU, Boost::Xpressive ou RE2.

      Regex:
      Código :
      ([a-zA-Z0-9]){8}-([a-zA-Z0-9]){4}-([a-zA-Z0-9]){4}-([a-zA-Z0-9]){4}-([a-zA-Z0-9]){12}
      String para match:
      Código :
      http://img4.catalog.video.msn.com/Image.aspx?uuid=be0857c3-a54d-4b74-bfae-bdf9013315bf&w=112&h=84
      (tempos em segundos)

      Boost::Xpressive teve o seguinte resultado
      Código :
      tempo função: 9.54116 tempo médio por execução: 9.54116e-05
      Já o GNU, consumia a memória indefinidamente, até o kernel dar kill no processo . Pode ser minha função que esteja errada, sei lá, mas ela nunca deu problema

      Já essa RE2:
      Código :
      tempo função: 33.2502 tempo médio por execução: 0.000332502
      Enquanto Boost::Xpressive e GNU retornavam a string marcada, RE2 retornou true ou false, e mesmo assim foi mais lenta (GNU perdeu por estouro de memória?, sei lá hehe)

      Código compilado com
      Código :
      g++ -O3 -s -march=native -mtune=native -msse3 -mssse3 -Wall -Wextra function_profiler.cpp -o function_profiler -lre2 -lpthread
      Já o source do function_profiler, segue a parte importante:
      Código :
      tempo1 = now();
      for(unsigned int iii = 100000; iii != 0; iii--) {
              função_sendo_avaliada_no_momento;
          }
      tempo2 = now();
       cout << "tempo função: " << tempo2 - tempo1 << " tempo médio por execução: " << (tempo2 - tempo1)/100000 << endl;

      Conclusão: continuo com Boost:Xpressive. Mais rápido, e API superior
    1. Avatar de code
      code -
      No mínimo curioso... :-)
    1. Avatar de GNU Fanboy
      GNU Fanboy -
      @osmano807: não é curioso não cara, é marketing puro ehehehehe

      Eles lançam uma lib nova e fazem muita propaganda sobre, dai os sites replicam e logo a deles (que nem é tão boa assim) fica sendo conhecida como a melhor. Somente caras com a sua iniciativa para identificar os fatos como são.

      Parabéns e continue assim!!

      [ ]s
    + Enviar Comentário