- Buz, Bun’un Rust ile yeniden yazılmasından hemen önceki commit’ten yola çıkan, en güncel Zig tabanlı uyumlu bir alternatif olmayı hedefleyen erken aşama bir fork’tur
- JavaScriptCore vendor kaynakları dahil tüm derleme grafiği
build.zige taşındı ve Zig’e küçük yamalar uygulanarak 1 saniyenin altında artımlı derleme sağlandı - Rust sürümündeki Bun’un yeni özellik ve hata düzeltme testleri alındı, ancak başarısız olan çok sayıda test bulunduğundan upstream özellikleri ve JavaScriptCore değişikliklerinin takibi sürdürülmeli
- Kullanılmayan 11.000 satırdan fazla kod kaldırıldı ve bazı uygulamalar Zig standart kütüphanesi merkezli olacak şekilde modernleştirilirken çeşitli hatalar da düzeltildi
- Henüz prodüksiyonda kullanılamaz; LLM ile insan gözetimini birlikte kullanarak teknik borcu azalttıktan sonra LLM olmadan da bakımı kolay bir kod tabanı oluşturmak uzun vadeli hedeftir
Proje hedefi ve geliştirme durumu
- Buz, Bun’un Rust ile yeniden yazılmasından önceki son commit’i temel alan geliştirme aşamasındaki bir forktur
- Bun ile uyumlu bir alternatif olurken, mevcut olandan daha düzenli bir kod tabanı oluşturmaya odaklanır
- Geliştirme çok erken aşamada olduğu için prodüksiyonda kullanıma hazır değildir
- Benzer Zig tabanlı bir Bun projesi Ziggit’te zaten paylaşılmışken, geliştirme çalışmalarının gereksiz yere yinelenmesini önlemek amacıyla Buz kamuya açıldı
- Yayınlandığı sırada söz konusu proje henüz incelenmemişti
En güncel Zig’e port ve artımlı derleme
- Bun, mevcut upstream Zig’e port edildi ve artımlı yeniden derleme için Zig’e küçük yamalar uygulandı
- JavaScriptCore’un vendor kaynakları dahil tüm derleme grafiği
build.zigiçinde birleştirildi - Bu yapılandırmayla artımlı derleme süresi 1 saniyenin altına indi ve geliştirme döngüsü hızlandı
- Proje, artımlı derleme yamaları uygulanmış Zig
mastersubmodule’ünü içerir - O dönemde upstream Zig commit’i
2b1c663ile de sorunsuz derlenebiliyordu
Uyumluluk testleri ve upstream takibi
- Rust sürümündeki Bun’a eklenen testler alındı; bunların arasında yeni özellikler ve hata düzeltmelerini doğrulayan çok sayıda test de var
- Hâlâ geçemeyen çok sayıda test bulunduğundan Bun upstream’ini yakından takip etmeye devam etmek gerekiyor
- Özellik uyumluluğunu korurken kodu düzenleme ve teknik borcu azaltma çalışmaları da paralel ilerliyor
- JavaScriptCore değişikliklerinin de sürekli takip edilmesi gerekiyor
Kod tabanını sadeleştirme ve modernizasyon
- Bun’da hiç kullanılmayan 11.000 satırdan fazla kod kaldırıldı
- Kodun bir bölümü yeniden yazılıp modernleştirilirken Zig standart kütüphanesinin kullanımı artırıldı
- Sadeleştirme ve modernizasyon sürecinde çeşitli hatalar da düzeltildi
- Mevcut Bun kod tabanı yaklaşık 600 bin satır büyüklüğünde ve düzenli bir duruma ulaşmak için epey alt sistemin yeniden yazılması gerektiği düşünülüyor
LLM kullanımı ve katkı politikası
- Karmaşık mevcut kodu düzenlemek için LLM’den kapsamlı biçimde yararlanılırken, buna insan gözetimi ve daha iyi geliştirme pratikleri eşlik edecek
- Kod tabanının yeterince düzenli olduğuna karar verilene kadar insanlar tarafından yazılmış katkılar kabul edilmeyecek
- Teknik borcu azaltma ve Zig’de deyimsel kod yazımına öncelik verilirken, birkaç hafta ya da ay içinde Rust Bun 1.4.0 ile uyumlu bir alternatif olabilecek bir kod tabanı hedefleniyor
- Sol veya Fable kullanabilen geliştiricilerden destek isteniyor
- Uzun vadede amaç, LLM yardımı olmadan da bakımı kolay bir kod tabanı kurmak ve geliştirme sürecinde Zig yetkinliğini artırmak
1 yorum
Hacker News yorumları
Zig’in artımlı derlemesi henüz aarch64’ü desteklemiyor ve ikili yama da yalnızca Linux bağlayıcısında mümkün, ama ana platform desteği sadece zaman meselesi gibi görünüyor
Tek kişilik bir ekibin 1 saniyelik derleme elde etmiş olması, yavaş derlemelerin özensiz geliştirme pratiklerinin sonucu olduğunu ve forka harcanan zamanın tamamen yanlış bir kaynak dağılımı olduğunu gösteriyor
Sonuçta daha fazla ya da daha iyi talimat vermekten bahsediyor gibi. Kod yapısı biraz da zevk meselesi gibi; dün de tek bir HTTP isteğini işlemek için dört arka uç sürecinin gerektiğinde ısrar eden biriyle absürt bir konuşma yaptım
İnsan müdahalesi dönemi en başından beri geçici bir aşamaydı diye düşünüyorum
Büyük projelerde bu yaygın bir şey mi, yoksa sadece benim mi haberim yok merak ediyorum
Bunun
if (false) { dead_code(); }gibi apaçık bir örnek mi, yoksa dinamik dispatch mümkün olsa da mantıken çağrılamayan bir kod mu olduğu belirsiz. İlkiyse %1,8 yüksek, ikincisiyse düşük bile olabilir; eski feature flag’lerin arkasında fiilen sonsuza dek çalışmayacak kod biriktiren çok proje varBasit yardımcılar veya üretilmiş kod gibi az miktarda ölü kod bırakılabilir, ama bazen kaldırılması zincirleme silme ve sadeleştirmelere yol açar
Teknik olarak ölü kod değildi ama küçük bir yanlış soyutlamayı temizleyince arkasından başka temizlik fırsatları da açılıyor ve sonunda geriye sadece amaçlanan işi yapan yazılım kalıyor. Kod tabanları zamanla şişer; bu yüzden Bun ölçeğinde yalnızca 11.000 satır bulunmuş olması daha şaşırtıcı
Tik aşamasında hızlıca özellik ekleyip doğru ama aşırı dağınık bir sürüm üretiyorsunuz; tak aşamasında ise ortaya çıkan şeyi sindirip toparlayarak performans, bakım yapılabilirlik ve değişikliklere kırılganlık tarafını iyileştiriyorsunuz
Bazen bir günde vibe coding ile çalışan bir uygulama yapıp, ardından onu iskambilden yapılmış bir ev gibi çökmeyecek ve üstüne özellik eklenebilecek bir projeye dönüştürmek için bir hafta harcıyorum. Yapay zekadan önce de benzerdi ama uzman geliştiricilerin sistem için daha güçlü bir zihinsel modeli vardı ve daha yavaş çalıştıkları için geçiş bu kadar sert olmuyordu
Kodlama modelleri, kapsüllemeyi bozan kestirmeleri seçmeye ya da kopyalanmaması gereken kodu çoğaltmaya çok yatkın
Büyük projelerde test çalıştırmak ya da anlam hatalarını kontrol etmek için her seferinde dakikalarca bekleyemezsiniz; bu yüzden derleme süresi açık bir darboğazdır
Bunu yapay zekayı çok savunduğum için değil; daha çok kavramsal sanat ya da deney gibi, iki projenin nasıl farklı evrileceğini görmek eğlenceli olurdu
Bağlantı: https://ziggit.dev/t/cruller-buns-zig-runtime-continued-on-z...
HN tartışması: https://news.ycombinator.com/item?id=49017344
https://nubjs.com
Amaca özel araçları birleştirmekte sorun yok ama her şeyin kutudan çıktığı gibi çalışması çok kullanışlı. Bun bundler’ında runtime API de var; böylece varlıkları sunan aynı süreç, harici bir bundler ile koordinasyon kurabilir ya da statik dosyaları diske yazmadan doğrudan bellekte bundle alabilir