Bun, JavaScript için bir runtime, paketleyici (bundler), dönüştürücü (transpiler) ve test çalıştırıcısıdır. Tamamen sıfırdan geliştirilmiş, herhangi bir projeden türetilmemiştir. Yüksek performansının nedenlerinden biri olarak Zig programlama diliyle yazılmış olması gösteriliyor. Node.js'in bir alternatifi olarak ortaya çıkmış, tüm Node.js API'leriyle uyumlu ve NPM'i destekler. V8 motoru yerine Safari için geliştirilen JavaScriptCore motorunu kullanmaktadır.
Runtime Nedir?
JavaScript runtime, JavaScript kodunun çalıştırılmasını ve işlenmesini sağlayan bir ortam veya sistemdir. Örnekler: Google Chrome, Safari, Node.js, Deno
Bundler Nedir?
JavaScript bundler, birden fazla JavaScript dosyasını ve bağımlılıklarını tek bir dosyada veya birkaç optimize edilmiş dosyada birleştirir. Web uygulamasının yüklenmesi ve çalışması için gerekli kaynakları optimize etmek ve düzenlemek amacıyla kullanılır. Örnekler: Webpack, Rollup, Parcel
Transpiler Nedir?
JavaScript transpiler, JavaScript kodunu başka bir sürüme veya dile dönüştüren bir araçtır. Genellikle, yeni JavaScript özellikleri kullanılarak yazılmış kodları eski sürümlerle uyumlu hale getirir. Örneğin, Babel, ES6 ve ES7 gibi yeni ECMAScript standartlarını daha eski tarayıcılar ve ortamlar için uyumlu ES5 JavaScript koduna dönüştürür.
Ana Özellikleri
Bun'ın 3 temel özelliği vardır. Bunlar sırasıyla;
- Hız: Node.js ve Deno'dan daha hızlı, JavaScriptCore motorunu kullanıyor ve minimum bağımlılık içeriyor.
- API: Yüksek performanslı, minimal ve optimize edilmiş bir API sağlar.
- Bütünleşik Geliştirici Deneyimi: Sunucu ve istemci için tam bir araç seti sunar; paket yöneticisi, test çalıştırıcısı ve paketleyici içerir.
Özellikler ve Avantajları
- Bun, Node.js ve Deno'ya göre çok daha hızlıdır. Basit bir console.log işlemini bile Node.js'ten 4 kat daha hızlı çalıştırdığı iddia ediliyor. TypeScript ile kullanıldığında ise yaklaşık 40 kat daha hızlı olduğu belirtiliyor.
- Node.js ile tam uyumludur ve Node.js ile oluşturulan projeler, birkaç eksik API hariç, Bun'da sorunsuz çalışır.
node_modules
ile uyumlu çalışır ve yerel NPM istemcisini kullanır.- Bun, CommonJS ve ESM kuralları, uzantılar ve package.json ayarları gibi özelliklerle uyumludur; hatta CommonJS ve ESM birlikte çalışabilir.
- Web standartlarındaki API'lar (fetch, Request, Response, WebSocket, ReadableStream, FormData vb.) sorunsuz çalışır.
- JSX ve TypeScript desteği sunar; ek paket yüklemeye gerek yoktur.
- Kendi watch modu ve hot reloading özelliklerine sahiptir.
--watch
komutu ile değişiklikleri izler ve--hot
ile sıcak yeniden yükleme yapar. - Ortam değişkenleri (Environment Variables), herhangi bir bağımlılık olmadan çalışır.
...gibi bir çok özellik ve avantaja sahiptir.
Bu yazımda Bun'ı genel olarak anlattım. Bun ile ilgili bir sonraki yazımda Bun'ın nasıl kurulduğunu ve sunduğu API'ları inceleyeceğiz.
Kaynakça