ast-grep ha abordado una de las tareas más ambiciosas del ecosistema de herramientas para desarrolladores: reescribir en Rust el núcleo en C de Tree-sitter, el framework de análisis sintáctico sobre el que se apoyan numerosos editores y proyectos. El resultado, según publica el autor en un post detallado, es un Tree-sitter alternativo alojado en el repositorio HerringtonDarkholme/tree-sitter que rinde cerca de un 30% más en las pruebas aisladas de análisis sintáctico y alrededor de un 22% menos de tiempo de CPU de usuario en la carga real de ast-grep (extraer el esquema estructural de un repositorio completo).
El nuevo núcleo sacrifica parte de la compatibilidad original: se eliminan la carga nativa de lenguajes compilados a WebAssembly y la reutilización incremental de árboles previos, dos características pensadas para editores interactivos. Se mantienen, en cambio, la compatibilidad binaria y con los lenguajes y gramáticas ya generados, algo clave para no romper el ecosistema construido alrededor de Tree-sitter. El precio a pagar es un uso de memoria algo mayor en el flujo de ast-grep y la persistencia de bloques unsafe y punteros en bruto.
La motivación principal no fue estética, sino de rendimiento: por mucho que ast-grep optimizase sus reglas, cada archivo debía convertirse antes en un árbol sintáctico, y ese paso, ejecutado por Tree-sitter, se había convertido en su cuello de botella. El proyecto pasó por varias fases, una traducción inicial 1:1 con ayuda de ChatGPT, un intento de optimización agresivo que hubo que revertir y, finalmente, una simplificación del runtime que aportó las ganancias reales. El autor describe la arquitectura de Tree-sitter (analizadores GLR con pila estructurada como grafo, operaciones shift/reduce y subárboles compartidos entre historias) y explica por qué optimizar solo el nacimiento de los nodos sin tocar el resto de su ciclo de vida fue una lección costosa.
