Présentation

AST-grep a réécrit le noyau C de Tree-sitter en Rust, avec l'aide de l'IA pour écrire le code. Le nouveau noyau est plus rapide pour l'analyse, la lecture de l'arbre complet et l'exécution d'AST-grep. La vitesse a augmenté de 30% pour le parseur seul et de 22% pour l'exécution complète d'AST-grep.

Architecture de Tree-sitter

Tree-sitter prend du code source et produit un arbre de syntaxe. Chaque langage supporté commence par une définition de grammaire que Tree-sitter compile en tables de parsing générées et en code de lexer. Au moment de l'exécution, un lexer transforme les caractères en jetons tels que des identificateurs, des opérateurs et des nombres. Le parseur utilise ensuite la table générée et une pile pour décider de la signification de chaque jeton.

Optimisation et performances

Les performances et la mémoire ont été mesurées pour les versions C et Rust de Tree-sitter. Les résultats montrent que la version Rust est plus rapide et utilise un peu plus de mémoire. La version Rust a gagné dans tous les tests de parseur et de parcours, et AST-grep a produit les mêmes résultats. La mémoire est le compromis : la version Rust utilise environ 8 MiB de plus dans l'exécution d'AST-grep.

Implémentation et résultats

L'implémentation de Tree-sitter en Rust a été faite en plusieurs étapes, en commençant par la traduction du code C en Rust, puis en optimisant les performances. Les résultats montrent que la version Rust est plus rapide et plus efficace que la version C. La réécriture de Tree-sitter en Rust a permis d'améliorer les performances d'AST-grep et de réduire la mémoire utilisée.