- Buz est un fork encore à un stade précoce, lancé à partir du commit de Bun juste avant sa réécriture en Rust, avec pour objectif de devenir un remplaçant compatible basé sur le Zig le plus récent
- L’ensemble du graphe de build, jusqu’aux sources vendorisées de JavaScriptCore, a été déplacé vers
build.zig, et de petits patchs ont été appliqués à Zig pour obtenir des builds incrémentaux en moins d’une seconde - Les tests des nouvelles fonctionnalités et correctifs de bugs du Bun en version Rust ont été repris, mais beaucoup échouent encore, ce qui impose de continuer à suivre les fonctionnalités upstream et les changements de JavaScriptCore
- Plus de 11 000 lignes de code inutilisées ont été supprimées, et plusieurs bugs ont aussi été corrigés au passage lors de la modernisation de certaines implémentations autour de la bibliothèque standard de Zig
- Le projet n’est pas encore utilisable en production, et l’objectif à long terme est de réduire la dette technique avec l’aide conjointe des LLM et de la supervision humaine pour aboutir à une base de code maintenable sans LLM
Objectifs du projet et état du développement
- Buz est un fork en cours de développement basé sur le dernier commit de Bun avant sa réécriture en Rust
- Le projet vise à être un remplaçant compatible de Bun tout en construisant une base de code plus propre que l’existante
- Le développement en est à un stade très précoce, donc il n’est pas prêt pour un usage en production
- Buz a été rendu public pour éviter la duplication du travail de développement alors qu’un projet Bun similaire basé sur Zig avait déjà été publié sur Ziggit
- Au moment de la publication, ce projet n’avait pas encore été examiné
Portage vers le Zig actuel et builds incrémentaux
- Bun a été porté vers la version upstream actuelle de Zig, avec de petits patchs appliqués à Zig pour permettre les rebuilds incrémentaux
- L’ensemble du graphe de build, y compris les sources vendorisées de JavaScriptCore, a été intégré dans
build.zig - Avec cette configuration, le temps de build incrémental tombe à moins d’une seconde, ce qui accélère fortement les cycles d’itération
- Le projet inclut un sous-module Zig
masteravec le patch de build incrémental appliqué - Il se compile aussi correctement avec le commit upstream Zig
2b1c663de l’époque
Tests de compatibilité et suivi de l’upstream
- Les tests ajoutés à la version Rust de Bun ont été repris, y compris de nombreux tests vérifiant les nouvelles fonctionnalités et corrections de bugs
- Beaucoup de tests ne passent pas encore, il faut donc continuer à rattraper l’upstream de Bun
- Le travail de nettoyage du code et de réduction de la dette technique se poursuit en parallèle du maintien de la compatibilité fonctionnelle
- Les changements de JavaScriptCore doivent eux aussi être suivis en continu
Nettoyage et modernisation de la base de code
- Plus de 11 000 lignes de code totalement inutilisé dans Bun ont été supprimées
- Certaines parties du code ont été réécrites et modernisées, avec un usage accru de la bibliothèque standard de Zig
- Plusieurs bugs ont également été corrigés pendant ce travail de nettoyage et de modernisation
- La base de code existante de Bun représente environ 600 000 lignes, et atteindre un état vraiment propre nécessitera selon l’auteur de réécrire un nombre important de sous-systèmes
Usage des LLM et politique de contribution
- Le projet prévoit de faire un usage intensif des LLM pour remettre en ordre une base de code existante complexe, tout en y ajoutant supervision humaine et meilleures pratiques de développement
- Tant que la base de code ne sera pas jugée suffisamment propre, les contributions écrites directement par des humains ne seront pas acceptées
- La priorité est donnée à la réduction de la dette technique et à l’écriture d’un code Zig idiomatique, avec pour objectif d’aboutir d’ici quelques semaines ou quelques mois à une alternative compatible au Bun Rust 1.4.0
- Le projet demande l’aide de développeurs capables d’utiliser Sol ou Fable
- À long terme, l’objectif est de construire une base de code facile à maintenir sans l’aide des LLM, tout en renforçant les compétences en Zig au fil du développement
1 commentaires
Commentaires Hacker News
la compilation incrémentale de Zig ne prend pas encore en charge aarch64 et le patch binaire n’est possible qu’avec le linker Linux, mais la prise en charge des principales plateformes semble n’être qu’une question de temps
Le fait qu’une équipe d’une seule personne ait atteint une compilation en 1 seconde montre que la lenteur des builds était le résultat de pratiques de développement négligentes, et que consacrer du temps au fork était une très mauvaise allocation des ressources
Au fond, cela semble vouloir dire donner plus d’instructions, ou de meilleures instructions. La structure du code relève aussi un peu des préférences ; hier encore, j’ai eu une conversation absurde avec quelqu’un qui insistait sur le fait qu’il fallait quatre processus backend pour traiter une seule requête HTTP
L’époque où les humains intervenaient n’a été qu’une phase transitoire, dès le départ
C’est courant dans les gros projets, ou bien c’est juste moi qui ne le savais pas ?
On ne sait pas s’il s’agit de code évident comme
if (false) { dead_code(); }, ou de code qui peut être atteint par dispatch dynamique mais qui, en pratique, ne peut jamais être appelé selon la logique. Dans le premier cas, 1,8 % est élevé ; dans le second, c’est peut-être faible. Beaucoup de projets accumulent aussi du code placé derrière d’anciens feature flags, pratiquement jamais exécutéLaisser un peu de code mort, comme de petits utilitaires ou du code généré, n’est pas forcément un problème, mais sa suppression peut aussi entraîner des suppressions en cascade et des simplifications
À strictement parler, ce n’était pas du code mort, mais quand on nettoie une petite mauvaise abstraction, l’occasion d’en nettoyer d’autres s’ouvre à la suite, et au final il ne reste qu’un logiciel qui fait vraiment ce qu’il est censé faire. Les bases de code ont tendance à enfler avec le temps, donc à l’échelle de Bun, le plus étonnant est plutôt de n’avoir trouvé que 11 000 lignes
Pendant la phase tic, on ajoute vite des fonctionnalités pour produire une version correcte mais extrêmement sale ; pendant la phase tac, on digère et on nettoie le résultat pour améliorer les performances, la maintenabilité et la résistance au changement
Je passais souvent une journée à faire du vibe coding pour obtenir une appli fonctionnelle, puis une semaine à en faire un projet sur lequel on peut continuer à ajouter des fonctionnalités sans qu’il s’effondre comme un château de cartes. C’était déjà un peu le cas avant l’IA, mais les développeurs expérimentés avaient un modèle mental plus solide du système et avançaient plus lentement, donc la bascule n’était pas aussi brutale
Les modèles de codage ont une forte tendance à emprunter des raccourcis qui cassent l’encapsulation ou à dupliquer du code qui ne devrait pas l’être
Sur les gros projets, on ne peut pas attendre plusieurs minutes à chaque fois qu’on lance des tests ou qu’on vérifie des erreurs sémantiques, donc le temps de build est clairement un goulot d’étranglement
Non pas parce que je soutiens fortement l’IA, mais comme art conceptuel ou expérience, ce serait amusant de voir comment les deux projets évoluent différemment
Lien : https://ziggit.dev/t/cruller-buns-zig-runtime-continued-on-z...
Discussion HN : https://news.ycombinator.com/item?id=49017344
https://nubjs.com
Composer des outils spécialisés n’a rien de mauvais, mais c’est extrêmement pratique quand tout fonctionne d’emblée. Le bundler de Bun expose aussi une API runtime, ce qui permet au même processus qui sert les assets de coordonner un bundler externe, ou de bundler directement en mémoire sans écrire de fichiers statiques sur disque