Ownership ve Borrowing Nedir?
Rust'ta Ownership Hataları
fn main() {
let s1 = String::from("Merhaba, Rust!");
let s2 = s1; // Burada s1'ın sahipliği s2'ye geçiyor
println!("{}", s1); // Bu satırda s1 artık geçerli değil, hata verir.
}
Yukarıdaki kodda, s1 değişkeninin sahipliği s2'ye devredildikten sonra, s1’i kullanmaya çalışıyoruz. Rust, sahipliğin transferinden sonra s1’in kullanılmasını engeller. Bu, bellek güvenliğini sağlamak için Rust'ın tasarımının bir parçasıdır.
Ownership Hatası çözümü:
Rust’ta sahiplik transferi sırasında bir değişkenin artık geçerli olmaması, dilin bellek güvenliği sağlama amacıdır. Eğer bir değişkeni başka bir değişkene devretmek istemiyorsanız, clone() fonksiyonunu kullanabilirsiniz.
fn main() {
let s1 = String::from("Merhaba, Rust!");
let s2 = s1.clone(); // Burada s1 kopyalanır, sahiplik geçmez
println!("{}", s1); // Artık s1 geçerli, hata vermez.
}
Borrowing Hataları
fn main() {
let mut s = String::from("Rust Programlama");
let r1 = &s; // immutable borrowing
let r2 = &s; // immutable borrowing
let r3 = &mut s; // mutable borrowing, hata!
println!("{}", r1); // Bu satırda r1 geçerli
}
Burada, r1 ve r2 değişkenleri `s` üzerinde sadece okuma yapabilirken, r3 değişkeni `s` üzerinde değiştirme yapmak istiyor. Ancak Rust, aynı anda immutable ve mutable borrow yapılmasına izin vermez. Bu, verinin bozulmaması ve bellek hatalarının önlenmesi için gerekli bir kısıtlamadır.
Borrowing Hatası çözümü:
Bu hatayı önlemek için, ya immutable borrows kullanarak sadece okuma yapmalısınız ya da mutable bir borrow işlemi gerçekleştirdiğinizde, başka hiçbir borrow işlemi yapmamalısınız.
fn main() {
let mut s = String::from("Rust Programlama");
let r1 = &s; // immutable borrowing
println!("{}", r1); // Bu satırda r1 geçerli
let r3 = &mut s; // Artık r1 kullanımda olmadığı için mutable borrowing yapılabilir
r3.push_str(" Dili"); // s artık değiştirilebilir
}
Conclusion
Rust’ın bu güçlü özellikleri, başlangıçta zorlayıcı olabilir, ancak bir kez doğru şekilde anladığınızda, kodunuzun güvenliği ve verimliliği konusunda büyük faydalar sağlayacaktır.