Rust używa narzędzia do sprawdzania pożyczek, aby wymusić swoje zasady własności i zapewnić, że programy są bezpieczne w pamięci. Zasady własności określają, w jaki sposób Rust zarządza pamięcią na stosie i stercie.
Pisząc programy w języku Rust, będziesz musiał używać zmiennych bez zmiany własności powiązanej wartości. Rust zapewnia solidny mechanizm pożyczania, aby zachęcić do elastyczności i ponownego wykorzystania kodu.
Co to jest pożyczanie w Rust?
Pożyczanie to dostęp do wartości zmiennej bez przejęcie na własność zmiennej odwołując się do właściciela. Moduł sprawdzania pożyczek zapewnia, że odwołanie jest prawidłowe, a dane nie są usuwane przy użyciu konstrukcji zwanej okresami życia.
Czas życia to jak długo istnieje zmienna. Czasy życia zaczynają się od stworzenia zmiennych i kończą się na zmiennych zniszczeniach. Możesz pożyczyć własność zmiennej, a gdy pożyczone odwołanie jest poza zakresem, własność wraca do zmiennej właściciela. Pożyczanie jest trochę podobne do wskaźniki, które znajdziesz w językach takich jak C++ i Go
. Ale kompilator Rusta używa narzędzia do sprawdzania pożyczek, aby zapewnić, że programy są bezpieczne w pamięci.Przykład pożyczania w Rust
Możesz pożyczyć własność zmiennej, odwołując się do właściciela za pomocą symbolu ampersand (&).
fnGłówny() {
wynajmować x = Strunowy::from("cześć"); // x posiada "cześć"
wynajmować y = &x; // y odwołuje się do x, pożycza "cześć"
drukuj!("{}", x);
drukuj!("{}", y)
}
Bez zapożyczania się przez odniesienie program wpadłby w panikę. Naruszyłoby to zasadę własności, że wartość może mieć jednego właściciela, a dwie zmienne nie mogą wskazywać na tę samą lokalizację w pamięci. Pożyczanie może być bardzo przydatne w funkcjach. Oto przykład pożyczania w funkcji, aby zachować własność podczas wywoływania innych funkcji, które przyjmują zmienne lokalne jako argumenty.
fnprint_even(wektor: &Vec<i32>) {
dla wartości w wektor {
jeśli wartości % 2 == 0 {
drukuj!("{}", wartości);
}
}
}
The print_even funkcja odwołuje się do wektora 32-bitowych liczb całkowitych jako swojego argumentu. Następnie wypisuje wiersze wartości będących wielokrotnościami dwóch w wektorze za pomocą pętli for i println! makro.
fnGłówny() {
wynajmować numer_wektor = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
print_even(&numer_wektor); // własność pożyczona, nie przeniesiona
drukuj!(„Główna funkcja zachowuje własność wektora liczbowego{:?}”, number_vector)
}
Funkcja main deklaruje zmienną number_vector i przypisuje jej wektor 32-bitowych liczb całkowitych. Następnie wywołuje funkcję print_even i przekazuje jej odwołanie do numer_wektora zmienna za pomocą symbolu ampersand.
Główną funkcją jest zachowanie własności numer_wektora zmienna może nadal używać wartości w swojej lokalizacji pamięci.
Pożyczanie i mutowanie referencji
Funkcje mogą również modyfikować pożyczone zmienne, używając zmiennych odwołań do nich, przed zwróceniem własności.
Jednak w przeciwieństwie do zwykłych zmiennych, które można ustawić jako zmienne za pomocą słowa kluczowego mut, należy poprzedzić zmiennymi odniesieniami symbol ampersand.
Przed utworzeniem zmiennych odwołań zmienna, którą chcesz zmodyfikować, musi być zmienna.
fnusuń_wartość(wektor: &mutaVec<i32>) -> &Vec<i32> {
vectr.usuń(4);
zwrócić wektor
}
The usuń_wartość funkcja przyjmuje odwołanie do mutowalnego wektora 32-bitowych liczb całkowitych. Zwraca wektor 32-bitowych liczb całkowitych po usunięciu wartości wektora w czwartym indeksie.
fnGłówny() {
wynajmowaćmuta liczba = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
usuń_wartość(&muta liczby); // tu odwołanie zmienne
drukuj!("{:?}", liczba);
}
Funkcja modyfikuje liczba vector, wywołując remove_value i przekazując zmienną referencję wektora jako argument. Podczas drukowania wektora, poprzedni czwarty indeks wektora nie istnieje.
Zauważ, że argument jest odniesieniem do mutowalnego wektora.
Ważne jest, aby zrozumieć własność i pożyczki
Musisz zrozumieć własność i pożyczanie, aby napisać wydajny, bezpieczny w pamięci kod Rust, który się kompiluje i uruchamia. Jeśli Twój kod nie jest zgodny z zasadami własności, narzędzie do sprawdzania wypożyczeń to wykryje. Będziesz musiał zabezpieczyć swój program w pamięci, aby Rust mógł go skompilować.
Sprawdzanie pożyczki jest denerwujące, gdy jesteś nowy w Rust. Ale kiedy będziesz pisać więcej kodu w Rust, przyzwyczaisz się do tego i zdobędziesz doświadczenie w pisaniu bezpiecznego dla pamięci kodu Rust.