La réécriture de Bun en Rust est une prouesse impressionnante

MMaximilian Schwarzmüller
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00BUN a été porté de SIG vers Rust.
00:00:02Vous en avez probablement déjà entendu parler,
00:00:04mais il y a beaucoup de choses à analyser ici.
00:00:06Il y a eu beaucoup de remue-ménage la semaine dernière,
00:00:08mais il se passe beaucoup de choses intéressantes.
00:00:10Et peu importe si vous vous intéressez à BUN, SIG ou Rust,
00:00:14c'est vraiment intéressant.
00:00:15Notamment sur la façon dont l'IA a été mise à profit
00:00:18et ce que cela pourrait signifier pour des projets similaires
00:00:20dans notre industrie en général.
00:00:22Maintenant, juste une petite parenthèse,
00:00:24j'apprécie personnellement pas mal BUN.
00:00:26C'est mon environnement d'exécution JavaScript par défaut
00:00:29pour la plupart de mes projets.
00:00:30Et en fait, par une heureuse coïncidence,
00:00:32j'ai publié un tout nouveau cours sur BUN la semaine dernière.
00:00:35Et cela fonctionne évidemment pour la version Rust
00:00:37tout comme pour la version SIG.
00:00:39Donc, si vous voulez approfondir un peu BUN
00:00:41et découvrir toutes les API principales qu'il a à offrir,
00:00:44car c'est l'un des plus grands avantages de BUN,
00:00:46d'avoir autant de fonctionnalités intégrées.
00:00:48Certains n'aiment pas ça, moi j'adore.
00:00:50Si vous voulez en savoir plus à ce sujet,
00:00:51ce cours pourrait vous intéresser.
00:00:53Mais examinons maintenant de plus près
00:00:54le calendrier global du portage, voulez-vous ?
00:00:58C'est arrivé il y a deux mois en fait.
00:01:01L'article de blog a été publié la semaine dernière en juillet,
00:01:04mais le portage lui-même a eu lieu en mai.
00:01:08Et cela a commencé début mai
00:01:10lorsque la branche CloudFaserPort a été découverte
00:01:13sur le dépôt GitHub officiel de BUN.
00:01:15Cette branche contenait un fichier de portage MD,
00:01:18un fichier Markdown avec des instructions
00:01:21sur la façon de convertir du code SIG en code Rust,
00:01:23comment porter ce code, des tables de traduction,
00:01:27et des instructions générales.
00:01:28Et nous reviendrons sur la façon dont ce fichier a été créé,
00:01:30car bien sûr, l'IA était impliquée,
00:01:32comme vous pouvez le deviner, un peu plus tard.
00:01:34C'est ce qui a été découvert.
00:01:36Naturellement, des discussions s'en sont suivies sur Hacker News et X.
00:01:40Certains étaient enthousiastes à ce sujet.
00:01:43D'autres étaient très critiques.
00:01:46Mais à ce moment-là, nous ne savions pas grand-chose.
00:01:47Évidemment, il y a beaucoup de polarisation autour de Rust.
00:01:52Il y a des gens qui adorent Rust, comme moi.
00:01:55Il y a des gens qui détestent Rust.
00:01:57Il y a des gens qui détestent
00:01:58que tout devrait être réécrit en Rust,
00:02:00car très souvent, on lit
00:02:03que les gens veulent que le programme XYZ soit réécrit en Rust.
00:02:06Et je comprends que ce soit agaçant.
00:02:08Mais naturellement, donc,
00:02:09il y avait beaucoup de polarisation à ce sujet.
00:02:11Mais le portage n'avait pas encore eu lieu.
00:02:15Cela a changé plus tard en mai.
00:02:16Et le 14 mai, une pull request officielle a été ouverte,
00:02:22puis également fusionnée,
00:02:24qui a effectivement migré la base de code BUN,
00:02:28entièrement, de Zig vers Rust.
00:02:30Maintenant, comme vous pouvez le voir, c'est une énorme pull request.
00:02:32Plus d'un million de lignes de code ont été ajoutées.
00:02:35Et la suppression du code Zig a eu lieu
00:02:39à une étape différente.
00:02:40Donc oui, c'est pourquoi ce n'est pas un simple échange.
00:02:42Mais c'est un changement énorme, comme vous pouvez le voir,
00:02:44avec près de 7 000 commits.
00:02:46Maintenant, naturellement, ce code n'a pas été revu par des humains,
00:02:51du moins pas entièrement.
00:02:52Il a été revu par une IA.
00:02:54Il y avait des tests réussis, mais il n'a pas été revu par des humains.
00:02:59Et nous reviendrons sur la façon dont l'IA a été utilisée dans une seconde.
00:03:02Mais cela a été publié ou fusionné.
00:03:06Et bien sûr, d'autres discussions ont suivi maintenant.
00:03:08Comme je viens de le mentionner, il n'a pas été revu par des humains.
00:03:10C'est impossible à faire dans ce laps de temps, bien sûr.
00:03:14Mais la communauté s'y est plongée et a jeté un œil
00:03:17et a analysé certaines parties.
00:03:19Et puis il y a eu un autre, ou un premier article de blog,
00:03:23pas l'officiel sur tous les détails,
00:03:25mais un premier article de blog ou déclaration publié par l'équipe de Bun
00:03:29à propos de l'utilisation de “unsafe”.
00:03:32Parce qu'une critique majeure apparue après cette pull request
00:03:37est que le code Rust qui s'y trouvait n'était pas du Rust idiomatique.
00:03:41Ce n'était pas le genre de code Rust que vous écririez
00:03:44si vous construisiez cela à partir de zéro.
00:03:46Au lieu de cela, c'était vraiment comme une traduction du Zig vers le Rust.
00:03:50Et cela signifiait que toutes les meilleures pratiques
00:03:54et motifs de Rust n'étaient pas utilisés.
00:03:55Et surtout, il y avait une quantité décente
00:03:58d'utilisation de “unsafe” dedans.
00:04:00Maintenant, pour comprendre “unsafe”, vous devez comprendre
00:04:03comment Rust gère la mémoire.
00:04:05parce que c'est l'un de ses plus grands avantages,
00:04:08et c'est assez différent des autres langages.
00:04:10Car dans la plupart des langages, vous avez soit un ramasse-miettes,
00:04:14qui est un processus qui détecte essentiellement
00:04:16quand une valeur n'est plus utilisée nulle part dans le programme
00:04:19puis libère la mémoire, ce qui est pratique,
00:04:21mais consomme des ressources supplémentaires.
00:04:24Ou bien vous devez le faire vous-même.
00:04:26Dans des langages comme le C, par exemple,
00:04:28vous devez allouer et libérer la mémoire manuellement.
00:04:31Et c'est pareil en Zig.
00:04:33Vous pouvez y allouer de la mémoire, mais vous devez aussi appeler free
00:04:37ou vous devez la libérer quand vous n'en avez plus besoin.
00:04:40Vous pouvez utiliser defer, ce qui est pratique.
00:04:43Cela signifie essentiellement que vous pouvez l'appeler
00:04:47avant qu'elle ne soit réellement exécutée.
00:04:49Elle est différée et sera appelée automatiquement
00:04:52à la fin de la portée, en substance.
00:04:55Et c'est bien parce qu'il existe différentes situations
00:04:58où une valeur peut ne plus être nécessaire.
00:05:00Mais quand même, lorsque vous devez nettoyer la mémoire manuellement,
00:05:04il y a de nombreuses situations
00:05:05où vous pouvez vous tirer une balle dans le pied.
00:05:07Vous avez un contrôle plus précis
00:05:09et cela peut être très utile, très efficace,
00:05:11mais il est aussi facile d'oublier des situations
00:05:15dans des programmes plus complexes
00:05:16où vous pourriez ne pas nettoyer la mémoire,
00:05:19provoquant ainsi une fuite de mémoire,
00:05:20ou là où vous pourriez nettoyer deux fois,
00:05:23ce qui causera également une erreur.
00:05:25Et c'est pourquoi il existe un compromis.
00:05:27Et Rust a une approche différente.
00:05:30Dans Rust, vous avez le concept de propriété,
00:05:32ce qui signifie que chaque valeur a exactement un propriétaire,
00:05:36et elle est liée à une portée.
00:05:38Donc, si vous avez une portée,
00:05:39et vous pouvez créer une portée en utilisant des accolades,
00:05:41ou une fonction aura également sa propre portée.
00:05:43Vous connaissez peut-être ce concept en JavaScript.
00:05:46Si vous avez une portée,
00:05:47alors lorsqu'une valeur y est créée,
00:05:49elle appartient à cette portée.
00:05:51Et si la portée se termine, elle est libérée.
00:05:53Et cela est bien sûr très pratique
00:05:55car vous n'avez pas à vous soucier de la libérer.
00:05:58Vous n'avez pas non plus de ramasse-miettes.
00:06:00Au lieu de cela, vous avez cette règle claire.
00:06:02Cela peut mener à une certaine complexité dans les programmes plus complexes
00:06:05où vous devez transmettre des valeurs.
00:06:07Vous pouvez le faire dans Rust,
00:06:08mais cela demande une autre façon de penser.
00:06:11Mais cela vous apporte bien sûr la sécurité mémoire,
00:06:14à moins d'utiliser le mot-clé unsafe.
00:06:19Si vous l'utilisez, vous pouvez créer une portée unsafe.
00:06:22Et là-dedans, ces règles ne s'appliquent plus.
00:06:24C'est alors votre travail de vous assurer
00:06:26que la mémoire est gérée de manière appropriée.
00:06:28Pourquoi feriez-vous cela ?
00:06:29Eh bien, par exemple,
00:06:31si vous importez une bibliothèque C,
00:06:33ce que vous pouvez faire dans Rust,
00:06:34vous pouvez intégrer du code C, pour ainsi dire,
00:06:37ou appeler des méthodes et fonctions de bibliothèques C,
00:06:40puisque le C est naturellement non sécurisé,
00:06:44le code où vous faites appel à ce code C est également non sécurisé.
00:06:48Vous avez donc besoin de cette fonctionnalité pour interagir avec notre code unsafe.
00:06:52Et c'est aussi une chose qu'ils ont notée
00:06:54dans cette déclaration officielle,
00:06:56que toutes ces utilisations unsafe dans la base de code
00:07:00étaient en bonne partie liées à des appels,
00:07:04à d'autres bibliothèques, des bibliothèques C, et ainsi de suite,
00:07:07ce qui ne changera pas.
00:07:08Mais ils ont aussi identifié des zones
00:07:10où ils pouvaient réellement améliorer le code
00:07:13et se débarrasser du unsafe.
00:07:14Et ils ont mentionné qu'ils feraient cela
00:07:15dans des pull requests ultérieures.
00:07:18Ils l'ont fait et continuent de le faire.
00:07:20Vous pouvez donc considérer ce portage initial
00:07:22comme un point de départ,
00:07:24qui a ensuite été raffiné au fil du temps.
00:07:26Il convient tout de même de mentionner que cette pull request initiale,
00:07:28ou cette énorme pull request,
00:07:30avait déjà des tests qui passaient.
00:07:32Donc c'était stable, les tests passaient,
00:07:35mais le code n'avait pas la qualité
00:07:37que vous attendriez peut-être s'il avait été écrit en Rust
00:07:40depuis le début, car ce n'était pas l'objectif.
00:07:43C'était donc le 21 mai.
00:07:45Puis, il y a eu le silence.
00:07:46Et il vaut aussi la peine de noter que cette version de Bun
00:07:49n'était pas encore sortie.
00:07:50Et au moment où j'enregistre ceci, elle n'est toujours pas en ligne.
00:07:52Quand vous installez Bun en ce moment,
00:07:54vous obtenez toujours la version Zig,
00:07:56mais cela devrait changer d'un jour à l'autre.
00:07:58Mais ensuite, le 8 juillet,
00:07:59le billet de blog officiel a été publié,
00:08:02où nous trouvons beaucoup de détails intéressants
00:08:04sur ce portage.
00:08:06Et ça vaut vraiment la peine d'être lu.
00:08:07Je vais le mettre en lien ci-dessous
00:08:08car il y a beaucoup à apprendre ici.
00:08:11Ce portage entier, et ce n'est pas un secret,
00:08:13a été réalisé avec l'aide de l'IA.
00:08:15Il est bon de garder à l'esprit que BUN appartient à Anthropic.
00:08:18Ils avaient donc un accès libre à tous ces jetons,
00:08:22et surtout à Fable 5
00:08:24avant qu'il ne soit rendu public.
00:08:26Ce portage a été réalisé avec Fable 5.
00:08:29Et si vous installez Cloud Code maintenant, soit dit en passant,
00:08:32même si BUN 1.4, la version Rust, n'est pas encore sortie,
00:08:36Cloud Code tourne déjà au-dessus
00:08:39d'une version non publiée de BUN, pour ainsi dire,
00:08:42c'est-à-dire la version Rust.
00:08:44Voilà pour ça.
00:08:45Mais oui, ce portage a été réalisé avec Cloud Code
00:08:48basé sur Fable 5 avec des jetons gratuits, bien sûr,
00:08:52puisque BUN fait partie d'Anthropic.
00:08:54C'est important de garder cela à l'esprit
00:08:56car dans cet article de blog,
00:08:58on apprend que si l'on devait combiner tous les jetons,
00:09:03ou si l'on additionnait tous les jetons
00:09:04dépensés aux prix de l'API,
00:09:08ce portage complet aurait coûté environ 160 000 dollars.
00:09:13C'est un chiffre impressionnant, mais en fait,
00:09:18si l'on considère l'ampleur de ce projet,
00:09:20sachant que BUN comptait 535 000 lignes de code SIG,
00:09:26si l'on pense à cette ampleur,
00:09:28et au temps qu'il faudrait à des humains pour le porter en Rust,
00:09:32alors les 160 000 dollars ne semblent peut-être pas si élevés,
00:09:36selon l'endroit où vous vous trouvez.
00:09:38Néanmoins, il est clair qu'aucun projet open source
00:09:43ne serait capable de faire cela.
00:09:44Et la plupart des entreprises ne seraient probablement pas en mesure
00:09:47ou ne voudraient pas dépenser cette somme pour un portage.
00:09:50C'est possible parce que BUN fait partie d'Anthropic.
00:09:54Et bien sûr, c'est aussi un joli coup marketing
00:09:58pour Anthropic.
00:09:59Ce n'était peut-être pas l'intention principale.
00:10:03Je ne le sais pas.
00:10:04Mais bien sûr, c'est un bon marketing.
00:10:06Il est important de garder tout cela à l'esprit.
00:10:08Néanmoins, dans cet article de blog,
00:10:10on apprend comment Jared a effectué ce portage
00:10:14ou comment il a réussi à le faire fonctionner.
00:10:18Et tout a commencé avec ce fichier MD de portage,
00:10:21qu'il a créé lors d'une discussion avec Claude,
00:10:25une discussion de trois heures,
00:10:26comme il l'a mentionné dans l'article,
00:10:28où il a essentiellement décidé avec Claude Code
00:10:32et les modèles Anthropic,
00:10:35à quoi ce fichier de portage MD devrait ressembler
00:10:37pour être capable de traduire le SIG en code Rust.
00:10:40Une fois qu'il l'a peaufiné et qu'il en a été satisfait,
00:10:44il l'a testé sur trois fichiers au départ.
00:10:46Et une fois qu'il a été satisfait,
00:10:48il a lancé Claude sur l'ensemble du code source de BUN.
00:10:53Dans cet article de blog,
00:10:54il précise qu'il n'a pas simplement demandé à Claude
00:10:57de réécrire BUN en Rust, ne vous y trompez pas,
00:11:00mais qu'au lieu de cela, il a mis en place un système élaboré
00:11:03où il avait un agent principal,
00:11:07qui lançait aussi des sous-agents,
00:11:09pour effectuer le portage conformément au fichier MD.
00:11:13Il disposait également de deux agents de révision antagonistes
00:11:16qui révisaient le travail de l'agent principal une fois terminé,
00:11:19fournissaient des commentaires,
00:11:21puis un agent correcteur pour appliquer ces commentaires.
00:11:24Il a fait tourner tout cela en boucle
00:11:25et, bien sûr, distribué sur plusieurs arbres de travail
00:11:30pour traiter l'ensemble du code source
00:11:33et avancer progressivement.
00:11:35Dans l'article de blog,
00:11:35il mentionne avoir réécrit BUN en Rust
00:11:38en utilisant 50 flux de travail dynamiques dans Claude Code,
00:11:40qui sont ces flux qui lancent de nombreux sous-agents
00:11:43sur une période de 11 jours.
00:11:46Il a aussi un joli graphique dedans.
00:11:48En général, dans cet article,
00:11:49il y a de beaux graphiques
00:11:51qui rendent les choses plus faciles à digérer,
00:11:53qui montrent le nombre de commits créés
00:11:56et poussés les différents jours
00:11:58et aux différents moments de la journée.
00:12:00Donc tout cela s'est passé avec l'aide de boucles dans Claude Code,
00:12:04avec l'aide de beaucoup de sous-agents
00:12:05et le processus clair d'un agent principal,
00:12:08des agents de révision et de l'agent correcteur.
00:12:10Et puis il a aussi fait un autre chemin séparé,
00:12:15pour ainsi dire, pour faire fonctionner tous ces tests.
00:12:20Cela a apporté ses propres défis
00:12:22car la suite de tests est si large et complexe
00:12:25qu'il s'est heurté à diverses restrictions d'infrastructure
00:12:29car certains tests consomment beaucoup de mémoire,
00:12:31et exécuter de nombreux tests en parallèle,
00:12:33cela ne fonctionne donc pas.
00:12:34Mais finalement, il a réussi à faire fonctionner tout cela, également avec l'aide de l'IA,
00:12:39en exécutant les tests, en corrigeant le code,
00:12:42en relançant les tests, et ainsi de suite.
00:12:43Donc beaucoup de boucles, beaucoup d'agents et de sous-agents impliqués,
00:12:47naturellement, et beaucoup de jetons brûlés.
00:12:49165 000 dollars de jetons brûlés.
00:12:53Encore une fois, vous pouvez plonger plus profondément,
00:12:55et c'est ce que je recommanderais de faire
00:12:57si vous vous intéressez à tous les détails techniques.
00:12:59C'est un excellent article de blog documentant le voyage pour y parvenir.
00:13:03Mais en résumé, voilà comment le portage s'est déroulé en 11 jours
00:13:08avec tous ces agents et sous-agents distribués sur plusieurs flux de travail,
00:13:1250 de ces flux, comme nous l'avons appris, sur 11 jours,
00:13:17165 000 $ dépensés en jetons aux prix de l'API.
00:13:24Enfin, une fois terminé, dans l'article de blog,
00:13:29il mentionne que Bun 1.4 corrige divers bugs présents dans la dernière version SIG,
00:13:35qu'il est plus efficace en mémoire et plus petit.
00:13:38Et comme nous l'apprenons par la réponse d'Andrew Kelly, le créateur de SIG,
00:13:43certaines de ces améliorations auraient probablement pu être obtenues avec SIG.
00:13:47Mais cet article de blog est assez intéressant car il a été modifié.
00:13:53Il est moins rempli de colère maintenant qu'il ne l'était au début.
00:13:57La première version était pleine d'attaques personnelles,
00:14:00juste pour dire ensuite que ce n'était pas une attaque personnelle,
00:14:03mais c'était plein d'attaques personnelles.
00:14:05La dernière version, que je mettrai également en lien ci-dessous, est toujours assez épicée.
00:14:11Au bout du compte, on peut clairement dire en lisant la première version,
00:14:14mais aussi cette version,
00:14:16qu'Andrew, le créateur de SIG, et Jared, le créateur de Bun,
00:14:21ne deviendront plus, ou ne redeviendront plus, meilleurs amis.
00:14:26Maintenant, il remercie Bun de soutenir SIG, financièrement aussi,
00:14:31juste pour pratiquement rager sur tout ce portage et dire à quel point il n'aurait pas été nécessaire
00:14:41si le code de Bun avait été écrit en SIG approprié.
00:14:44Il indique très clairement qu'il ne pense pas que le dépôt Bun,
00:14:48la version SIG, avait une qualité de code élevée et que cela a conduit à de nombreux problèmes.
00:14:53Et cela peut être vrai ou non.
00:14:56Je pense qu'il est absolument possible que dans un projet de l'envergure de Bun,
00:15:01se déplaçant à la vitesse à laquelle Bun se déplace,
00:15:06la qualité du code n'ait pas été à la hauteur des normes du créateur de SIG.
00:15:12On pourrait certainement arguer que la plupart des projets de code
00:15:15n'ont pas nécessairement la meilleure qualité de code, cependant.
00:15:18Donc vous pouvez en penser ce que vous voulez.
00:15:21Je vais en rester là.
00:15:24J'ai le sentiment que l'article de blog de réponse est assez faible
00:15:29parce qu'il est tellement empreint de colère.
00:15:33Il contient quelques points valides.
00:15:35Comme, par exemple, dans l'article de blog que Jared rédige,
00:15:40il mentionne que le portage du SIG vers Rust a été validé,
00:15:46bien sûr, avec tous ces agents réviseurs,
00:15:48mais aussi en exécutant la suite de tests et en la faisant fonctionner.
00:15:51Et Andrew déclare correctement que, bien sûr, cette même suite de tests
00:15:56aurait dû ou n'aurait pas dû suffire à prouver que la version SIG est excellente.
00:16:00Alors peut-être que la suite de tests aurait dû être améliorée, elle aussi.
00:16:04Quoi qu'il en soit, ces deux-là ne deviendront clairement pas meilleurs amis.
00:16:09Et je n'ai pas d'opinion sur le fait de savoir si SIG ou Rust est le langage de batterie en général ou pour Bun.
00:16:17Je crois, cependant, qu'avec l'IA, Rust, son modèle de mémoire et le fait
00:16:23que vous obteniez des erreurs de compilation pour de nombreux problèmes liés à la mémoire, est un avantage énorme,
00:16:30surtout à l'ère de l'IA, car, bien sûr, tout ce portage est vraiment impressionnant
00:16:38en ce qui concerne l'utilisation de l'IA.
00:16:41Et bien sûr, c'est une manière d'utiliser l'IA que la plupart d'entre nous ne pourront pas se permettre
00:16:45ou ne voudront pas se permettre dans les entreprises.
00:16:48Mais c'est impressionnant que l'IA ait pu faire cela.
00:16:52Et ce n'est pas du code « vibe » ou juste du « YOLO prompting ».
00:16:56Il y a un processus clair derrière tout cela.
00:16:59Beaucoup de réflexion a été consacrée à cela, ce que j'espère avoir clarifié, et qui devient définitivement clair
00:17:05si vous plongez dans les détails techniques.
00:17:08Mais avec toute la planification, toute l'itération avec la configuration, avec la façon dont cela a été abordé,
00:17:13il est clair que ce n'était pas juste une seule invite lancée au hasard.
00:17:17Et puis nous verrons où cela nous mène, cela montre ce que vous pouvez faire avec l'IA.
00:17:21Et bien sûr, porter une base de code d'un langage à un autre est un très bon cas d'utilisation pour l'IA.
00:17:27Si vous y réfléchissez, l'IA peut, bien sûr, lutter avec l'écriture de nouveau code.
00:17:32Il se peut qu'elle n'écrive pas le code que vous vouliez écrire, qu'elle ne suive pas les conventions de code
00:17:36ou les styles que vous vouliez suivre, et elle peut aussi gâcher des choses.
00:17:40Maintenant, l'IA est définitivement incroyable pour construire de nouveaux logiciels, aussi.
00:17:43Mais vous faites face à un ensemble différent de problèmes là avec un portage.
00:17:47L'énorme avantage est que vous avez une base de code que l'IA peut simplement regarder et traduire,
00:17:53ce qui est quelque chose que l'IA peut faire, et vous avez une suite de tests là-bas.
00:17:57Il y a donc beaucoup de choses sur lesquelles s'appuyer.
00:17:59C'est un bon cas d'utilisation pour l'IA, semble-t-il, et comme ce portage le prouve clairement.
00:18:04Et je pense que c'est le point le plus intéressant à retenir ici.
00:18:08Également le fait que vous pouvez vous attaquer à des projets qui auraient été tout simplement impossibles
00:18:12à aborder auparavant.
00:18:13Encore une fois, pas pour tout le monde, mais pour certaines entreprises de certaines tailles.
00:18:18Cela peut être intéressant.
00:18:19Moderniser des logiciels hérités avec l'aide de l'IA peut ou pourrait être un excellent cas d'utilisation.
00:18:26Et cela montre et prouve que cela peut être fait.
00:18:30Maintenant, bien sûr, BUN 1.4 n'est pas encore sorti.
00:18:32Nous verrons si tout s'effondre et s'ils doivent faire marche arrière dans un mois.
00:18:36On ne peut pas totalement l'exclure, mais je ne pense personnellement pas que cela arrivera.
00:18:40Il est déjà utilisé en production par certains adeptes précoces, comme la CLI Cloud Code.
00:18:47Il a été testé et examiné de manière approfondie, même si, bien sûr, par l'IA, et non par des réviseurs humains.
00:18:54Mais je suis assez confiant dans le fait que cela fonctionnera et je trouve que c'est un exploit assez impressionnant et aussi une utilisation assez impressionnante de l'IA.
00:19:03Mais comme toujours, je suis également intéressé d'entendre ce que vous en pensez.

Key Takeaway

La migration réussie de 535 000 lignes de code Bun de Zig vers Rust en 11 jours via une architecture multi-agents automatisée démontre la viabilité de l'IA pour la modernisation à grande échelle de logiciels complexes.

Highlights

  • La base de code de Bun, forte de 535 000 lignes de Zig, a été entièrement migrée vers Rust en 11 jours.

  • Le processus de migration a nécessité une dépense équivalente à 165 000 dollars en jetons d'API aux tarifs en vigueur.

  • L'automatisation du portage reposait sur un système composé d'un agent principal, de sous-agents de tâche, de deux agents de révision antagonistes et d'un agent correcteur.

  • La migration a été réalisée à l'aide de 50 flux de travail dynamiques utilisant le modèle Claude 3.5 Sonnet avant sa sortie publique.

  • La version Rust résultante, Bun 1.4, présente des améliorations d'efficacité mémoire et de taille par rapport à la version Zig précédente.

Timeline

Chronologie et exécution de la migration

  • La migration a débuté en mai avec la création d'instructions de portage au format Markdown.
  • Une pull request officielle contenant plus d'un million de lignes de code a été fusionnée le 14 mai.
  • Le processus complet a impliqué près de 7 000 commits sans revue humaine directe.

Le projet a commencé par l'élaboration d'un fichier Markdown contenant des tables de traduction et des directives pour convertir le code de Zig vers Rust. La fusion de la base de code a nécessité une automatisation massive, car la revue manuelle d'un tel volume de code était impossible dans le délai imparti. Le résultat final est le fruit de milliers de commits générés par des processus automatisés.

Gestion de la mémoire et code non sécurisé

  • Une critique majeure concerne l'utilisation importante du mot-clé unsafe dans le code Rust généré.
  • L'utilisation d'unsafe était en grande partie nécessaire pour interagir avec des bibliothèques C existantes.
  • Le portage initial sert de base fonctionnelle que l'équipe continue de raffiner pour supprimer progressivement les parties non sécurisées.

L'approche de gestion de la mémoire dans Rust, basée sur la propriété, diffère radicalement de celle de Zig qui nécessite une libération manuelle ou différée. Bien que le code généré ne soit pas idiomatique au sens strict, sa stabilité a été confirmée par le passage réussi de la suite de tests existante. L'utilisation d'unsafe est identifiée comme un compromis technique plutôt qu'une erreur de conception.

Architecture du système d'IA et coûts

  • La migration a utilisé Claude 3.5 Sonnet au sein d'une boucle d'exécution automatisée.
  • Le système exploitait un agent principal coordonnant des sous-agents pour le codage, la révision et la correction.
  • Le coût total estimé du portage, basé sur les prix de l'API, atteint 165 000 dollars.

Le processus n'a pas reposé sur une simple requête unique, mais sur un flux de travail sophistiqué incluant 50 pipelines de travail dynamiques. Ce système antagoniste permettait de tester, critiquer et corriger le code en continu. Cette méthodologie souligne que l'IA peut traiter des projets d'infrastructure logicielle à condition d'établir un processus de vérification rigoureux.

Réception technique et perspectives

  • Le créateur de Zig a exprimé un désaccord technique sur la nécessité de la migration, arguant que des améliorations auraient pu être effectuées en Zig.
  • La migration démontre une utilité concrète de l'IA pour la modernisation de logiciels hérités.
  • La version Rust de Bun est déjà utilisée en production via la CLI Cloud Code.

Le débat entre les partisans de Zig et ceux de Rust souligne les différences de philosophie concernant la qualité du code et la sécurité mémoire. Malgré les tensions sur la manière dont le portage a été exécuté, l'exploit technique confirme que l'automatisation par IA peut prendre en charge des tâches de migration auparavant jugées impossibles pour des équipes humaines restreintes.

Community Posts

View all posts