Rust'ta Borrowing (Ödünç Alma) Nedir?
Özellikle "immutable" yani değiştirilemez borçlanma, değerin sadece okuma işlemleri için kullanılmasına izin verir. Bu durumda, değerin iki farklı yerden aynı anda okunmasına olanak sağlarsınız. Fakat, bir değer üzerinde birden fazla "immutable" borç alma işlemi aynı anda yapılmaya çalışıldığında, Rust bu durumu güvenlik açığı olarak görür ve "Cannot borrow immutable twice" hatasını verir.
Hata Ne Zaman Ortaya Çıkar?
Örnek olarak, şöyle bir kod yazdığınızı varsayalım:
fn main() {
let a = String::from("Merhaba, Rust!");
let b = &a; // İlk immutable borrow
let c = &a; // İkinci immutable borrow
println!("{}", b);
println!("{}", c);
}
Bu kodda, `a` değişkenini aynı anda iki kez immutable olarak ödünç alıyoruz. Rust, bu durumu güvenlik açısından yasaklar ve "Cannot borrow immutable twice" hatasını verir.
Bu Hata Nasıl Çözülür?
1. Bir değeri sadece bir kez immutable olarak ödünç almak
2. Değeri mutable olarak ödünç almayı düşünmek
Rust, yalnızca bir immutable referansı aynı anda tanımlamanıza izin verir. Ancak, bir değişken üzerinde yalnızca bir tane mutable referans olması gerektiği gibi, aynı anda birden fazla mutable referans da alamazsınız. Bu, programın bellek güvenliği ve performans açısından kritik bir kuraldır.
Kodunuzda bu hatayı düzeltmek için, ikinci borçlanma işlemini kaldırabilir veya mutable bir referans kullanabilirsiniz. İşte bir çözüm önerisi:
fn main() {
let a = String::from("Merhaba, Rust!");
let b = &a; // İlk immutable borrow
// let c = &a; // İkinci immutable borrow bu satırı kaldırdık
println!("{}", b);
}
Ya da, eğer gerçekten birden fazla yere aynı veriyi mutable olarak ödünç almak istiyorsanız, aşağıdaki gibi bir yaklaşımı benimseyebilirsiniz:
fn main() {
let mut a = String::from("Merhaba, Rust!");
let b = &mut a; // Mutable borrow
println!("{}", b);
}
Burada, `a` değişkenini mutable olarak ödünç alıyoruz ve aynı anda sadece bir referans kullanılıyor. Bu sayede Rust, bellek güvenliğini sağlıyor.
Sonuç
Unutmayın, Rust’ın borçlanma kuralları ilk başta zorlayıcı olabilir, ancak programlamadaki güvenlik ve verimlilik için büyük bir adımdır. Başka bir yazıda, Rust’ta borçlanma ve sahiplik üzerine daha derinlemesine bir inceleme yapabiliriz!