5 points par GN⁺ 2026-02-24 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • 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.

Aucun commentaire pour le moment.