← Tüm yazılar

Rust nedir ve geliştiriciler neden Rust'a geçiyor?

Burncode Team 3 dk okuma

Rust, “en sevilen dil” anketlerinde sürekli zirvede yer alıyor ve bu sefer övgülerin çoğu hak edilmiş. Rust, ayın moda framework'ü değil; C ve C++'ın onlarca yıldır yaşadığı bir sorunu çözen bir sistem programlama dili: yalnızca canlı ortamda, gece 2'de, gerçek yük altında ortaya çıkan bellek hataları.

Rust'ın çözmek için geliştirildiği sorun

C ve C++ gibi dillerde belleği kendiniz yönetirsiniz. Bu size hız ve kontrol sağlar ama beraberinde bütün bir hata kategorisini de getirir: use-after-free, null pointer dereference, data race gibi kod incelemesinde yakalanması bilinen şekilde zor, canlıya çıktıktan sonra ayıklanması ise daha da zor hatalar. Yıllar içinde ortaya çıkan ciddi güvenlik açıklarının büyük bir kısmı tam da bu tür hatalı bellek yönetimine dayanıyor.

Rust'ın cevabı “borrow checker”dır: derleyicinin, bir bellek parçasının kime ait olduğu ve ne kadar süreyle sahiplenildiği konusunda katı kurallar uygulayan bileşeni. Kodunuz bir bellek hatasına yol açacaksa basitçe derlenmez. Bu, Rust kullandığınız ilk hafta sinir bozucudur; sonraki her hafta ise gerçekten içinizi rahatlatır.

Bunun pratikteki önemi

  • Çöp toplayıcı olmadan performans: Rust, C++ ile hemen hemen aynı hızda çalışır, ancak Java ya da Go'nun yaptığı gibi belleği temizlemek için programınızı duraklatmaz.
  • Canlı ortamda daha az olay: Bütün çökme ve güvenlik açığı sınıfları, bir kullanıcı tarafından değil derleme anında yakalanır.
  • Gerçekten işe yarayan eşzamanlılık: Rust'ın sahiplik kuralları, çok iş parçacıklı kodda izini sürmesi en zor hatalardan biri olan data race'leri yanlışlıkla yazmayı çok daha zor hâle getirir.

Rust gerçekte nerelerde kullanılıyor?

Rust, tarayıcı motorları gibi işler için bir sistem dili olarak doğdu ama bugün bunun çok ötesine yayılmış durumda. Hem hızlı hem de güvenilir olması gereken backend servisleri, komut satırı araçları (modern geliştirici araçlarının büyük bir kısmı Rust ile yazılıyor), kaynakların kısıtlı olduğu gömülü sistemler ve IoT cihazları ile bir çökmenin gerçekten pahalıya mal olduğu altyapılar — yani kritik backend mantığı çalıştıran her şey için artık ciddi bir seçenek.

Dürüst olmak gerekirse dezavantajı

Rust'ın gerçek bir öğrenme eğrisi var ve bunu hiç saklamıyor. Borrow checker, siz neden çalışmadığını anlayana kadar “apaçık çalışması gereken” kodu reddeder; çöp toplayıcılı dillerden gelen pek çok deneyimli geliştirici için bu alışma dönemi sinir bozucudur. Ayrıca her iş için doğru araç da değildir: Gereksinimleri basit bir CRUD web uygulaması geliştiriyorsanız, Rust'ın sunduğu güvenlik garantileri Go ya da tipli bir backend framework'üne kıyasla harcayacağınız ek geliştirme süresine değmeyebilir.

Öğrenmeye değer mi?

Performansın kritik olduğu, bir çökmenin pahalıya mal olduğu ya da güvenlik açısından hassas altyapıya dokunan herhangi bir şey üzerinde çalışıyorsanız evet, Rust bu yatırıma değer. Geliştirme hızının milisaniye kazanmaktan daha önemli olduğu tipik web ürünleri geliştiriyorsanız Rust olmazsa olmaz değil, olsa iyi olur kategorisindedir.

En moda aracı değil, bir sistemin gerçek performans ve güvenilirlik gereksinimlerine uygun aracı seçmek, gerçek trafik altında ayakta kalan altyapıyı kalamayandan ayıran şeylerin başında gelir. Yanlış seçimin bedelinin ilk gün değil aylar sonra ortaya çıktığı bulut ve altyapı projelerimizde sürekli verdiğimiz kararlar da tam olarak bunlardır.