Rust käyttää lainaustarkistusta valvoakseen omistajuussääntöjään ja varmistaakseen, että ohjelmat ovat muistiturvallisia. Omistussäännöt sanelevat, kuinka Rust hallitsee muistia pinon ja kasan yli.

Kun kirjoitat Rust-ohjelmia, sinun on käytettävä muuttujia muuttamatta niihin liittyvän arvon omistajuutta. Rust tarjoaa vankan lainausmekanismin, joka edistää joustavuutta ja koodin uudelleenkäyttöä.

Mitä on lainaaminen ruosteessa?

Lainaus on muuttujan arvon saamista ilman muuttujan omistukseen viittaamalla omistajaan. Lainaustarkistus varmistaa, että viittaus on pätevä, eikä dataa pudoteta käyttämällä konstruktia nimeltä lifetimes.

Elinikä tarkoittaa, kuinka kauan muuttuja on olemassa. Elinajat alkavat muuttujan luomisesta ja päättyvät muuttujan tuhoamiseen. Voit lainata muuttujan omistajuuden, ja kun lainattu viite on soveltamisalan ulkopuolella, omistusoikeus palautuu omistajamuuttujalle. Lainaus on vähän kuin osoittimia, joita löydät kielillä, kuten C++ ja Go. Mutta Rust-kääntäjä käyttää lainaustarkistusta varmistaakseen, että ohjelmat ovat muistiturvallisia.

instagram viewer

Esimerkki lainaamisesta ruosteessa

Voit lainata muuttujan omistajuuden viittaamalla omistajaan et-merkillä (&).

fnpää() {
päästää x = merkkijono::from("hei"); // x omistaa "hello"
päästää y = &x; // y viittaa x: ään, lainaa sanan "hello"
println!("{}", x);
println!("{}", y)
}

Ilman lainaamista viittaamalla ohjelma paniikkiin. Se rikkoisi omistajuussääntöä, jonka mukaan arvolla voi olla yksi omistaja ja kaksi muuttujaa ei voi osoittaa samaan muistipaikkaan. Lainaamisesta voi olla paljon hyötyä toiminnoissa. Tässä on esimerkki funktion lainaamisesta omistajuuden säilyttämiseksi samalla, kun kutsutaan muita toimintoja, jotka käyttävät argumenteina paikallisia muuttujia.

fnprint_even(vektori: &Vec<i32>) {
varten arvot sisään vectr {
jos arvot % 2 == 0 {
println!("{}", arvot);
}
}
}

The print_even funktio viittaa argumenttinaan 32-bittisten kokonaislukujen vektoriin. Sitten se tulostaa arvorivit, jotka ovat kahden kerrannaisia ​​vektorissa käyttämällä for-silmukkaa ja println! makro.

fnpää() {
päästää numero_vektori = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
print_even(&numero_vektori); // Omistus on lainattu, ei siirretty
println!("Pääfunktio säilyttää numerovektorin{:?} omistuksen", numero_vektori)
}

Pääfunktio ilmoittaa muuttujan number_vector ja määrittää sille 32-bittisten kokonaislukujen vektorin. Sitten se kutsuu print_even-funktiota ja välittää sille viittauksen numero_vektori muuttuja et-symbolilla.

Päätoiminto säilyttää omistusoikeuden numero_vektori muuttuja, se voi jatkaa arvon käyttöä muistipaikassaan.

Lainaus ja viitteiden muuntaminen

Funktiot voivat myös muokata lainattuja muuttujia käyttämällä niihin muuttuvia viittauksia ennen omistajuuden palauttamista.

Kuitenkin toisin kuin tavalliset muuttujat, jotka voidaan asettaa muuttuviin käyttämällä mut-avainsanaa, sinun on liitettävä muuttuvien viittausten eteen et-merkki.

Ennen kuin teet muuttuvia viittauksia, muuttujan, jota haluat muokata, on oltava muuttuva.

fnpoista_arvo(vektori: &mutVec<i32>) -> &Vec<i32> {
vectr.remove(4);
palata vectr
}

The poista_arvo funktio ottaa 32-bittisten kokonaislukujen muuttuvan vektorin viitteen. Se palauttaa 32-bittisten kokonaislukujen vektorin, kun se on poistanut vektorin arvon neljännestä indeksistä.

fnpää() {
päästäämut numerot = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
remove_value(&mut numerot); // vaihtuva viite täällä
println!("{:?}", numerot);
}

Funktio muuttaa numerot vektori kutsumalla poistoarvo ja välittämällä vektorin muuttuva viittaus argumentiksi. Kun vektori tulostetaan, vektorin aiempaa neljättä indeksiä ei ole olemassa.

Huomaa, että argumentti on viittaus muuttuvaan vektoriin.

On tärkeää ymmärtää omistaminen ja lainaaminen

Sinun on ymmärrettävä omistajuus ja lainaus, jotta voit kirjoittaa tehokkaan, muistia säästävän Rust-koodin, joka kokoaa ja toimii. Jos koodisi ei noudata omistajuussääntöjä, lainantarkistaja havaitsee sen. Sinun on tehtävä ohjelmastasi muistiturvallinen, jotta Rust voi kääntää sen.

Lainaustarkistus on ärsyttävää, kun olet uusi Rustissa. Mutta kun kirjoitat enemmän Rust-koodia, totut siihen ja saat kokemusta muistiturvallisen Rust-koodin kirjoittamisesta.