Rust uporablja preverjevalnik izposoje, da uveljavi svoja lastniška pravila in zagotovi, da so programi varni za pomnilnik. Pravila lastništva narekujejo, kako Rust upravlja pomnilnik v skladu in kopici.

Ko pišete programe Rust, boste morali uporabljati spremenljivke, ne da bi spremenili lastništvo povezane vrednosti. Rust zagotavlja robusten mehanizem izposoje za spodbujanje prilagodljivosti in ponovne uporabe kode.

Kaj je izposojanje v Rustu?

Izposoja je dostop do vrednosti spremenljivke brez prevzeti lastništvo spremenljivke s sklicevanjem na lastnika. Preverjevalnik izposoje zagotavlja, da je sklic veljaven in da podatki niso izpuščeni z uporabo konstrukcije, imenovane življenjske dobe.

Življenjska doba je, koliko časa obstaja spremenljivka. Življenjske dobe se začnejo z ustvarjanjem spremenljivke in končajo z uničenjem spremenljivke. Lastništvo spremenljivke si lahko izposodite in ko je izposojeni sklic izven obsega, se lastništvo vrne spremenljivki lastnika. Izposoja je nekoliko podobna

kazalce, ki jih boste našli v jezikih, kot sta C++ in Go. Toda prevajalnik Rust uporablja preverjalnik izposoje, da zagotovi, da so programi varni za pomnilnik.

Primer izposoje v Rust

Lastništvo spremenljivke si lahko izposodite tako, da lastnika navedete s simbolom & (&).

fnglavni() {
pustiti x = Vrvica::from("zdravo"); // x ima "zdravo"
pustiti y = &x; // y se sklicuje na x, sposodi "hello"
println!("{}", x);
println!("{}", y)
}

Brez izposoje z referencami bi program zagrabila panika. To bi kršilo pravilo lastništva, da ima lahko vrednost enega lastnika in da dve spremenljivki ne moreta kazati na isto pomnilniško lokacijo. Izposojanje je lahko zelo koristno pri funkcijah. Tukaj je primer izposoje v funkciji, da ohranite lastništvo, medtem ko kličete druge funkcije, ki kot argumente jemljejo lokalne spremenljivke.

fnprint_even(vectr: &Vec<i32>) {
za vrednote v vectr {
če vrednote % 2 == 0 {
println!("{}", vrednote);
}
}
}

The print_even funkcija se kot argument sklicuje na vektor 32-bitnih celih števil. Nato natisne vrstice vrednosti, ki so večkratniki dveh v vektorju z uporabo for-zanke in println! makro.

fnglavni() {
pustiti številski_vektor = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
print_even(&number_vector); // lastništvo je izposojeno, ne preseljeno
println!("Glavna funkcija obdrži lastništvo številskega vektorja{:?}", number_vector)
}

Glavna funkcija deklarira spremenljivko number_vector in ji dodeli vektor 32-bitnih celih števil. Nato pokliče funkcijo print_even in ji posreduje referenco na številski_vektor spremenljivka z uporabo simbola &.

Glavna funkcija obdrži lastništvo nad številski_vektor spremenljivke lahko še naprej uporablja vrednost na svoji pomnilniški lokaciji.

Izposojanje in spreminjanje referenc

Funkcije lahko tudi spremenijo izposojene spremenljivke z uporabo spremenljivih sklicev nanje, preden vrnejo lastništvo.

Vendar pa morate za razliko od običajnih spremenljivk, ki jih je mogoče nastaviti na spremenljive s ključno besedo mut, spremenljivim referencam dodati simbol &.

Pred ustvarjanjem spremenljivih sklicev mora biti spremenljivka, ki jo želite spremeniti, spremenljiva.

fnodstrani_vrednost(vectr: &mutVec<i32>) -> &Vec<i32> {
vectr.remove(4);
vrnitev vectr
}

The odstrani_vrednost funkcija sprejme referenco spremenljivega vektorja 32-bitnih celih števil. Po odstranitvi vrednosti vektorja v četrtem indeksu vrne vektor 32-bitnih celih števil.

fnglavni() {
pustitimut številke = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
odstrani_vrednost(&mut številke); // spremenljiva referenca tukaj
println!("{:?}", številke);
}

Funkcija spreminja številke vektor s klicem remove_value in posredovanjem spremenljive reference vektorja kot argumenta. Pri tiskanju vektorja prejšnji četrti indeks vektorja ne obstaja.

Upoštevajte, da je argument sklic na spremenljiv vektor.

Pomembno je razumeti lastništvo in izposojo

Za pisanje učinkovite, pomnilniško varne kode Rust, ki se prevaja in izvaja, boste morali razumeti lastništvo in izposojo. Če vaša koda ne sledi pravilom lastništva, bo to zaznal pregledovalnik izposoje. Vaš program boste morali narediti varen za pomnilnik, da ga bo Rust lahko prevedel.

Preverjevalnik izposoje je moteč, ko ste novi v Rustu. Toda ko boste pisali več kode Rust, se boste navadili nanjo in pridobili izkušnje pri pisanju kode Rust, varne za pomnilnik.