Rust, sahiplik kurallarını uygulamak ve programların bellekte güvenli olmasını sağlamak için bir ödünç alma denetleyicisi kullanır. Sahiplik kuralları, Rust’ın yığın ve öbek üzerindeki belleği nasıl yöneteceğini belirler.

Rust'ta Borçlanmayı Anlamak

Rust programlarını yazarken, ilişkili değerin sahipliğini değiştirmeden değişkenleri kullanmanız gerekecek. Rust, esnekliği ve kodun yeniden kullanımını teşvik etmek için sağlam bir ödünç alma mekanizması sağlar.

Rust’ta Borçlanma Nedir?

Ödünç alma , sahibine atıfta bulunarak değişkenin sahipliğini almadan bir değişkenin değerine erişmektir . Ödünç alma denetleyicisi, referansın geçerli olmasını ve ömürler adı verilen bir yapı kullanılarak verilerin bırakılmamasını sağlar.

Ömür, bir değişkenin var olduğu süredir. Yaşam süreleri, değişken oluşturma ile başlar ve değişken yok etme ile sona erer. Bir değişkenin sahipliğini ödünç alabilirsiniz ve ödünç alınan referans kapsam dışında olduğunda sahiplik, sahip değişkenine geri döner. Ödünç alma, biraz C++ ve Go gibi dillerde bulacağınız işaretçilere benzer . Ancak Rust derleyicisi, programların bellekte güvenli olduğundan emin olmak için ödünç alma denetleyicisini kullanır.

Rust’ta Ödünç Alma Örneği

Ve işareti (&) sembolünü kullanarak sahibine atıfta bulunarak bir değişkenin sahipliğini ödünç alabilirsiniz.

fn main() {

  let x = String::from(“hello”); // x owns “hello”

  let y = &x; // y references x, borrows “hello”

  println!(“{}”, x);

  println!(“{}”, y)

}

Referans vererek ödünç almadan program paniğe kapılır. Bir değerin bir sahibi olabileceği ve iki değişkenin aynı bellek konumunu gösteremeyeceği sahiplik kuralını ihlal eder. Ödünç alma, işlevlerde çok yararlı olabilir. Burada, yerel değişkenleri bağımsız değişken olarak alan diğer işlevleri çağırırken mülkiyeti korumak için bir işlevde ödünç alma örneği verilmiştir.

fn print_even(vectr: &Vec<i32>) {

  for values in vectr {

    if values % 2 == 0 {

      println!(“{}”, values);

    }

  }

}

print_even işlevi, bağımsız değişkeni olarak 32 bitlik tamsayılardan oluşan bir vektöre başvurur . Daha sonra bir for-loop ve println! makro.

fn main() {

  let number_vector = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];

  print_even(&number_vector); // ownership is borrowed, not moved

  println!(“The main function retains ownership of the number vector{:?}”, number_vector)

}

Ana işlev, number_vector değişkenini bildirir ve ona 32 bitlik tamsayılardan oluşan bir vektör atar. Daha sonra print_even işlevini çağırır ve ona ve işareti simgesini kullanarak number_vector değişkenine bir başvuru iletir.

Ana işlev, sayı_vektör değişkeninin sahipliğini korur ve değeri hafıza konumunda kullanmaya devam edebilir.

Rust’ta atıfta bulunularak ödünç almanın sonucu

Ödünç Alma ve Mutasyon Referansları

İşlevler ayrıca, ödünç alınan değişkenleri, sahipliğini iade etmeden önce, onlara değişken referanslar kullanarak değiştirebilir.

Ancak, mut anahtar kelimesi kullanılarak değişken olarak ayarlanabilen normal değişkenlerin aksine, değişken referansların önüne ve işareti simgesi koymalısınız.

Değişken referanslar yapmadan önce, değiştirmek istediğiniz değişken değişken olmalıdır.

fn remove_value(vectr: &mut Vec<i32>) -> &Vec<i32> {

  vectr.remove(4);

  return vectr

}

remove_value işlevi, 32 bitlik tamsayılardan oluşan değişken bir vektörün referansını alır . Dördüncü dizindeki vektörün değerini çıkardıktan sonra 32 bitlik tamsayılardan oluşan bir vektör döndürür.

fn main() {

  let mut nums = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];

  remove_value(&mut nums); // mutable reference here

  println!(“{:?}”, nums);

}

İşlev, remove_value öğesini çağırarak ve bir vektörün değişken referansını argüman olarak ileterek nums vektörünü değiştirir. Vektörü yazdırırken, vektörün önceki dördüncü dizini mevcut değil.

Argümanın değişken bir vektöre referans olduğuna dikkat edin.

Rust’ta Referansları Ödünç Alma ve Mutasyona uğratmanın sonucu

Mülkiyet ve Borçlanmayı Anlamak Önemlidir

Derleyen ve çalıştıran verimli, bellek açısından güvenli Rust kodu yazmak için mülkiyeti ve ödünç almayı anlamanız gerekir. Kodunuz sahiplik kurallarına uymuyorsa, ödünç alma denetleyicisi bunu algılar. Rust’ın derlemesi için programınızı bellek açısından güvenli hale getirmeniz gerekir.

Rust’ta yeniyken ödünç alma denetleyicisi can sıkıcıdır. Ancak, daha fazla Rust kodu yazdıkça buna alışacak ve bellek açısından güvenli Rust kodu yazma konusunda deneyim kazanacaksınız.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir