1 pontos por GN⁺ 2023-07-06 | 1 comentários | Compartilhar no WhatsApp
  • Existe o autor do regex crate de Rust, que melhorou e otimizou a biblioteca de expressões regulares do Rust.
  • Foi criado um novo crate chamado regex-automata, que expõe as partes internas do regex crate como uma API separada.
  • Esta é a primeira biblioteca de expressões regulares a expor tanto de sua implementação interna em uma biblioteca com versionamento separado.
  • Este artigo apresenta o processo de reescrita para melhoria, como os problemas foram resolvidos e um guia da API do regex-automata.
  • O público-alvo são programadores Rust e qualquer pessoa interessada em como implementar mecanismos de regex baseados em autômatos finitos.
  • O artigo oferece um breve histórico do regex crate e de seu desenvolvimento.
  • Entre os problemas enfrentados pelo regex crate estavam configuração, testes, pedidos de APIs específicas e a necessidade de DFAs totalmente compilados.
  • A reescrita resolve esses problemas e oferece uma solução mais flexível e otimizada.
  • Ao publicar o regex-automata como um crate separado, torna-se possível experimentar e desenvolver APIs adicionais sem deixar o regex crate principal confuso.
  • O artigo destaca os benefícios de usar o regex-automata e o potencial de melhorias no campo dos mecanismos de regex.
  • O artigo descreve o programa regex-cli, que fornece acesso por linha de comando à API do regex crate.
  • Esse programa inclui utilitários como serializar DFAs compilados em arquivos e gerar código Rust.
  • O artigo mostra exemplos do impacto do Unicode em padrões de regex.
  • O programa regex-cli pode depurar e exibir vários tipos de dados do ecossistema do regex crate.
  • Existe o comando regex-cli find, que permite executar buscas com múltiplos padrões usando grupos de captura.
  • O artigo explica o fluxo de dados dentro do mecanismo de regex, desde a análise do padrão até a construção do NFA.
  • A extração de literais é uma técnica importante de otimização usada no regex crate.
  • Extração de literais significa extrair literais de um padrão de regex para identificar rapidamente candidatos a correspondência no texto pesquisado.
  • Escolher quais literais procurar é importante para minimizar falsos positivos e reduzir a latência.
  • A extração de literais é um processo heurístico para minimizar falsos positivos e o impacto na latência.
  • As orientações para extração de literais são priorizar literais mais longos e evitar literais extremamente curtos ou muito comuns.
  • O artigo explica a otimização de sequências literais em regex.
  • Sequências literais são sequências de strings tratadas como cadeias de correspondência exata.
  • Durante a otimização, são identificadas sequências que podem se tornar infinitas para melhorar o desempenho.
  • O artigo explica como regexes diferentes podem gerar sequências literais diferentes.
  • O artigo também discute o processo de buscar literais no texto pesquisado.
  • Algoritmos diferentes são usados para busca de uma única substring e de múltiplas substrings.
  • O artigo introduz o conceito de NFAs (autômatos finitos não determinísticos) e seu papel em mecanismos de regex.
  • NFAs podem ser convertidos para outros tipos, por exemplo para implementar DFAs (autômatos finitos determinísticos).
  • O artigo fornece e explica exemplos detalhados dos componentes de um NFA.
  • O artigo menciona otimizações no novo compilador de NFA para reduzir o uso de transições epsilon.
  • O novo compilador de NFA otimiza a representação do NFA usando estados esparsos que incluem vários intervalos de bytes.
  • Essa otimização reduz a sobrecarga e elimina a necessidade de transições epsilon.
  • O NFA orientado a bytes usado no compilador anterior era lento e exigia compilação separada para Unicode e para NFA orientado a bytes.
  • O novo compilador de NFA trata classes Unicode integrando um autômato UTF-8 ao NFA orientado a bytes.
  • O novo compilador usa o algoritmo de Daciuk para calcular DFAs mínimos a partir de sequências ordenadas de elementos não sobrepostos.
  • Transições reversas são tratadas com uma estrutura de dados especial chamada range trie.
  • O novo compilador de NFA gera NFAs com menos estados e sem transições epsilon em comparação com o compilador anterior.
  • É possível reduzir ainda mais o tamanho do NFA usando a otimização de redução reversa, embora isso aumente o tempo de build.
  • No geral, o novo compilador de NFA melhora o desempenho e simplifica o tratamento de classes Unicode em regex.
  • O artigo discute questões técnicas relacionadas à codificação de caracteres.
  • O problema está ligado a caracteres esparsos e à sua representação em diferentes formatos de codificação.
  • O artigo menciona caracteres específicos e sua frequência em determinadas codificações.
  • O artigo destaca a complexidade da codificação de caracteres e os desafios em potencial.
  • O artigo pode ser interessante para engenheiros de software e desenvolvedores que trabalham com codificação de caracteres.
  • O artigo discute técnicas de otimização de NFA em mecanismos de regex.
  • O Thompson NFA é conhecido por escalar mal por causa das transições epsilon.
  • O artigo apresenta uma otimização de NFA que reduz transições epsilon ao limitar alternâncias de literais.
  • O novo compilador de NFA cria uma trie de literais e a converte em um NFA com transições epsilon minimizadas.
  • Essa otimização preserva a prioridade da esquerda para a direita e melhora o desempenho da busca.
  • O artigo também menciona trabalhos futuros sobre NFA de Glushkov e armazenamento de NFAs em uma única alocação contígua.
  • O regex crate de Rust usa vários mecanismos de regex para equilibrar funcionalidades e desempenho de busca.
  • O PikeVM é o mecanismo de regex mais poderoso do crate e oferece suporte a todos os recursos de regex.
  • O PikeVM simula o NFA

1 comentários

 
GN⁺ 2023-07-06
Comentários do Hacker News
  • O crate regex de Rust é lendário e uma ferramenta valiosa para a comunidade.
  • Este artigo se aprofundou nas mudanças e melhorias do crate regex.
  • Expressões regulares são ferramentas poderosas que podem realizar tarefas complexas rapidamente.
  • Este artigo recomendou um livro para dominar expressões regulares.
  • Em 2001, o editor Komodo tinha um depurador de expressões regulares de ponta.
  • O Ripgrep é uma ferramenta que dá vida à busca em código e arquivos de texto.
  • Um comentarista sugeriu expandir os recursos de expressões regulares para que possam ser usados com listas, e não apenas com strings.
  • O crate regex-automata é compatível com todas as estruturas de dados de texto.
  • Um comentarista elogiou o trabalho de BurntSushi e expressou sua gratidão.
  • Automa.jl é um mecanismo de expressões regulares em Julia puro que permite a inserção de código Julia arbitrário.