Borrow Checker Nedir?
Rust, bellek güvenliği konusunda çok katı bir dizi kural koyar. Bu kurallar, geliştiricilerin hata yapmasını engeller ve bellek sızıntıları ile çökme risklerini minimize eder. Bu güvenliği sağlamak için Rust, *ownership* ve *borrowing* kavramlarını kullanır. Ancak burada devreye giren şey, işin karmaşık kısmı: Borrow Checker.
Borrow Checker Hatası Neden Ortaya Çıkar?
Birçok zaman, kod yazarken "borrow checker" hataları ile karşılaşırsınız ve kendinizi şu soruyu sorarken bulabilirsiniz: "Bu veri zaten doğru bir şekilde ödünç alınmıştı, neyi yanlış yapıyorum?". Aslında Rust, verinin üzerine birden fazla değiştirilebilir borç almak ya da aynı anda hem değiştirilebilir hem değiştirilemez borç almak gibi hatalı durumları engeller. İşte bu noktada *borrow checker* devreye girer ve size hata verir.
fn main() {
let mut x = 5;
let y = &x; // Immutable borrow
let z = &x; // Immutable borrow again
let w = &mut x; // Mutable borrow, will cause error!
}
Bu kodu yazdığınızda, Rust derleyicisi şu hatayı verecektir:
```
cannot borrow `x` as mutable because it is also borrowed as immutable
```
Burada `x`'i önce değiştirilmez olarak ödünç alıyoruz (`&x`), ancak sonra aynı veriyi değiştirmeye çalışıyoruz (`&mut x`). Rust, bir veriyi aynı anda hem değiştirilmez hem de değiştirilebilir olarak ödünç almayı yasaklar. Çünkü bu durumda veri güvenliği riske girer.
Borrow Checker Hatası Nasıl Çözülür?
Peki bu hatayı nasıl çözebiliriz? Çözüm basit: Kodunuzun veri borçlarını dikkatlice kontrol edin ve borçlanma türlerinin (değiştirilebilir veya değiştirilemez) çelişmediğinden emin olun.
1. Değiştirilemez borçları yalnızca okuma için kullanın: Verinizi yalnızca okuma amacıyla ödünç alıyorsanız, değiştirilemez borçlar kullanın.
2. Değiştirilebilir borçları yalnızca yazma amacıyla kullanın: Eğer veriyi değiştirecekseniz, yalnızca değiştirilebilir borç kullanın. Ve bu borçlanmanın diğer borçlarla çakışmadığına dikkat edin.
3. Kodunuzu daha küçük fonksiyonlara ayırın: Eğer borçların yönetilmesi zorlaşıyorsa, kodunuzu daha küçük ve anlaşılır parçalara ayırmak sorunu çözebilir.
Rust’taki borçlanma kuralları başta zorlayıcı gibi görünse de, onları doğru şekilde kullanmayı öğrendikçe, kodunuzun bellek güvenliği artacak ve hatalarla karşılaşma oranınız azalacaktır.