Rust dilinde bellek yönetimi, garbage collector kullanmadan, çok verimli bir şekilde yapılır. Ancak bu verimlilik, dilin belirli kuralları ve kısıtlamaları sayesinde sağlanır. Ownership (Sahiplik) ve Borrowing (Ödünç Alma) bu kuralların en önemli parçalarındandır. Ve bu kuralları anlamadan bir program yazmak, doğru sonuçlar almak oldukça zor olabilir.
Ownership (Sahiplik) Nedir?
Örneğin:
fn main() {
let x = String::from("Merhaba Rust!");
let y = x; // Burada x, y'ye sahipliği verir
println!("{}", x); // Burada hata alırız
}
Bu durumda, `x`'in sahipliği `y`'ye geçer. `x`'i kullanmaya çalışmak ise bir "Ownership Borrowing Error" hatasına yol açar. Rust, aynı verinin iki farklı yere aynı anda erişilmesini engelleyerek bellek hatalarını önler.
Borrowing (Ödünç Alma) Nedir?
1. Immutable Borrowing: Bir değişkenin değerini değiştirmeden ödünç alırsınız. Birden fazla immutable borrows mümkündür.
fn main() {
let s = String::from("Merhaba Rust!");
let t = &s; // Immutable borrow
let u = &s; // Birden fazla immutable borrow yapılabilir
println!("{}", t);
println!("{}", u);
}
2. Mutable Borrowing: Bu türde yalnızca bir tane mutable borrow olabilir. Yani bir değişkenin değerini değiştirmek için yalnızca tek bir referans (mutable borrow) olmalıdır.
fn main() {
let mut s = String::from("Merhaba Rust!");
let t = &mut s; // Mutable borrow
s.push_str(" Nasılsınız?");
println!("{}", t);
}
Eğer aynı anda birden fazla mutable borrow yapmaya çalışırsanız, Rust bunu engeller ve bir "Ownership Borrowing Error" hatası verir.
Ownership Borrowing Error ve Çözümü
Örnek 1 - Mutable ve Immutable Borrow Karışımı:
fn main() {
let mut s = String::from("Rust öğreniyorum!");
let t = &s; // Immutable borrow
let u = &mut s; // Mutable borrow, hata verir
println!("{}", t);
}
Bu durumda Rust size şöyle bir hata verecektir:
```
error[E0502]: cannot borrow `s` as mutable because it is also borrowed as immutable
```
Çözüm: Mutable ve immutable borrow işlemleri arasında doğru sıralamayı yapmanız gerekir. Birini bitirip diğerini başlatmalısınız. Örneğin, immutable borrow işlemini tamamladıktan sonra mutable borrow işlemine geçebilirsiniz.
Sonuç
Rust dilinde yazılım geliştirirken, bellek yönetimi konusunda dikkatli olmalısınız. Başta zorlayıcı olabilir, ancak bu kurallar bellek güvenliği ve performans açısından büyük avantajlar sağlar. Sabırlı olun, hata yaptığınızda ise Rust’ın size sunduğu hata mesajlarını dikkatlice okuyarak sorununuzu çözebilirsiniz.