4 ms·
Without commenting on Bun itself as a project, or the nature of the rewrite, it can't be good for Zig that a naive rewrite away from it fixed memory leaks, impr
by Philpax 3mo ago
Without commenting on Bun itself as a project, or the nature of the rewrite, it can't be good for Zig that a naive rewrite away from it fixed memory leaks, improved stability, shrunk binary size by 20%, and improved performance by 5%.
- bielok 3mo agoI would guess that people looking to use Zig understand that those are project concerns and not language concerns.
- pyrolistical 3mo agoYeah but they turned it into something unreadable. Call it a skill issue if you wish. I just haven’t found another language that just makes sense. Zig doesn’t hide anything from you
- lifthrasiir 3mo agoThe article explicitly mentions the maintainability as a foremost concern.
- silver_silver 3mo agoPeople say a lot of things, especially when they have a vested interest in a positive outcome. Bun has been fully vibe coded into another language. There’s no way in hell it’s maintainable. Go read any analysis of the Claude Code leak for proof.
- lifthrasiir 3mo agoClaude Code is entirely vibe-coded for a long time. Bun isn't. You go read and compare the actual Bun code; it reads reasonably well [1]. [1] For example, as a random sample, https://github.com/oven-sh/bun/blob/bun-v1.3.14/src/css/media_query.zig https://github.com/oven-sh/bun/blob/bun-v1.3.14/src/css/medi... -> https://github.com/oven-sh/bun/blob/4924862cffbf671792d47c92b1b615186b3e7a30/src/css/media_query.rs https://github.com/oven-sh/bun/blob/4924862cffbf671792d47c92...
- silver_silver 3mo agoSure, reasonably well at first glance, but to quote the article: > I rewrote Bun in Rust using about 50 dynamic workflows in Claude Code run continuously over the course of 11 days. > Excluding comments, Bun is 535,496 lines of Zig. > How do you review a PR with +1 million lines added? How do you start to build the confidence needed to responsibly merge large quantities of LLM-authored code? A language-independent test suite with a million assertions, adversarial code review and when something does go wrong, fixing the process that generates the code instead of hand-fixing the code. That’s vibe coding. This blog post is an ad for Claude, nothing more.
- teach 3mo agoYou're entitled to call things as you wish, of course, but your definition of "vibe-coding" differs quite a bit from mine.
- crote 3mo ago500k lines in 11 days? With 8-hour working days that's 100 lines per minute. There's no way you're comprehensively reviewing code that quickly. The code was generated by a LLM, and the output wasn't even read by its user. That's definitely vibe coding.
- usef- 3mo agoIt's a direct translation without changing the overall code structure or data structures. I do think this process deserves a distinct name from blind whole-of-project vibe coding. Translation does seem to be a strength of LLMs, and as they said in the post, the code at the function-level all still feels familiar to the team. They've also already moved users to the codebase without anyone noticing; that's a better result than typical vibe coding.
- kgeist 3mo ago>they turned it into something unreadable Did you compare the code before/after? It's a mechanical line-by-line port, and most of the code is identical to the old version, just with Rust syntax. They have an example in the blog post.
- kvuj 3mo agoBut how can it be a mechanical rewrite if the tool used isn't deterministic?
- kgeist 3mo agoIt converges to "almost deterministic" on highly predictable outputs (i.e. code) with the right sampling params (say, you only sample the most probable token without randomness/high temperature) and with self-correction loops
- baby 3mo agoI find Rust more readable than zig
- m00dy 3mo agoyou're not alone.
- throwaway27448 3mo agoTrue, but rewrites often allow for this sort of benefit in themselves. It's possible rewriting it in zig would have yielded some of the same improvements.
- pdpi 3mo agoA sophisticated rewrite? Sure. This was a naive like-for-like rewrite, though.
- deleted 3mo ago[deleted]
- rq1 3mo agoFrom a PL Theory perspective, Zig is vibe-coded. Not sure why people use it.
- whytevuhuni 3mo agoPretty much everything except Haskell and the like can be considered as such. That's because closely following PL theory isn't always the right goal for a language. Ergonomics and pragmatism are far more important.
- rq1 3mo agoI wouldn't disaree on the ergonomics: a powerful but unusable tool is... useless! Though ignoring all the PL lessons for the sake of "pragmatism" is just plain ignorance. Rust has a quite solid theory backing. Zig has nothing interesting really: it's "vibe coded" by someone who was doing game dev or something like that.
- lifthrasiir 3mo agoThe same concern applies to every GC language, so it's not necessarily bad for Zig. Bun can have been grown too large for Zig to be effective, while moderately sized projects may still greatly benefit from Zig.
- saghm 3mo agoI thought Zig was supposed to be a C replacement (as in, it doesn't actually provide full safety in the way that Rust or a GC language would)?
- lifthrasiir 3mo agoOh, yeah that might be confusing. I meant "you can say the same thing for GC language if that's true, which isn't necessarily true, so that must be false". More precisely speaking: GC languages are said to delay memory problems far beyond the horizon, which is often unreachable throughout the project's history. Zig can be a similar case.
- saghm 3mo agoAh, I understand now. That said, I still think there's a pretty strong argument that this is a lot worse for Zig than a GC language, because they also give you safety for that overhead (and potentially ergonomics). When a language is trying to operate in the same niche as C with what seems to be an overt attempt to be less cumbersome than Rust even if it makes it less safe, it's a bit concerning to see that even without the safety it seems to have more overhead rather than less. Put another way: it sounds like it might as well just add a GC if it's not going to be competitive on performance.
- geon 3mo agoWouldn't the same improvements have been made in zig if they instructed the agents to improve instead of rewrite?
- Zakis1 3mo agoBut how would you verify that the agents have written memory safe code? Rust's borrowchecker is a lot faster and actually verifiably safe compared to asking an LLM to fix the safety issues that the Zig version had.
- gpm 3mo agoMaybe they'd get the same numeric improvements and bug fixes today (or maybe not, or maybe they'd get even more since the LLM isn't spending time rewriting correct code). But they wouldn't get a change to the structural issues that created the issues in the first place. They'd end up "ke[eping] fixing these kinds of bugs one-off in perpetuity".
- egorfine 3mo agoUnfortunately (and I say this because I hate this whole rust rewrite) no. There is no fixing a third-party garbage collector on top of the non-memory-managed language. Jarred explains in a post what would that Zig look like.
- frollogaston 3mo agoI pay attention when someone makes a hard decision based on a hard-learned lesson. It's like, most who choose to use an ORM just heard of it or want to avoid learning SQL, everyone who removes an ORM learned firsthand horrors.
- lionkor 3mo agoThe result of this will be that you end up at the highest level of abstraction. Let me save you time and tell you that C# and it's ecosystem is where you'll be happy.
- aizk 3mo agoFunny you mention ORMs, I'm building a project with bun, and just using raw bun sqlite until I feel the app gets too complicated and I need it. AIs are really damn good at SQL, I can just trust them with it, and it keeps the project much lighter. A few years ago this would just sound stupid, but here we are.
- frollogaston 3mo agoThat's what I always did pre LLM, it was fine
- simonw 3mo agoI don't think it's care to categorize this as "a naive rewrite away from [Zig]" - Jarred has been immersed in this project for five years, got to benefit from everything he learned along the way and spent $165,000 of tokens on the most advanced coding LLM anyone has access to. I expect if he'd spent $165,000 running Fable against the Zig version he could have got a 5% performance improvement, too.
- Philpax 3mo agoOh, I have no doubt that they could have extracted those gains from Zig! My point is more that, from a relatively naive line-to-line port, they were able to claim these benefits without much effort. It's not great for Zig if you have to put in more work to end up at the same place efficiency-wise, especially for a language marketed at people who like to get the most out of their metal.
- gwenzek 3mo agoThat's not what the article says though. The size reduction was from extra linker flag for deduping code, and the speed gains from LTO. They could have done the same in Zig, even though it probably shows cargo is better at this than build.zig.
- malisper 3mo agoI can confirm a naive rewrite won't make things faster. I've been working on rewriting Postgres in Rust. I rewrote things function by function similar to how Jarred did. Even though the new Rust code mapped closely with the previous C code, it was 8x slower. This was due to myriad of reasons. For example naively converting a C union into a Rust enum can be slower because Rust stores a tag with the enum, while C unions do not. I've been working on a new rewrite that's focused on beating Postgres on performance. As of this morning I got to 100% of the tests passing and have meaningful performance gains over Postgres.
- nvader 3mo agoI hope that you're going to call it PostGrust.
- h14h 3mo agoWhile it's easy to look at it that way on the surface, from reading the blog post, it sounds like a big part of it may just be the nature of Bun as a project.
- linzhangrun 3mo agozig has been developing too slowly. it still cannot reach a stable 1.0 (to the point that even vsc autocomplete gets its Hello World wrong), and then it ran headfirst into AI.
- benced 3mo agoThe scary thing is the zig project prohibits LLM contributions - the world is going to move faster than them.
- AlotOfReading 3mo agoI would be pissed if my programming language changed as quickly as Claude code does. Languages need to move slowly and carefully, and zig is on the faster end of language development regardless.
- benced 3mo agoI would be mad if the syntax was constantly changing but I want the internal implementation to be moving as fast as possible while retaining success. I think that rate is higher than what humans alone can do.
- AlotOfReading 3mo agoThat's a monkey's paw desire because nowhere is Hyrum's law more true than programming languages. Alternatively you just end up with something like C++ where no one understands the whole thing.
- ksec 3mo agoI hope Zig won't do a hostile reply to this blog post. But some thoughts on Zig's future where a lot of these problems could be fixed or migrated by better tooling and compiler checking. But a lot of people have been saying this for sometime, Rust and LLM is a great match. A lot of friction of the language were smoothed out by LLM assisted programming.
- zamadatix 3mo agoOn the other side of the scale, this codebase started in Zig from 5 years ago while the Zig of today is still very much pre-1.0 - still in the middle of things like finishing up moving to a self hosted compiler. Things like binary size, performance, or some of the oddities around drift in the language (like the custom macros vs now built-in language features) in this rewrite are not really as bad as they'd seem if this was a port from a more complete language. That said, I think the parts around wanting to properly have memory safety guarantees rather than try hard & patch as issues are found is a more serious concern for Zig as those speak more to the design goals than the current implementation. "better safety than C while maintaining C compatibility" may not be a very compelling reason to chose Zig if other languages are able to do that portion better anyways, even ones without a GC.
- NetMageSCW 3mo ago“better safety than Zig while losing compatibility with C” doesn’t seem as compelling a story to me.
- xyzsparetimexyz 3mo agoNo, you don't get it. Zig is a language about having _fun_. Not memory safety and all that crap. That's why unused variables are hardcoded as errors!
- randusername 3mo agoI hope this isn't the takeaway! Zig was the right tool to start, Rust is the right tool to finish. Making something possible and refining something until it is high security and reliability are different problems. Zig is great, but for a JS runtime, I just don't think that's the best long-term fit.