5 pontos por darjeeling 2026-02-05 | 1 comentários | Compartilhar no WhatsApp

Resumo:

  • Aborda o processo de substituir completamente o parser da linguagem C pycparser, que por quase 20 anos funcionou com base em PLY (Python Lex-Yacc), por um parser Recursive Descent escrito manualmente com a ajuda de um agente de código LLM (Codex).
  • O trabalho resultou na remoção da dependência externa (PLY), redução da dificuldade de manutenção e melhoria de 30% no desempenho, comprovando a utilidade prática de LLMs em refatorações de grande porte de código legado.
  • Enfatiza a importância da revisão iterativa por desenvolvedores humanos e da engenharia de prompts para resolver problemas de qualidade no código gerado por LLMs, como legibilidade e complexidade.

Resumo detalhado:

  1. Contexto e motivação
    pycparser é um importante projeto open source com cerca de 20 milhões de downloads por dia. Antes, ele usava a biblioteca PLY para processar a gramática C99, mas os seguintes problemas foram se acumulando:
  • Problema de dependência: como a biblioteca PLY deixou de ser mantida (Archived), surgiram riscos de segurança e manutenção.
  • Complexidade da gramática: ao oferecer suporte a padrões mais recentes, como C11 e C23, além de extensões de gramática, os conflitos reduce-reduce característicos do YACC se tornaram frequentes, dificultando a expansão.
  • Mudança filosófica: com o tempo, o autor passou a se convencer de que um parser Recursive Descent escrito diretamente é mais vantajoso em termos de compreensão e manutenção do que um Parser Generator.
  1. Processo de colaboração com o LLM (Codex)
    O autor decidiu delegar ao LLM esse trabalho, que estimava levar mais de uma semana se fosse feito sozinho. A robusta suíte de testes do pycparser, com mais de 2.500 linhas, serviu como um "guardrail" para validar os resultados do LLM.
  • Migração inicial: com o prompt "mantenha o lexer e troque apenas o parser por Recursive Descent", o Codex trabalhou por mais de uma hora e produziu um protótipo que passava nos testes.
  • Melhorias iterativas: o código inicial era funcionalmente perfeito, mas deixava a desejar em qualidade, com baixa legibilidade e uso excessivo de tratamento de exceções no controle de fluxo. O autor refinou o código por meio de dezenas de commits, usando ativamente branches do Git.
  1. Resultados e lições
  • Melhoria de desempenho: o parser escrito manualmente mostrou desempenho cerca de 30% superior ao da versão anterior baseada em YACC.
  • Qualidade do código e manutenção: LLMs tendem a escrever código preguiçoso ou complexo, mas responderam bem quando o desenvolvedor deu instruções claras, como "mude X para Y" e "adicione comentários".
  • Importância da tipagem estática: em trabalhos posteriores, ao adicionar Type Annotation em Python, a precisão das sugestões do LLM aumentou. O autor previu que agentes de código terão desempenho ainda mais forte em linguagens fortemente tipadas, como Rust e TypeScript.
  1. Conclusão
    Com este projeto, o autor concluiu que LLMs não são apenas brinquedos, mas ferramentas capazes de aumentar a produtividade real em mais de 10 vezes. Um trabalho que levaria cerca de 30 a 40 horas foi concluído em apenas 4 a 5 horas, e o valor do LLM como catalisador para ajudar desenvolvedores a entrar em estado de flow foi altamente valorizado.

1 comentários

 
ng0301 2026-02-05

Só o fato de ter achado, desde o começo, que daria para fazer esse trabalho em 30~40 horas já é coisa de veterano...