“Cannot borrow immutable twice” hatası nedir?
Rust, veri üzerinde işlem yaparken, verilerin hem güvenli hem de verimli bir şekilde yönetilmesini sağlar. Bu yönetimin temel taşlarından biri de "borrowing" (ödünç alma) konseptidir. Rust, veri üzerinde birden fazla işlem yapmaya olanak tanırken, aynı anda hem değiştirilemez (immutable) hem de değiştirilebilir (mutable) referansların olmasına izin vermez.
İşte tam burada, “Cannot borrow immutable twice” hatası devreye girer. Bu hata, bir veri parçası üzerinde iki kez immutable referans almaya çalıştığınızda ortaya çıkar. Yani, aynı veri üzerinde birden fazla okuyucu (immutable reference) olmasına izin verilmez.
Örnek Senaryo:
Diyelim ki bir fonksiyon yazdınız ve bir değişkene iki kez immutable referans vermek istiyorsunuz. Bu, Rust'ın borrowing kurallarına aykırıdır, çünkü bir veri üzerinde birden fazla immutable referans alırsanız, Rust bu durumu “belirli bir zamanda birden fazla okuyucuya” izin veremeyeceğini belirterek hata verir.
Hatanın çözümü
Rust, bu tür hataların önüne geçmek için çok katı kurallar koyar ve genellikle çözüm oldukça basittir. Şimdi, size bu hatayı nasıl çözebileceğinizi anlatacak bir örnek üzerinden gidelim.
fn main() {
let s = String::from("Hello, Rust!");
// Hata! Aynı veriye iki kez immutable referans alınamaz.
let r1 = &s;
let r2 = &s;
println!("{}", r1);
println!("{}", r2);
}
Çözüm: Hatanın kaynağı, aynı veri üzerinde iki kez immutable referans almak. Bunu düzeltmek için, sadece bir referansın varlığını garantileyebilirsiniz. Bunu, ya referanslardan birini kaldırarak ya da farklı bir yaklaşımla çözebilirsiniz.
Doğru Kullanım:
fn main() {
let s = String::from("Hello, Rust!");
// Sadece bir referans alınabilir.
let r1 = &s;
println!("{}", r1);
}
Bu şekilde, sadece bir immutable referans alarak hatayı çözebilirsiniz.
Sonuç olarak
Rust’ın bellek güvenliği sağlama amacıyla getirdiği bu kurallar, başlangıçta kafa karıştırıcı olabilir. Ancak, “Cannot borrow immutable twice” hatası, programcıyı verimli ve güvenli bir kod yazmaya zorlar. Unutmayın, eğer veriye yalnızca okuma yapacaksanız, sadece bir immutable referans kullanmalısınız. Eğer veriyi değiştirecekseniz, mutable referans kullanmanız gerekir.
İpucu: Rust’ta borrowing kurallarını anlamak ve doğru kullanmak, yazılım geliştirme sürecinde size büyük fayda sağlayacaktır. Kod yazarken bu kurallara dikkat etmek, daha güvenli ve hatasız bir uygulama geliştirmenize olanak tanır.