- Buz adalah fork tahap awal yang berangkat dari commit tepat sebelum Bun ditulis ulang ke Rust, dan sedang dikembangkan dengan tujuan menjadi pengganti kompatibel berbasis Zig terbaru
- Seluruh graf build, termasuk source vendor JavaScriptCore, dipindahkan ke
build.zig, dan patch kecil diterapkan ke Zig untuk mewujudkan build inkremental di bawah 1 detik - Proyek ini mengambil test untuk fitur baru dan perbaikan bug dari Bun versi Rust, tetapi masih banyak test yang gagal, sehingga tetap perlu terus mengikuti fitur upstream dan perubahan JavaScriptCore
- Dalam proses menghapus lebih dari 11.000 baris kode yang tidak digunakan dan memodernisasi sebagian implementasi dengan berfokus pada pustaka standar Zig, sejumlah bug juga ikut diperbaiki
- Masih belum bisa dipakai di produksi, dan tujuan jangka panjangnya adalah mengurangi technical debt dengan memanfaatkan LLM bersama pengawasan manusia, lalu membangun codebase yang mudah dipelihara bahkan tanpa LLM
Tujuan proyek dan status pengembangan
- Buz adalah fork yang sedang dikembangkan berdasarkan commit terakhir sebelum Bun ditulis ulang ke Rust
- Fokusnya adalah menjadi pengganti yang kompatibel dengan Bun sekaligus membangun codebase yang lebih rapi dibanding sebelumnya
- Pengembangannya masih sangat awal sehingga belum siap digunakan di produksi
- Buz dipublikasikan untuk menghindari duplikasi pekerjaan pengembangan, karena proyek Bun berbasis Zig serupa sudah lebih dulu dipublikasikan di Ziggit
- Saat dipublikasikan, proyek tersebut masih belum ditinjau
Porting ke Zig terbaru dan build inkremental
- Bun di-port ke Zig upstream saat ini, dan patch kecil diterapkan ke Zig untuk rebuild inkremental
- Seluruh graf build, termasuk source vendor JavaScriptCore, diintegrasikan ke
build.zig - Dengan konfigurasi ini, waktu build inkremental turun menjadi di bawah 1 detik, sehingga siklus iterasi pengembangan menjadi lebih cepat
- Proyek ini menyertakan submodul Zig
masteryang sudah diberi patch build inkremental - Pada saat itu, build juga berjalan normal di commit Zig upstream
2b1c663
Uji kompatibilitas dan pelacakan upstream
- Test yang ditambahkan ke Bun versi Rust telah diambil, termasuk banyak test untuk memverifikasi fitur baru dan perbaikan bug
- Masih banyak test yang belum lulus, sehingga tetap perlu terus mengejar Bun upstream
- Sambil menjaga kompatibilitas fitur, penataan kode dan pengurangan technical debt juga dikerjakan secara paralel
- Perubahan JavaScriptCore juga harus terus dilacak
Penataan dan modernisasi codebase
- Menghapus lebih dari 11.000 baris kode yang sama sekali tidak digunakan di Bun
- Sebagian kode ditulis ulang dan dimodernisasi sambil memperluas penggunaan pustaka standar Zig
- Dalam proses penataan dan modernisasi, sejumlah bug juga ikut diperbaiki
- Codebase Bun saat ini berukuran sekitar 600 ribu baris, dan diperkirakan cukup banyak subsistem harus ditulis ulang untuk mencapai kondisi yang rapi
Pemanfaatan LLM dan kebijakan kontribusi
- Untuk merapikan kode lama yang kompleks, ada rencana untuk memanfaatkan LLM secara luas sambil menerapkan pengawasan manusia dan praktik pengembangan yang lebih baik
- Sampai codebase dinilai sudah cukup rapi, kontribusi yang ditulis langsung oleh manusia tidak akan diterima
- Prioritasnya adalah mengurangi technical debt dan menulis kode Zig yang idiomatis, dengan target menghasilkan codebase yang dapat dirilis dalam hitungan minggu atau bulan sebagai pengganti kompatibel untuk Rust Bun 1.4.0
- Dukungan diminta dari pengembang yang bisa menggunakan Sol atau Fable
- Dalam jangka panjang, tujuannya adalah membuat codebase yang mudah dipelihara tanpa bantuan LLM, sekaligus meningkatkan kemampuan Zig selama proses pengembangan
1 komentar
Pendapat Hacker News
Saat ini kompilasi inkremental Zig belum mendukung aarch64 dan patch biner juga hanya memungkinkan di linker Linux, tetapi dukungan untuk platform utama tampaknya tinggal menunggu waktu
Fakta bahwa tim 1 orang mencapai build 1 detik menunjukkan bahwa build lambat adalah hasil dari praktik pengembangan yang ceroboh, dan waktu yang dihabiskan untuk fork merupakan alokasi sumber daya yang sepenuhnya keliru
Pada akhirnya ini tampak seperti soal memberi instruksi lebih banyak atau lebih baik. Struktur kode juga terasa seperti wilayah selera; kemarin saya bahkan mengalami percakapan absurd dengan seseorang yang bersikeras bahwa satu permintaan HTTP perlu empat proses backend untuk ditangani
Zaman manusia ikut campur menurut saya sejak awal hanyalah tahap sementara
Ini hal yang umum di proyek besar, atau saya saja yang tidak tahu?
Tidak jelas apakah ini kode yang seterang
if (false) { dead_code(); }, atau kode yang secara logis tidak mungkin dipanggil meski dynamic dispatch masih memungkinkan. Jika yang pertama, 1,8% itu tinggi, tetapi jika yang kedua bisa jadi rendah; banyak proyek juga menumpuk kode di balik feature flag lama yang pada praktiknya tidak pernah lagi dijalankanSedikit kode mati seperti utilitas sederhana atau generated code kadang tidak masalah dibiarkan, tetapi penghapusannya juga bisa memicu penghapusan berantai dan penyederhanaan
Secara ketat itu bukan kode mati, tetapi saat satu abstraksi kecil yang keliru dibersihkan, peluang perapian berikutnya terus terbuka, dan pada akhirnya yang tersisa adalah perangkat lunak yang hanya melakukan apa yang memang dimaksudkan. Codebase memang cenderung membengkak seiring waktu, jadi pada skala Bun justru lebih mengejutkan kalau mereka hanya menemukan 11.000 baris
Pada fase tik, fitur ditambahkan cepat sehingga muncul versi yang benar tetapi sangat berantakan; pada fase tok, hasilnya dicerna dan dirapikan untuk meningkatkan performa, kemudahan perawatan, dan ketahanan terhadap perubahan
Saya sering membuat aplikasi yang berjalan lewat vibe coding dalam sehari, lalu menghabiskan seminggu untuk mengubahnya menjadi proyek yang bisa terus ditambahi fitur tanpa roboh seperti rumah kartu. Sebelum AI pun mirip, tetapi pengembang profesional punya model mental sistem yang lebih kuat dan kecepatannya lebih lambat, sehingga peralihannya tidak setajam ini
Model coding sangat cenderung mengambil jalan pintas yang merusak enkapsulasi atau menyalin kode yang seharusnya tidak diduplikasi
Pada proyek besar, tidak mungkin menunggu beberapa menit setiap kali ingin menjalankan tes atau memeriksa semantic error, jadi waktu build jelas merupakan bottleneck
Bukan karena sangat mendukung AI, tetapi sebagai seni konseptual atau eksperimen, akan menarik melihat bagaimana kedua proyek itu berevolusi secara berbeda
Tautan: https://ziggit.dev/t/cruller-buns-zig-runtime-continued-on-z...
Diskusi HN: https://news.ycombinator.com/item?id=49017344
https://nubjs.com
Menggabungkan alat khusus per tujuan juga tidak masalah, tetapi sangat nyaman jika semua sudah beres dalam keadaan bawaan. Bundler Bun juga punya runtime API, jadi proses yang sama yang menyajikan aset bisa berkoordinasi dengan bundler eksternal atau melakukan bundling langsung dari memori tanpa menulis berkas statis ke disk