Bun Nedir?

Zafer ATLI
3 min readSep 20, 2023

--

Bun, Jarred Sumner tarafından geliştirilmiş olan, 2022 Ağustos ayında Vercelin CEO’su ve sahibi olan Guillermo Rauch tarafından 7 Milyon dolar yatırım yapılarak kurulmuş Oven firmasının çıkardığı Javascript RunTime’dır.

Bun’ın Node, Deno’dan farklı kılan ise hızı, ilk başta benim de inanamadığım şekilde 20–30 kat daha hızlı çalışıyor. Benim ilgili çeken de bu nokta oldu, teknik detaylara girmeden önce çıkış hikayesine bakalım.

Jarred 2021 yılında Browser tabanlı bir oyun geliştirmeye çalışırken, yazdığı kodların derlenmesi 30 saniyeye kadar çıkınca bu işten bir ters olduğunu düşünüp dar boğazları incelemeye başlıyor.

Kullandığı Execution Engineleri karşılaştırıyor V8, Hermes, QuickJS ve JavaScript Core. JavaScript Core’un çok iyi sonuç verdiğini görünce biraz daha derine iniyor ve yaklaşık 3 aylık bir çalışma sonucunda transpiler iyileştirmeyi başarıyor fakat halen bir problem var, installing süresi halen çok uzun sürüyor.

Şuan ki geldiği durumu düşündüğümüzde çok basit sorunlar üzerinden yola çıkarak ilerlediğini görüyoruz. Nitekim röportajında kendisinin de bu kadar ileri gideceğini tahmin etmediğini söylüyor.

Daha sonrasında JavaScript Core üzerinden ilerleyen Jarred, özellikle system çağrıların iyileştirmeler yapabileceğini gördü. Sistem çağrıları üzerinde yaptığı değişikliklerden birkaçını şöyle anlatıyor:

  1. Dosya kopyalama sistem çağrısını dosya clonlama ile değiştirdik böylelikle yazma maliyeti sıfıra inmiş oldu.
  2. Normal akışta her derlenen js dosyası için path istenip bunun sonuna stringin bittiğini belirten 0 ekleyerek gönderilmesi, bunun yerine kullanılan full path Shared Buffere alınıyor ve bunun üzerine ekleme yaparak ileniyor.
  3. Package lock dosyasında da ciddi bir değişikliğe gittiklerini söylüyor, lock dosyasını binary olarak sakladıklarını böylelikle hem daha fazla veri tutabildiği hem de daha hızlı çalıştığını anlatıyor

4. Installingi hızlandıran bir diğer özellik ise post installerin devre dışı bırakılması. Post install pek çok paket için sadece mesaj basan vakit kayıbı fakat bazı paketler için ise bcrypt gibi post install yapılması zorunlu çünkü paketin cihaza zarar vermediğinden emin olunması gerekiyor. Bunun için package json üzerinden bir key koyuluyor ve bu key ile post install yapılıp yapılmayacağı belirleniyor. Kullanıcıların bununla tek tek uğraşmaması için en popüler 10.000 paket için ön çalışma yapılmış ve varsayılan olarak ayarlanıyor.

5. String parse işlemleri modern CPU’ların kaynaklarını kullanarak multi-thread string işleme sayesinde 3 MB’lık bir string dosyasını çok rahat bir şekilde parse edebiliyor.

Bunlar ve bunun gibi pek çok çekirdek özelliği değiştirerek hızlandırmayı başarmışlar.

Zig?

Zig, Rust ve Go gibi system programlama aracı. Zig’i diğerlerinden ayıran en önemli özelliği ise çok sade çalışıyor olması, yani ne demek istiyorum. Örnek olarak Rust üzerinden bi işlem yaptığınız Rust’ın bunun üzerine ekleyerek yaptığı kontroller ve işlem olduğunu bu sebep pure kodun tek başına çalışmadığını söylüyor, Zig’de ise sadece yazdığın kodun çalıştığı bunun yanında memory işlemlerinde daha net sonuçlar aldığından bahsediyor.

Zig’in Dezavantaj olarak nitelendirme sebebi ise emsallerine göre zor bir dil olması sebebiyle community desteği olarak daha az destek bulabilmesi.

Belki de bu sebepten Windows desteği yok. Kendisine sebebi sorulduğunda şuan 7 kişinin fulltime çalıştığını, önceliğinin linux olduğunu söylüyor. Yani yazılım geliştirme maliyeti yüksek olduğu için burada gecikme oluyor.

React native konusunda neler katabileceğini sorulduğunda özellikle install ve sonrasında metronun yerini alıp bun bundler hızlı build işlemleri sağlamayı hedeflediğini söylüyor. Fakat ES6 uyumluluğunda halen eksiklerinin olduğunu tamamen uyumlu olmadıklarını söylüyor. Aslında burada hedeflerinin JavaScript’i direkt mobil cihaz üzerinden derleyen bir bundler yapmak istediklerini böylelikle dar boğazları kontrol edebilmeyi hedeflediklerini söylüyor fakat bunları söylerken daha çok uzun yol olduğunun farkında. Çünkü şuan GitHub üzerinden 1.7k issue olması, Windows eksikliği ve es6 uyumları gibi konuları ciddi zaman alacak gibi duruyor.

--

--