Älykkäillä osoittimilla on lisäetuja tavallisiin osoittimiin verrattuna. Tässä on kaikki mitä sinun tulee tietää Rustin älykkäistä osoittimista.
Muistinhallinta on yksi Rustin myyntivalteista, varsinkin kun turvallisuus ei ole vaarassa. Rustin omistusjärjestelmän avulla kääntäjä voi taata koodin turvallisuuden ja vapauden muistivirheistä, kuten roikkuvista osoittimista ja muistivuotoja.
Rust tarjoaa myös älykkäitä osoittimia, joissa on metadataa ja ominaisuuksia perinteisten osoittimien lisäksi. Älykkäät osoittimet ovat käteviä muistivuotojen torjuntaan.
Mitä ovat älykkäät osoittimet ruosteessa?
Älykkäät osoittimet ovat yksi niistä Rustin tietotyypit joka laajentaa tavallisten osoittimien ominaisuuksia tarjoamalla lisätoimintoja, kuten ylikuormitettuja operaattoreita, tuhoajia ja automaattista muistinhallintaa.
Rust käyttää rakenteita älykkäiden osoittimien suorittamiseen; Näin ollen älykkäillä osoittimilla on myös omistajuusominaisuudet.
Kun linkität dynaamisesti allokoitua dataa sisältävän muistin älykkäisiin osoittimiin, ne vapautetaan automaattisesti. Älykkäät osoittimet tarjoavat toimintoja ohjaukseen
Ruosteen esineen käyttöikä, mikä tekee niistä käteviä estämään virheitä, kuten nollaosoittimen viittauksen purkamista ja muistivuotoja, jotka ovat suosittuja muissa matalan tason kielissä, kuten C ja C++.Älykkäiden osoittimien käytön edut
Tässä on joitain älykkäiden osoittimien käytön etuja:
- Automaattinen muistinhallinta: Älykkäät osoittimet tarjoavat automaattisen muistinhallinnan, mukaan lukien varauksen ja purkamisen, toisin kuin manuaalinen muistinhallinta tavallisilla osoittimilla.
- Parempi turvallisuus: Älykkäät osoittimet pakottavat omistajuuden semantiikan varmistaen, että vain yksi omistaja voi käyttää resursseja kerrallaan, mikä estää datajäljet ja samanaikaisuuteen liittyvät viat.
- Joustavuus: Rust tarjoaa useita älykkäitä osoittimia, joista jokaisessa on oma sarja omistajuuden semantiikka turvallisen koodin kirjoittamiseen joustavasti.
- Resurssienhallinta: Voit käyttää älykkäitä osoittimia hallitaksesi muita resursseja, kuten tiedostokäsittelijöitä ja verkkopistokkeita kapseloimalla resurssit älykkäässä osoittimessa, joka helpottaa niiden elinkaaren hallintaa ja varmistaa, että ne on suljettu ja vapautettu oikein käyttää.
- Parannettu suorituskyky: Älykkäät osoittimet auttavat parantamaan suorituskykyä vähentämällä muistin kopiointia ja varauksia – älykkäiden osoittimien käytöstä aiheutuva pienempi muistijalanjälki parantaa suorituskykyä.
Älykkäät osoittimet sopivat keskikokoisiin ja suuriin sovelluksiin, erityisesti tapauksissa, joissa muistinhallinta on kriittistä.
Älykkäiden osoittimien tyypit
Rust tarjoaa monenlaisia älykkäitä osoittimia, mukaan lukien Laatikko, Rc, RefCell, ja Mutex.
1. Box Smart Pointer
The Laatikko Smart Pointer on Rustin yksinkertaisin ja yleisin älykäs osoitin. The Laatikko älykäs osoitin auttaa varaamaan arvot kasaan ja luo laatikollisen osoittimen saavutettavuutta varten.
The Laatikko Smart Pointer on kätevä dynaamiseen muistin varaamiseen, kun sinun on varmistettava, että muisti vapautetaan automaattisesti, kun osoittimet eivät ole käytettävissä.
Näin voit ilmoittaa ja käyttää a Laatikko osoitin:
fnpää(){
// laatikon älykäs osoittimen uusi esiintymä
antaa x = Laatikko::Uusi(5);
println!(x)
}
The Laatikko tyyppi on osa Rustin alkusoittoa, joten sinun ei tarvitse tuoda tyyppiä toisin kuin muut älykkäät osoittimet.
The x muuttuja on a Laatikko osoitin, joka osoittaa 5 kokonaisluvun arvoon. Rust varaa muistin keon arvolle ja vapauttaa sen automaattisesti, kun muuttuja on soveltamisalan ulkopuolella.
2. Rc Smart Pointer
The Rc (Reference Counted) älykäs osoitin tarjoaa toiminnot jaetun omistuksen arvojen luomiseen. The Rc älykkäät osoittimet seuraavat viittausten määrää arvoon ja vapauttavat arvon, kun viimeinen viittaus on soveltamisalan ulkopuolella.
The Rc älykäs osoitin on kätevä, kun sinun on jaettava käytettävyyden arvon omistus useissa ohjelman osissa.
Ilmoittaaksesi an Rc älykäs osoitin, tuot sen Rc struct vakiokirjastosta, julista uusi Rc osoittimen kanssa Uusi funktio ja kloonaa osoitinmuuttuja komennolla klooni muuttuja.
käyttää std:: rc:: Rc;
fnpää() {
// RC-älykäsosoittimen uusi esiintymä
antaa x = Rc:: new(5);
antaa y = Rc:: klooni(&x);
println!("x = {}, y = {}", x, y);
}
The x muuttuja on Rc osoitinmuuttuja ja y muuttuja on klooni, jolla on pääsy muistissa olevaan arvoon. Viitemäärä on kaksi, ja arvo vapautetaan muistista, kun muuttujat ovat soveltamisalan ulkopuolella.
3. RefCell Smart Pointer
The RefCell älykäs osoitin tarjoaa sisäisen muuttuvuuden, joka mahdollistaa muuttumattomien ja muuttuvien viittausten rinnakkaiselon niin kauan kuin on yksi muuttuva viite tiettyä aikaa kohti.
The RefCell älykäs osoitin on kätevä muunnettaessa muuttuvien viitteiden omistamia arvoja.
The Refcell toiminto ei ole osa Rustin alkusoittoa, joten sinun on tuotava rakenne tavallisesta kirjastosta käyttääksesi älykästä osoitinta.
käyttää std:: solu:: RefCell;
fnpää(){
// Refcellin älykäs osoittimen uusi esiintymä
antaa x = RefCell:: new(5);antaa y = x.laina();
antaa z = x.laina_mut();println!("y = {}", *y);
println!("z = {}", *z);
}
The Refcell älykäs osoitin sisältää arvon ja y muuttuja on muuttumaton viittaus arvoon. The laina_mut funktio luo muuttuvan viittauksen arvolle.
Ohjelma on turvallinen, jos siinä on vain yksi muuttuva viittaus kerrallaan.
4. Mutex Smart Pointer
The Mutex älykäs osoitin tarjoaa keskinäisiä poissulkemisia. The Mutex smart pointer on kätevä synkronoida arvojen käyttö useissa säikeissä samanaikaisissa ohjelmissa.
The Mutex älykäs osoitin tarjoaa molemminpuolisen poissulkemisen varmistaakseen, että vain yksi säie pääsee käsiksi arvoon, mutta estää tietojen jäljittämisen.
Sinun on tuotava Mutex struct ja luo uusi ilmentymä komennolla Uusi käytettävä toiminto Mutex Smart Pointer ruosteessa.
käyttää std:: synkronointi:: Mutex;
fnpää() {
// uusi mutex-osoittimen esiintymä
antaa laskuri = Mutex:: new(0);{
antaamut num = counter.lock().unwrap();
*numero += 1;
}
println!("Tulos: {}", *counter.lock().unwrap());
}
The laskuri muuttuja on uusi Mutex ilmentymä. The pää toiminto lukitsee mutexin kanssa Lukko menetelmä Mutex ilmentymä. Lukitus mahdollistaa laskurin arvon turvallisen muuttamisen ennen lukon vapauttamista ja arvon tulostamista.
The Mutex tyyppi takaa, että vain yksi säie voi käyttää jaettuja resursseja (tässä tapauksessa laskuri muuttuja) ja muokkaa sen arvoa kerrallaan. Keskinäinen poissulkeminen varmistaa, että jaettujen resurssien samanaikainen käyttö on sarjoitettu datajälkien ja muiden samanaikaisuusongelmien estämiseksi.
Rustin omistusmalli takaa muistin turvallisuuden
Älykkäät osoittimet ovat yksi Rustin lähestymistapoja muistin turvallisuuteen ja joustavuuteen. Rustin omistusmalli varmistaa, että ohjelmat käyttävät muistia turvallisesti lainaustarkistuksella käännöshetkellä.
Lainaustarkistus on tärkeä ominaisuus Rustin omistusmallissa, joka noudattaa tiukat säännöt muistin saatavuudelle ja muokkaamiselle.