- Le projet de navigateur Ladybird adopte Rust comme langage à sûreté mémoire pour remplacer le C++, et utilise des outils d’IA dans le processus de transition
- Swift avait d’abord été envisagé, mais le projet s’est tourné vers Rust en raison de limites d’interopérabilité avec le C++ et de contraintes de plateforme
- La première cible du portage est LibJS, le moteur JavaScript, avec une traduction manuellement pilotée au moyen de centaines de prompts via Claude Code et Codex
- Environ 25�00 lignes de code Rust ont été produites en à peine deux semaines, et il a été vérifié que la sortie comme les performances sont strictement identiques à la version C++
- Le projet conservera pour l’instant un développement parallèle en C++ et en Rust, avec l’objectif à long terme de renforcer la sûreté et la maintenabilité
Pourquoi adopter Rust
- Ladybird a étudié plusieurs langages afin de trouver un langage à sûreté mémoire pour remplacer le C++
- Swift a été écarté en raison du manque d’interopérabilité avec le C++ et des limites de prise en charge hors de l’écosystème Apple
- Rust a été évalué comme un langage doté d’un écosystème mature pour la programmation système, et déjà familier à une grande partie des contributeurs
- En 2024, son adoption avait été reportée à cause de la mauvaise adéquation de Rust avec l’OOP de style C++, mais la décision a ensuite été réintroduite au nom de la sûreté et de la maturité de l’écosystème
- En s’appuyant sur les précédents de Firefox et Chromium, l’équipe a jugé que Rust convenait aussi à Ladybird
Processus de portage de LibJS
- La première cible de la transition est LibJS, le moteur JavaScript de Ladybird
- Avec ses composants indépendants comme le lexer, parser, AST, bytecode generator et sa couverture de tests basée sur test262, il constituait un bon point de départ
- Le portage a utilisé Claude Code et OpenAI Codex
- Il ne s’agit pas d’une génération automatique, mais d’une traduction pilotée par des humains, avec choix direct de l’ordre de portage et de la structure du code
- Des instructions détaillées ont été données via des centaines de prompts, puis la validation du code et la détection d’erreurs ont été effectuées à l’aide de différents modèles
Résultats et validation
- L’objectif était que les sorties des pipelines C++ et Rust soient identiques octet par octet
- Environ 25�00 lignes de code Rust ont été finalisées en deux semaines, raccourcissant un travail qui aurait pris plusieurs mois
- L’AST et le bytecode sont strictement identiques, sans aucune baisse de performance sur les tests et benchmarks JS
- La concordance des résultats pendant la navigation web a été vérifiée via des tests en lockstep exécutant simultanément les pipelines C++ et Rust
- Le code actuel conserve une forme traduite depuis le C++ et reproduit même les schémas d’allocation de registres
- La priorité absolue est en effet de garantir la compatibilité avec le pipeline C++
- Lorsque viendra le moment d’abandonner le pipeline C++, le code Rust sera simplifié et nettoyé
Suite du projet
- La transition vers Rust avance comme un travail parallèle, et non comme l’axe principal de développement du projet
- Le code C++ et le code Rust coexisteront, avec des frontières d’interopérabilité clairement définies
- L’ordre et le périmètre du portage sont pilotés par l’équipe principale, et les contributeurs externes doivent se coordonner au préalable
- À long terme, le projet vise une amélioration progressive de la sûreté et de la maintenabilité
- Tout en reconnaissant que cette décision peut être controversée, l’équipe l’évalue comme le bon choix pour l’avenir de Ladybird
Aucun commentaire pour le moment.