Ohjelmointikielet eroavat toisistaan ​​siinä, miten ne käsittelevät muistia ja panevat täytäntöön muistinhallintasääntöjä. Go ja Python käyttävät roskankeräilijöitä, joten kehittäjät voivat keskittyä koodin kirjoittamiseen. C ja C++ antavat ohjelmoijille vastuun alemman tason muistin hallinnasta.

Rust kohtelee muistinhallintaa eri tavalla käyttämällä käsitteitä, joita se kutsuu omistukseksi ja lainaamiseksi. Se käyttää "lainaustarkistusta" varmistaakseen muistin turvallisuuden tehokkaasti.

Mikä on omistus?

Omistajuus on Rustin ominaisuus ja sopimus, joka auttaa varmistamaan ohjelmien muistin turvallisuuden ilman roskakeräystä. Se on toinen tapa puuttua muistivuotojen ongelma koodissasi.

Rust-kääntäjä tarkistaa, noudattaako ohjelma omistussääntöjä käännöshetkellä. Jos ohjelma noudattaa näitä sääntöjä, se voi toimia. Jos näin ei ole, kääntäjä kieltäytyy tuottamasta suoritettavaa tiedostoa.

Rust tarkistaa omistussäännöt käyttämällä lainatarkastaja. Lainaustarkistus tarkistaa omistusmallin ja päättää, onko arvo muistissa (

instagram viewer
pino tai kasa) on soveltamisalan ulkopuolella vai ei. Jos arvo ei kuulu sen soveltamisalaan, se ei ole muiden ohjelman osien käytettävissä, ellei sitä ole lainattu.

Omistussäännöt

Rustissa jokainen muuttuja omistaa arvon, jolla se on alustettu, ja omistajaa voi olla vain yksi. Kun omistaja on pois käytöstä, arvo pudotetaan. On tärkeää ymmärtää omistussääntöjen yksityiskohdat.

Ensimmäinen omistussääntö on, että jokainen muuttuja omistaa alustetun arvonsa.

päästää omistaja = merkkijono::from("yksi");

The omistaja yllä oleva muuttuja omistaa merkkijonon yksi ja toisin kuin kielet, kuten Python ja Go, tämä arvo pudotetaan muuttujan uudelleenmäärityksessä.

Toinen omistussääntö on, että kaksi muuttujaa ei voi osoittaa samaan muistipaikkaan; jokaisella arvolla voi olla vain yksi omistaja.

päästää uusi_omistaja = omistaja;

The uusi omistaja muuttuja omistaa nyt arvon, joka on tallennettu muistipaikkaan omistaja muuttuja. Jos yrität käyttää omistaja muuttuja, kääntäjä joutuu paniikkiin ja kieltäytyy luomasta suoritettavaa tiedostoa.

Useimmissa roskakeräilijöitä käyttävissä kielissä kaksi muuttujaa voivat osoittaa samaan muistipaikkaan. Tässä on esimerkki vastaavasta JavaScript-koodista:

päästää omistaja = "omistaja";
päästää uusi_omistaja = omistaja;
konsoli.log (uusi_omistaja);

Yllä olevan JavaScript-koodin suorittaminen toimii ilman virheitä, ja jos teet saman Go- tai Pythonissa, myös ohjelmasi toimii ilman virheitä.

Kolmas omistajuussääntö on, että kun muuttuja on ilmoitetun laajuuden ulkopuolella, arvo pudotetaan ja muisti vapautetaan.

// muuttuja erillisessä laajuudessa
{
päästää esimerkki = merkkijono::from("Tässä on uusi laajuus");
}

Tulosta!("{}", esimerkki)

Et voi käyttää esimerkki muuttuja sen soveltamisalan ulkopuolella; Jos yrität tehdä niin, kääntäjä joutuu paniikkiin.

Omistajuus toiminnoissa

Kun välität arvon funktiolle argumenttina, funktio voi käyttää kyseistä muuttujaa, vaikka sitä ei ole ilmoitettu sen laajuudessa:

fntulostin(arvo: merkkijono) -> merkkijono {
palata arvo
}

fnpää() {
päästää x = merkkijono::from("Tulostaa arvon"); // x omistaa merkkijonoarvon

// Omistusoikeus on siirretty tulostintoimintoon täällä
Tulosta!("{} Tulos Tulostus X on, että se -:", tulostin (x));
}

Funktio voi käyttää tätä muuttujaa, koska Rust siirtää sen omistajuuden funktiolle käännöshetkellä.

Saatat ajatella, että muuttujaa on edelleen mahdollista käyttää myöhemmin sen alkuperäisessä laajuudessa:

fntulostin(arvo: merkkijono) -> merkkijono {
palata arvo
}

fnpää() {
päästää x = merkkijono::from("Tulostaa arvon");
Tulosta!("{} Tulos Tulostus x on, että se -:", tulostin (x));

// Yritetään käyttää muuttujaa sen arvon omistusoikeuden siirron jälkeen
println!("{} ei pitäisi olla käytettävissä", x)
}

Mutta jos yrität tätä, kääntäjä joutuu paniikkiin ja kieltäytyy tuottamasta suoritettavaa tiedostoa:

Ruoste asettaa koodin uudelleenkäytettävyyden etusijalle

Koodin uudelleenkäytettävyys on olennainen käytäntö, mutta koodin uudelleenkäyttöä varten sinun on ymmärrettävä Rustin omistussäännöt.

Rust on erittäin joustava ohjelmointikieli. Se tarjoaa käsitteitä, kuten lainaamisen, siirtämisen, kopioimisen ja kloonauksen omistusoikeuden muuttuvaa uudelleenkäytettävyyttä varten.