Contexte et objectifs

L’auteur a réécrit un projet de 65 000 lignes de code Go, nommé rune, en Rust en dépensant seulement 400 $. Le projet rune est un éditeur terminal destiné aux agents LLM, combinant les fonctionnalités d’Obsidian et de VS Code. Le coût limité provient de l’utilisation de Fable 5, un cadre d’automatisation basé sur les grands modèles de langage (LLM) capable de transformer du code d’un langage à un autre.

Le point de départ était la volonté de réduire la dette technique liée à Go et d’exploiter les garanties de sécurité mémoire de Rust, tout en maîtrisant le budget. Aucun investissement en licences ou en heures de développeur n’a été requis au‑delà du tarif de l’API LLM.

Méthodologie de migration avec Fable

Fable suit un processus en trois phases : extraction de la représentation du code, manipulation de cette représentation, puis génération du code cible. Cette approche repose sur la capacité des LLM à raisonner sur des structures abstraites comme des graphes ou des machines d’états.

1. Extract the data representation
2. Operate on the representation
3. Put the representation back into code

Lors de l’étape d’extraction, le code Go est converti en graphes de dépendances, ontologies de types et diagrammes UML. L’étape d’opération permet de simplifier ces graphes, par exemple en réduisant le nombre d’états d’une machine ou en éliminant des canaux de communication implicites. Enfin, la phase de génération produit du code Rust, en respectant les conventions idiomatiques du langage.

Fable intègre des outils internes tels que Glob, Grep et WebSearch, fournis par Claude Code, pour enrichir le contexte de transformation et récupérer des références externes. Cette combinaison d’outils réduit la dépendance à des scripts manuels et accélère le cycle de refactorisation.

Analyse des performances et des coûts

Le coût total de 400 $ correspond essentiellement aux appels d’API LLM nécessaires aux trois phases. En comparaison, un effort humain de même ampleur aurait exigé plusieurs centaines d’heures de développeur, estimées à plusieurs dizaines de milliers de dollars. Le gain économique est donc substantiel, mais il faut nuancer avec la qualité du code généré.

Sur le plan technique, la conversion a permis de conserver la logique métier tout en bénéficiant du système d’emprunt de Rust, éliminant ainsi les risques de segmentation fault fréquents en Go. Cependant, la génération automatique ne garantit pas l’optimisation des performances à l’échelle du processeur ; des ajustements manuels restent nécessaires pour les sections critiques.

Limites et perspectives

La méthode repose sur la précision du modèle LLM. Les erreurs de traduction de types complexes ou de gestion de lifetimes peuvent passer inaperçues sans revue humaine, ce qui impose un processus de validation post‑migration. De plus, la documentation fournie par Fable ne détaille pas les métriques de couverture de tests, ce qui rend difficile l’évaluation de la robustesse du code Rust généré.

À l’avenir, l’intégration de vérifications automatiques (ex. : tests unitaires générés, analyse statique) pourrait combler ces lacunes. Le succès de ce projet montre que les agents LLM, lorsqu’ils sont orchestrés via un cadre comme Fable, peuvent réaliser des migrations de grande ampleur à coût réduit, à condition de prévoir une phase de contrôle qualité rigoureuse.