Rust, sahiplik kurallarını uygulamak ve programların bellek açısından güvenli olmasını sağlamak için bir ödünç alma denetleyicisi kullanır. Sahiplik kuralları, Rust'ın yığın ve yığın üzerinden belleği nasıl yönettiğini belirler.
Rust programlarını yazarken, ilişkili değerin sahipliğini değiştirmeden değişkenleri kullanmanız gerekir. 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, bir değişkenin değerine değişkenin sahipliğini almak sahibine atıfta bulunarak. Ödünç alma denetleyicisi, referansın geçerli olmasını ve yaşam süreleri adı verilen bir yapı kullanılarak verilerin bırakılmamasını sağlar.
Ömür, bir değişkenin ne kadar süredir var olduğudur. Ömürler, 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. Borçlanma biraz C++ ve Go gibi dillerde bulacağınız işaretçiler
. Ancak Rust derleyicisi, programların bellekte güvenli olduğundan emin olmak için ödünç alma denetleyicisini kullanır.Rust'ta Borçlanma Örneği
Ve işareti (&) simgesini kullanarak sahibine atıfta bulunarak bir değişkenin sahipliğini ödünç alabilirsiniz.
fnana() {
İzin Vermek x = Sicim::from("merhaba"); // x "merhaba"nın sahibi
İzin Vermek y = &x; // y, x'e atıfta bulunur, "merhaba"yı ödünç alır
yazdır!("{}", x);
yazdır!("{}", 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 konumuna işaret edemeyeceği sahiplik kuralını ihlal eder. Borçlanma, fonksiyonlarda çok faydalı olabilir. Yerel değişkenleri argüman olarak alan diğer fonksiyonları çağırırken sahipliği korumak için bir fonksiyonda ödünç alma örneği.
fnprint_even(vektör: &Vec<i32>) {
için değerler içinde vektör {
eğer değerler % 2 == 0 {
yazdır!("{}", değerler);
}
}
}
bu print_even işlev, bağımsız değişkeni olarak 32 bit tam sayılardan oluşan bir vektöre başvurur. Daha sonra bir for-döngüsü ve println! kullanarak vektörde ikinin katları olan değer satırlarını yazdırır. makro.
fnana() {
İzin Vermek sayı_vektör = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
print_even(&sayı_vektör); // sahiplik ödünç alınır, taşınmaz
yazdır!("Ana işlev, {:?} sayı vektörünün sahipliğini korur", sayı_vektör)
}
Ana işlev, sayı_vektör değişkenini bildirir ve ona 32 bit tamsayılardan oluşan bir vektör atar. Daha sonra print_even işlevini çağırır ve ona bir referans iletir. sayı_vektör ve işareti simgesini kullanarak değişken.
Ana işlev, mülkün sahipliğini korur. sayı_vektör değişken, değeri bellek konumundaki kullanmaya devam edebilir.
Referansları Ödünç Alma ve Mutasyona Uyarlama
İşlevler, mülkiyeti iade etmeden önce, ödünç alınan değişkenleri, bunlara değiştirilebilir referanslar kullanarak da değiştirebilir.
Ancak, mut anahtar sözcüğü kullanılarak mutable olarak ayarlanabilen normal değişkenlerin aksine, değiştirilebilir referansların önüne ve işareti eklemelisiniz.
Değişken referanslar yapmadan önce, değiştirmek istediğiniz değişken değişken olmalıdır.
fnkaldır_değer(vektör: &mutVec<i32>) -> &Vec<i32> {
vektör.kaldır(4);
dönüş vektör
}
bu kaldır_değer işlevi, 32 bit tam sayıların değişken bir vektörünün referansını alır. Dördüncü dizindeki vektörün değerini çıkardıktan sonra 32 bit tam sayılardan oluşan bir vektör döndürür.
fnana() {
İzin Vermekmut sayılar = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
kaldır_değer(&mut sayılar); // burada değişken referans
yazdır!("{:?}", sayılar);
}
işlev değiştirir sayılar kaldır_değerini çağırarak ve bir vektörün değişken referansını argüman olarak ileterek vektör. Vektörü yazdırırken, vektörün önceki dördüncü indeksi mevcut değil.
Argümanın değiştirilebilir bir vektöre referans olduğuna dikkat edin.
Mülkiyet ve Borçlanmayı Anlamak Önemlidir
Derleyen ve çalışan 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ılayacaktır. Rust'ın derlemesi için programınızı bellek açısından güvenli hale getirmeniz gerekecek.
Rust'ta yeniyseniz, ödünç alma denetleyicisi can sıkıcıdır. Ancak daha fazla Rust kodu yazdıkça buna alışacak ve hafızaya zarar vermeyen Rust kodu yazma konusunda deneyim kazanacaksınız.