Rust izmanto aizņēmuma pārbaudītāju, lai ieviestu īpašumtiesību noteikumus un nodrošinātu, ka programmas ir drošas atmiņā. Īpašumtiesību noteikumi nosaka, kā Rust pārvalda steka un kaudzes atmiņu.

Rakstot Rust programmas, jums būs jāizmanto mainīgie, nemainot saistītās vērtības īpašumtiesības. Rust nodrošina stabilu aizņēmuma mehānismu, lai veicinātu elastību un koda atkārtotu izmantošanu.

Kas ir aizņemšanās rūsā?

Aizņemšanās ir piekļuve mainīgā vērtībai bez pārņemt īpašumtiesības uz mainīgo atsaucoties uz īpašnieku. Aizņemšanās pārbaudītājs nodrošina, ka atsauce ir derīga un dati netiek atmesti, izmantojot konstrukciju, ko sauc par kalpošanas laiku.

Dzīves ilgums ir mainīgā pastāvēšanas ilgums. Kalpošanas laiks sākas ar mainīgo radīšanu un beidzas ar mainīgo iznīcināšanu. Varat aizņemties īpašumtiesības uz mainīgo, un, ja aizņemtā atsauce ir ārpus darbības jomas, īpašumtiesības atgriežas īpašnieka mainīgajā. Aizņemšanās ir nedaudz līdzīga norādes, ko atradīsit tādās valodās kā C++ un Go. Bet Rust kompilators izmanto aizņemšanās pārbaudītāju, lai nodrošinātu, ka programmas ir drošas atmiņā.

instagram viewer

Piemērs aizņemšanās rūsā

Varat aizņemties mainīgā lieluma īpašumtiesības, atsaucoties uz īpašnieku, izmantojot simbolu &.

fngalvenais() {
ļaut x = Stīga::from("sveiks"); // x pieder "sveiki"
ļaut y = &x; // y atsaucas uz x, aizņemas "sveiki"
println!("{}", x);
println!("{}", y)
}

Bez aizņemšanās, atsaucoties, programma nonāktu panikā. Tas pārkāptu īpašumtiesību noteikumu, ka vērtībai var būt viens īpašnieks un divi mainīgie nevar norādīt uz vienu un to pašu atmiņas vietu. Aizņemšanās var būt ļoti noderīga funkcijās. Šis ir funkcijas aizņēmuma piemērs, lai saglabātu īpašumtiesības, vienlaikus izsaucot citas funkcijas, kas kā argumentus izmanto vietējos mainīgos.

fnprint_even(vektors: &Vec<i32>) {
priekš vērtības iekšā vectr {
ja vērtības % 2 == 0 {
println!("{}", vērtības);
}
}
}

The print_even funkcija atsaucas uz 32 bitu veselu skaitļu vektoru kā savu argumentu. Pēc tam tas izdrukā vērtību rindas, kas vektorā ir divas reizes, izmantojot for-cilpu un println! makro.

fngalvenais() {
ļaut skaitlis_vektors = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
print_even(&skaitlis_vektors); // īpašumtiesības ir aizņemtas, nevis pārvietotas
println!("Galvenā funkcija saglabā īpašumtiesības uz skaitļa vektoru{:?}", number_vector)
}

Galvenā funkcija deklarē mainīgo number_vector un piešķir tam 32 bitu veselu skaitļu vektoru. Pēc tam tas izsauc funkciju print_even un nodod tai atsauci uz skaitlis_vektors mainīgais, izmantojot simbolu &.

Galvenā funkcija saglabā īpašumtiesības uz skaitlis_vektors mainīgais, tas var turpināt izmantot vērtību savā atmiņas vietā.

Atsauces aizņemšanās un mutācijas

Funkcijas var arī modificēt aizņemtos mainīgos, izmantojot mainīgas atsauces uz tiem, pirms tiek atdotas īpašumtiesības.

Tomēr atšķirībā no parastajiem mainīgajiem, kurus var iestatīt kā mainīgus, izmantojot atslēgvārdu mut, maināmās atsauces ir jāpievieno ar simbolu &.

Pirms maināmu atsauču veikšanas mainīgajam, kuru vēlaties modificēt, ir jābūt mainīgam.

fnnoņemt_vērtību(vektors: &mutVec<i32>) -> &Vec<i32> {
vectr.remove(4);
atgriezties vectr
}

The noņemt_vērtību funkcija ņem atsauci uz mainīgu 32 bitu veselu skaitļu vektoru. Pēc ceturtā indeksa vektora vērtības noņemšanas tas atgriež 32 bitu veselu skaitļu vektoru.

fngalvenais() {
ļautmut cipari = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
remove_value(&mut numuri); // šeit mainīga atsauce
println!("{:?}", cipari);
}

Funkcija maina numuri vektoru, izsaucot remove_value un kā argumentu nododot vektora mainīgo atsauci. Drukājot vektoru, iepriekšējais ceturtais vektora indekss nepastāv.

Ievērojiet, ka arguments ir atsauce uz mainīgu vektoru.

Ir svarīgi izprast īpašumtiesības un aizņēmumus

Jums ir jāsaprot īpašumtiesības un aizņemšanās, lai rakstītu efektīvu, atmiņai drošu Rust kodu, kas tiek apkopots un palaists. Ja jūsu kods neatbilst īpašumtiesību noteikumiem, aizņēmuma pārbaudītājs to atklās. Lai Rust varētu to apkopot, programmai ir jābūt drošai atmiņai.

Aizņemšanās pārbaudītājs ir kaitinošs, kad esat jauns Rust. Bet, rakstot vairāk Rust koda, jūs pie tā pieradīsit un iegūsit pieredzi, rakstot atmiņai drošu Rust kodu.