GBR: ADR-0003 Analisador Léxico (Parser) Recursivo de Multiaddr sem Expressões Regulares | Wiki
Documentação de engenharia e especificações técnicas da Gleam-BR.
GBR: ADR-0003 Analisador Léxico (Parser) Recursivo de Multiaddr sem Expressões Regulares
- *Status:* Aceito
- *Data:* [Data Atual]
*Contexto:*
O endereçamento de recursos na malha é baseado na especificação Multiaddr (ex: /ip4/127.0.0.1/tcp/4001/p2p/QmPeer...). Analisar (parsear) estas strings usando Expressões Regulares (Regex) gera picos agressivos no Coletor de Lixo (Garbage Collection) da Erlang VM e custa ciclos computacionais elevados, o que afeta drasticamente instâncias que suportam milhares de conexões em alta frequência (1M req/s).
*Decisão:*
-
*Recursive Descent Lexer:* Aboliu-se integralmente a engine de Regex. Implementou-se um parser O(N) construído com Tipos de Dados Algébricos (ADT) puros no arquivo
multiaddr.gleam. -
*Tail-Call Optimization (TCO):* O parser divide o endereço na raiz via função C subjacente (
string.split(addr, "/")) e consome os tokens na lista de forma recursiva avançando com Pattern Matching explícito de tuplas. Essa abordagem nativa impede o aumento do quadro de pilhas (Stack Overflow) operando funcionalmente como um GOTO no Assembly. -
*Abordagem Fail-Fast:* A qualquer detecção de lixo topológico no endereço (um bloco não mapeado como
ip4,tcp,p2p), o Analisador finaliza instantaneamente todo o fluxo de matching devolvendo um objetoError(Fast Return).
*Consequências:*
- *Positivas:* Redução monumental do custo algorítmico da decodificação de rotas e mitigação de vulnerabilidades a ReDOS (Regular Expression Denial of Service) - fundamental em topologias Zero-Trust expostas à internet pública.
-
*Negativas/Riscos:* Expansão futura de suporte a novos transportes da especificação Multiaddr (ex:
quic,ws,dns4) exigirá atualizações manuais estritas e novos ramos de teste no motor de padrão do código.