Ownership ve Borrowing Nedir?
Bir Zamanlar, Bir Rust Değişkeni
let x = String::from("Merhaba Rust!");Şimdi, bu değişkenin sahipliği `x`'e aittir. Bu ne demek? Bu demek oluyor ki, bu string'in bellek üzerindeki yerini sadece `x` kullanabilir. Ama burada işler karışmaya başlayacak. Eğer başka bir değişken, `x`'in sahip olduğu bu veriye ulaşmaya çalışırsa, Rust bize hata verecektir. İşte ownership hatalarını anlamanın ilk adımı: bir değerin yalnızca bir sahibi olmalıdır.
Sahiplik Hataları: Bir Nesne, Bir Sahip
let y = x;Bunu yaptığınızda, `x`'in sahipliği `y`'ye geçer. Ancak, bu noktada `x` artık geçerli bir değişken değildir. Eğer ardından `x`’i kullanmaya çalışırsak, Rust bize şu hatayı verecektir:
error: use of possibly-dangling referenceBu hata, "x'in sahipliği y’ye geçtiği için x artık geçerli değil" anlamına gelir. Rust, her şeyin bellek üzerinde güvenli bir şekilde yönetilmesini garanti eder, bu yüzden bu hatayı görmemiz şaşırtıcı değil.
Borrowing: Paylaşmanın Gücü
let z = &x;Burada `z`, `x`'in referansını alır. Yani, `x`'in sahipliğini kaybetmeden, `z` değişkeni üzerinden `x`'in verilerine erişebiliriz. Ancak burada dikkat edilmesi gereken bazı kurallar vardır. Bir değişkenin mutable (değiştirilebilir) olup olmaması durumuna göre farklı davranışlar sergileriz.
Borrowing Hataları: Çoklu Okuma, Tekli Yazma
let z = &x;
let w = &x;Rust bu durumu kabul eder, çünkü aynı değişkene birden fazla immutable (değiştirilemez) referans verebiliriz. Ancak, şayet bir değişkene mutable (değiştirilebilir) referans verirsek, Rust sadece bir tane olmasına izin verir:
let z = &mut x;Bu durumda, Rust size bir hata verir:
error: cannot borrow `x` as mutable because it is also borrowed as immutableBu hata, Rust'ın bellek güvenliği anlayışının bir parçasıdır. Bir nesneyi birden fazla yerden değiştirmek, çoklu yazma hatalarına yol açabileceğinden, Rust bunu engeller.
Çözüm: Sakin Olun ve Kuralları Anlayın
- Bir değişkenin yalnızca bir sahibi olabilir.
- Bir değişkenin immutable referansları birden fazla olabilir, ancak mutable referans sadece bir tane olabilir.
- Sahipliği başka bir değişkene devrettiğinizde, ilk değişken geçersiz olur.
Rust’ın ownership ve borrowing sistemleri başta zorlayıcı olsa da, bir kez bu kuralları içselleştirdiğinizde, yazdığınız kod daha güvenli ve verimli hale gelir. Unutmayın, her hata, sizi Rust dünyasında bir adım daha ileriye götüren bir öğrenme fırsatıdır!