100 000 lignes de TypeScript vers Rust : retour d’expérience concret avec Claude Code
(blog.vjeux.com/2026)L’ancien ingénieur de Facebook Christopher Chedeau (Vjeux) a mené une expérience consistant à porter le moteur de combat de Pokemon Showdown (environ 100 000 lignes de TypeScript) vers Rust en s’appuyant sur Claude Code
Objectifs du projet
- Construire un oracle rapide (système de référence) pour l’entraînement d’une IA de combat Pokemon
- Implémentation TypeScript existante → trop lente (impossible d’exécuter des millions de simulations de combat)
- Langage cible : Rust (hautes performances) → mais aucune expérience préalable en Rust
Principaux résultats
- Portage d’environ 100 000 lignes terminé en 1 mois (environ 2 à 4 semaines de travail effectif)
- Environ 5 000 commits générés
- Vitesse d’exécution améliorée de 3,5x
- Taux de concordance de 99,96 % lors des tests différentiels (sur 2 millions de combats aléatoires)
- Les 0,04 % restants seraient dus à des bugs dans le code TypeScript d’origine
Stratégie clé du succès
- Adoption des tests différentiels (differential testing)
- Exécution simultanée de la version TypeScript d’origine et de la version Rust → comparaison des résultats
- En cas de divergence → affichage des logs à Claude et demande de correction
- Validation possible même avec une connaissance presque nulle de la syntaxe Rust
Principales difficultés rencontrées par Claude
- Le portage fichier par fichier fonctionne bien ↔ des problèmes fréquents apparaissent lors de l’intégration entre fichiers
- Exemple : le même concept (
move) est défini dans des structures différentes
- Exemple : le même concept (
- Limite de la fenêtre de contexte → perte d’informations importantes lors des résumés intermédiaires
- Tendance à vouloir “faire mieux” → ignore les consignes explicites de “portage ligne par ligne” et tente du refactoring → multiplication des bugs
- Demandes d’optimisation → les plans semblaient excellents, mais les gains réels étaient quasi nuls (et certains changements ont même ralenti l’exécution)
Un hack de workflow inhabituel
- Automatisation des demandes d’approbation utilisateur de Claude
- Avec AppleScript, appui automatique sur Entrée toutes les quelques secondes → exécution autonome 24 h/24
- (Risque de sécurité assumé, car il s’agissait d’un oracle à usage ponctuel)
Où en sont les outils de codage IA aujourd’hui ?
- Transformations mécaniques et portages massifs → très efficaces
- Optimisation des performances, conception d’architecture et autres tâches de haut niveau → encore insuffisants
- Débat sur Hacker News
- Sceptiques : code impossible à maintenir, “qui compile seulement”
- Défenseurs : les tests différentiels suffisent à le rendre fiable + gain de temps énorme par rapport à un humain
3 enseignements pour la pratique
- Un système de tests automatisés rigoureux est indispensable (sans tests différentiels, la probabilité d’échec est très élevée)
- Des consignes claires et étroitement cadrées sont les plus efficaces (“portage ligne par ligne” O vs “améliore ça” X)
- L’IA n’est qu’un outil → le développeur doit toujours diagnostiquer les problèmes, formuler les bonnes questions et garder le cap
→ Le cas d’une personne ne connaissant pas Rust qui parvient à porter en un mois une base de code de 100 000 lignes à un niveau exploitable en pratique constitue à la fois une preuve de la viabilité du codage assisté par IA et une expérience représentative qui en montre clairement les limites
1 commentaires
Cela néglige le fait que l’écriture de cas de test n’est pas une solution miracle. Le simple bon fonctionnement des entrées et sorties ne fait pas tout. Au final, il faudra quand même repasser en revue ces 10000 lignes.