Just landed this commit with a diff of +672 -115154 lines, dropping the dependence on uucode which was vendored just for generating a checked in table.
I’ve also been moving steadily towards relying more on Zig’s own concurrency model(s). This commit nuked Bun’s Futex.zig and ThreadPool.zig, brought in some io.concurrent and io.async uses, and improved performance significantly in some cases.
The codebase is slowly getting into better shape. When Bun 1.4 finally releases (expected next week), I will freeze it as a behavior target, and try to release a Buz 1.4 as a drop-in replacement with feature parity, and hopefully superior memory safety and performance.
34 Likes
Just landed this commit with a diff of +672 -115154 lines, dropping the dependence on uucode which was vendored just for generating a checked in table.
Those are the most satisfying commits.
4 Likes
Bun 1.4 is finally out! Congrats to Claude Mythos and its subagents, I’m sure a lot of tokens went into it. I will make this the target for the first release of Buz.
The changelog is huge, and they bundle a lot of new features, which some people have raised concerns about. I think it makes sense for them, since Claude Code can benefit from first-class native implementations of its core dependencies, and I think other users of Bun or Buz can also benefit from them. At this point, Bun has so many features that it’s hard for any single person to keep it all in his head, and I’ve noticed some features in the codebase that are seemingly forgotten. So it remains to be seen how well these new features will be maintained.
My priorities are unchanged, but I can now pin them to v1.4:
- Reach feature parity with Bun v1.4, including on Node.js compatibility.
- Audit all memory safety and adjacent issues, and solve their root causes.
- Fix all other bugs and security issues that were fixed by Bun in this release.
- Match and hopefully exceed Bun on performance, making use of idiomatic Zig.
During the last 3 weeks, I haven’t made any commits. That’s because I decided to bite the bullet and redesign the binding system(s). It aims to resolve the main pain-point of this codebase: the JSC-Zig boundary with all its memory management footguns. I’ve unified the 8 or so different bindgen systems that Bun had into a single one. The new system should hopefully make the main bug classes no longer expressible at all. Such a migration cannot possibly be mechanical, it has touched over 1000 files and I would estimate that at least 100 bugs have been fixed in the process. I don’t expect it to be the perfect solution, but I hope it is a step in the right direction and will make any future redesign a lot more manageable.
Since I don’t have unlimited tokens to spend like the Bun team, I have been waiting on my token limits to reset, and only worked on this around 3 days per week because of that. Most of the migration is done now, and I’m tying up loose ends and cleaning it up. I’ll let the commit speak for itself when it lands, hopefully next week.
15 Likes
this is a great idea. unfortunately with existing brownfield llm work there is so much code that the only way forward is a rewite or to continue using an llm.
i say keep it up. it will be an interesting contrast to the rust bun teams work.
1 Like
@jazzzooo Just wanted to say thank you for all of the work that you have put into this, and would love to have an update from you on how things are going.