Rust folosește un verificator de împrumuturi pentru a-și aplica regulile de proprietate și pentru a se asigura că programele sunt sigure pentru memorie. Regulile de proprietate dictează modul în care Rust gestionează memoria peste stivă și heap.
Pe măsură ce scrieți programe Rust, va trebui să utilizați variabile fără a schimba dreptul de proprietate asupra valorii asociate. Rust oferă un mecanism robust de împrumut pentru a încuraja flexibilitatea și reutilizarea codului.
Ce este împrumutul în Rust?
Împrumutul înseamnă accesarea valorii unei variabile fără preluarea proprietății variabilei prin referirea proprietarului. Verificatorul de împrumut se asigură că referința este validă și că datele nu sunt eliminate folosind un construct numit durate de viață.
O viață este cât de mult există o variabilă. Duratele de viață încep cu crearea variabilelor și se termină cu distrugerea variabilei. Puteți împrumuta dreptul de proprietate asupra unei variabile, iar atunci când referința împrumutată este în afara domeniului de aplicare, proprietatea revine la variabila proprietar. Împrumutul este un pic ca
indicatorii pe care îi veți găsi în limbi precum C++ și Go. Dar compilatorul Rust folosește verificatorul de împrumut pentru a se asigura că programele sunt sigure pentru memorie.Un exemplu de împrumut în Rust
Puteți împrumuta proprietatea unei variabile prin referirea proprietarului folosind simbolul și (&).
fnprincipal() {
lăsa x = Şir::de la ("bună ziua"); // x deține „bună ziua”
lăsa y = &x; // y se referă la x, împrumută „bună ziua”
println!("{}", X);
println!("{}", y)
}
Fără a împrumuta prin referință, programul ar intra în panică. Ar încălca regula de proprietate conform căreia o valoare poate avea un singur proprietar, iar două variabile nu pot indica aceeași locație de memorie. Împrumutul poate fi foarte util în funcții. Iată un exemplu de împrumut într-o funcție, pentru a păstra proprietatea în timp ce apelăm alte funcții care iau variabile locale ca argumente.
fnprint_even(vectr: &Vec<i32>) {
pentru valorile în vector {
dacă valori % 2 == 0 {
println!("{}", valori);
}
}
}
The print_even funcția face referire la un vector de numere întregi pe 32 de biți ca argument. Apoi tipărește linii de valori care sunt multipli de doi în vector folosind o buclă for și println! macro.
fnprincipal() {
lăsa vector_număr = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
print_even(&number_vector); // proprietatea este împrumutată, nu mutată
println!("Funcția principală păstrează proprietatea vectorului numeric{:?}", vector_număr)
}
Funcția principală declară variabila number_vector și îi atribuie un vector de numere întregi de 32 de biți. Apoi apelează funcția print_even și îi transmite o referință la vector_număr variabilă folosind simbolul ampersand.
Funcția principală păstrează dreptul de proprietate asupra vector_număr variabilă poate continua să folosească valoarea în locația sa de memorie.
Împrumutarea și mutarea referințelor
Funcțiile pot modifica, de asemenea, variabilele împrumutate folosind referințe mutabile la acestea, înainte de a reveni la proprietate.
Cu toate acestea, spre deosebire de variabilele obișnuite care pot fi setate ca modificabile folosind cuvântul cheie mut, trebuie să prefixați referințele modificabile cu simbolul ampersand.
Înainte de a face referințe mutabile, variabila pe care doriți să o modificați trebuie să fie mutabilă.
fnremove_value(vectr: &mutVec<i32>) -> &Vec<i32> {
vectr.remove(4);
întoarcere vectr
}
The remove_value funcția preia referința unui vector mutabil de numere întregi de 32 de biți. Returnează un vector de numere întregi de 32 de biți după eliminarea valorii vectorului din al patrulea indice.
fnprincipal() {
lăsamut numere = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
remove_value(&mut numere); // referință mutabilă aici
println!("{:?}", numere);
}
Funcția modifică nums vector apelând remove_value și trecând referința mutabilă a unui vector ca argument. La imprimarea vectorului, al patrulea indice anterior al vectorului nu există.
Observați că argumentul este o referință la un vector mutabil.
Este important să înțelegeți proprietatea și împrumutul
Va trebui să înțelegeți proprietatea și împrumutul pentru a scrie un cod Rust eficient, sigur pentru memorie, care se compila și rulează. Dacă codul dvs. nu respectă regulile de proprietate, verificatorul de împrumut îl va detecta. Va trebui să vă faceți programul în siguranță pentru ca Rust să-l compileze.
Verificatorul de împrumut este enervant când ești nou la Rust. Dar, pe măsură ce scrii mai mult cod Rust, te vei obișnui cu el și vei câștiga experiență în scrierea codului Rust sigur pentru memorie.