- Buz, Bun के Rust rewrite से ठीक पहले वाले commit से शुरू हुआ एक शुरुआती चरण का fork है, जिसे नवीनतम Zig आधारित compatible alternative बनाने के लक्ष्य से विकसित किया जा रहा है
- JavaScriptCore के vendored source तक पूरे build graph को
build.zigमें ले जाकर और Zig में छोटे patches लागू करके 1 सेकंड से कम incremental builds लागू किए गए हैं - Rust version Bun के नए features और bug fixes के tests लाए गए हैं, लेकिन कई tests fail हो रहे हैं, इसलिए upstream features और JavaScriptCore changes को लगातार follow करना होगा
- इस्तेमाल न हो रहे code की 11,000 से अधिक lines हटाई गईं और कुछ implementations को Zig standard library केंद्रित तरीके से modernize करने की प्रक्रिया में कई bugs भी fix किए गए
- अभी production में इस्तेमाल योग्य नहीं है, और LLM व human supervision दोनों का उपयोग करके technical debt घटाने के बाद LLM के बिना भी maintain करने में आसान codebase बनाना इसका long-term goal है
Project goals और development status
- Buz, Bun के Rust में rewrite होने से पहले के आखिरी commit पर आधारित एक work-in-progress fork है
- इसका focus Bun-compatible alternative होने के साथ-साथ पहले से अधिक व्यवस्थित codebase बनाने पर है
- Development बहुत शुरुआती चरण में है, इसलिए production use के लिए तैयार नहीं है
- Ziggit पर पहले से समान Zig-based Bun project सार्वजनिक होने की स्थिति में development work की duplication से बचने के लिए Buz को सार्वजनिक किया गया
- Public release के समय उस project की अभी समीक्षा नहीं की गई थी
नवीनतम Zig porting और incremental builds
- Bun को current upstream Zig पर port किया गया है, और incremental rebuilds के लिए Zig में छोटे patches लागू किए गए हैं
- JavaScriptCore के vendored source सहित पूरे build graph को
build.zigमें integrate किया गया है - इस setup से incremental build time 1 सेकंड से कम हो गया, जिससे development iteration cycle तेज हुई
- Project में incremental build patch लागू Zig
mastersubmodule शामिल है - उस समय upstream Zig commit
2b1c663पर भी build सही ढंग से हो सकता था
Compatibility tests और upstream tracking
- Rust version Bun में जोड़े गए tests लाए गए हैं, और नए features व bug fixes को verify करने वाले कई tests भी शामिल हैं
- अभी पास न होने वाले tests बहुत हैं, इसलिए Bun upstream को लगातार catch up करना होगा
- Feature compatibility बनाए रखते हुए code cleanup और technical debt घटाने का काम भी साथ-साथ किया जा रहा है
- JavaScriptCore changes को भी लगातार track करना होगा
Codebase cleanup और modernization
- Bun में बिल्कुल इस्तेमाल न हो रहे code की 11,000 से अधिक lines हटाई गईं
- कुछ code को rewrite और modernize करते हुए Zig standard library का उपयोग बढ़ाया गया
- Cleanup और modernization की प्रक्रिया में कई bugs भी साथ में fix किए गए
- मौजूदा Bun codebase लगभग 6 लाख lines का है, और व्यवस्थित स्थिति तक पहुंचने के लिए कई subsystems को फिर से लिखना पड़ेगा, ऐसा माना जा रहा है
LLM usage और contribution policy
- जटिल मौजूदा code को साफ करने के लिए LLM का व्यापक रूप से उपयोग किया जाएगा, लेकिन human supervision और बेहतर development practices भी साथ में लागू करने की योजना है
- जब तक codebase को पर्याप्त रूप से व्यवस्थित नहीं माना जाता, तब तक इंसानों द्वारा सीधे लिखे गए contributions स्वीकार नहीं किए जाएंगे
- Technical debt कम करना और idiomatic Zig code लिखना प्राथमिकता है, और कुछ हफ्तों या महीनों के भीतर Rust Bun 1.4.0 का compatible alternative बनने योग्य codebase का लक्ष्य है
- Sol या Fable इस्तेमाल कर सकने वाले developers से support मांगा गया है
- Long term में LLM की मदद के बिना भी maintain करने में आसान codebase बनाना और development process में Zig skills को भी बढ़ाना लक्ष्य है
1 टिप्पणियां
Hacker News टिप्पणियाँ
अभी Zig incremental compilation aarch64 को support नहीं करता और binary patching भी केवल Linux linker में संभव है, लेकिन मुख्य platforms का support बस समय की बात लगता है
एक-व्यक्ति टीम ने 1-second build हासिल किया, यह दिखाता है कि slow builds लापरवाह development practices का नतीजा थे, और fork पर समय लगाना resources का पूरी तरह गलत allocation था
आखिरकार इसका मतलब शायद और ज़्यादा, या बेहतर, निर्देश देना है। code structure कुछ हद तक पसंद का मामला भी लगता है; कल ही एक दोस्त से अजीब बातचीत हुई जो ज़िद कर रहा था कि एक HTTP request handle करने के लिए चार backend processes चाहिए
इंसानी involvement का दौर शुरू से ही एक temporary phase था, ऐसा लगता है
सोचता हूँ कि क्या बड़े projects में यह आम बात है और बस मुझे पता नहीं था
यह साफ़ नहीं है कि यह
if (false) { dead_code(); }जैसा obvious code था, या ऐसा code जिसे dynamic dispatch से call किया जा सकता है लेकिन logic के हिसाब से कभी call नहीं हो सकता। पहले मामले में 1.8% ज़्यादा है, लेकिन दूसरे में कम भी हो सकता है; कई projects में पुराने feature flags के पीछे ऐसा code जमा रहता है जो practically कभी run नहीं होगाsimple utilities या generated code जैसी थोड़ी dead code छोड़ देना ठीक हो सकता है, लेकिन removal कभी-कभी chain में और deletion व simplification तक ले जाता है
strictly speaking वह dead code नहीं था, लेकिन एक छोटी गलत abstraction साफ़ करने पर अगली cleanup opportunities खुलती जाती हैं, और आखिर में ऐसा software बचता है जो केवल intended काम करता है। codebases समय के साथ फूलते हैं, इसलिए Bun के scale पर सिर्फ 11,000 lines मिलना ज़्यादा हैरान करता है
tick phase में features तेज़ी से जोड़कर accurate लेकिन बेहद messy version बनता है, और tock phase में output को digest और clean up करके performance, maintainability और change fragility सुधारी जाती है
एक दिन vibe coding से working app बनाने के बाद, उसे ऐसा project बनाने में अक्सर एक हफ्ता लग जाता है जिसमें card-house की तरह ढहे बिना features जोड़ते रह सकें। AI से पहले भी कुछ ऐसा था, लेकिन professional developers के पास system का mental model ज़्यादा मजबूत था और काम की speed भी धीमी थी, इसलिए switch इतना abrupt नहीं था
coding models encapsulation तोड़ने वाले shortcuts लेने या duplicate नहीं होना चाहिए ऐसा code copy करने की ओर बहुत झुकते हैं
बड़े projects में tests चलाने या semantic errors check करने के लिए हर बार कई मिनट इंतज़ार नहीं कर सकते, इसलिए build time साफ़ bottleneck है
AI का ज़ोरदार supporter होने की वजह से नहीं, बल्कि concept art या experiment के तौर पर यह देखना मज़ेदार होगा कि दोनों projects अलग-अलग कैसे evolve करते हैं
Link: https://ziggit.dev/t/cruller-buns-zig-runtime-continued-on-z...
HN discussion: https://news.ycombinator.com/item?id=49017344
https://nubjs.com
purpose-specific tools को combine करने में भी कोई समस्या नहीं है, लेकिन default state में सभी समस्याएँ हल हो जाना बहुत convenient है। Bun bundler में runtime API भी है, जिससे assets serve करने वाली वही process external bundler से coordinate किए बिना या static files disk पर लिखे बिना memory से सीधे bundling कर सकती है