Pametni kazalci imajo dodatne prednosti pred običajnimi kazalci. Tukaj je vse, kar morate vedeti o pametnih kazalcih v Rustu.
Upravljanje pomnilnika je ena od Rustovih prodajnih točk, zlasti ker varnost ni ogrožena. Lastniški sistem Rusta omogoča prevajalniku, da zagotovi varnost kode in brez napak v pomnilniku, kot so viseči kazalci in uhajanje pomnilnika.
Rust ponuja tudi pametne kazalce z dodatnimi metapodatki in zmožnostmi, ki presegajo tradicionalne kazalce. Pametni kazalci so priročni za reševanje uhajanja pomnilnika.
Kaj so pametni kazalci v Rustu?
Pametni kazalci so eden od Podatkovni tipi Rusta ki razširja zmožnosti običajnih kazalcev s ponudbo dodatnih funkcij, kot so preobremenjeni operaterji, destruktorji in samodejno upravljanje pomnilnika.
Rust uporablja strukture za izvajanje pametnih kazalcev; tako imajo pametni kazalci tudi lastniške zmožnosti.
Ko pomnilnik, ki vsebuje dinamično dodeljene podatke, povežete s pametnimi kazalci, se samodejno sprostijo. Pametni kazalci zagotavljajo funkcionalnost za nadzor
Življenjska doba predmeta Rust, zaradi česar so priročni za preprečevanje napak, kot je dereferenciranje ničelnega kazalca in uhajanje pomnilnika, ki so priljubljeni v drugih jezikih nizke ravni, kot sta C in C++.Prednosti uporabe pametnih kazalcev
Tukaj je nekaj prednosti uporabe pametnih kazalcev:
- Samodejno upravljanje pomnilnika: Pametni kazalci zagotavljajo samodejno upravljanje pomnilnika, vključno z dodeljevanjem in sprostitvijo, v nasprotju z ročnim upravljanjem pomnilnika z navadnimi kazalci.
- Izboljšana varnost: Pametni kazalci uveljavljajo semantiko lastništva, s čimer zagotavljajo, da lahko samo en lastnik dostopa do virov na čas, s čimer preprečujejo sledi podatkov in hrošče, povezane s sočasnostjo.
- Prilagodljivost: Rust ponuja več pametnih kazalcev, vsak s svojim naborom semantika lastništva za prilagodljivo pisanje varne kode.
- Upravljanje virov: Pametne kazalce lahko uporabite za upravljanje drugih virov, kot so upravljalniki datotek in omrežne vtičnice, tako da vire enkapsulirate znotraj pametnega kazalca, ki olajša upravljanje njihovega življenjskega cikla in zagotovi, da so pravilno zaprti in sproščeni uporaba.
- Izboljšana zmogljivost: Pametni kazalci pomagajo izboljšati zmogljivost z zmanjšanjem kopiranja in dodeljevanja pomnilnika – zmanjšan pomnilniški odtis zaradi uporabe pametnih kazalcev povzroči večjo zmogljivost.
Pametni kazalci so primerni za srednje do velike aplikacije, zlasti v primerih, ko je upravljanje pomnilnika kritično.
Vrste pametnih kazalcev
Rust ponuja več vrst pametnih kazalcev, vključno z Škatla, Rc, RefCell, in Mutex.
1. Pametni kazalec Box
The Škatla Smart Pointer je najpreprostejši in najpogostejši pametni kazalec podjetja Rust. The Škatla pametni kazalec pomaga pri dodeljevanju vrednosti na kupu in ustvari kazalec v okvirju za dostopnost.
The Škatla Pametni kazalec je priročen za dinamično dodeljevanje pomnilnika, ko morate zagotoviti, da se pomnilnik samodejno sprosti, ko so kazalci izven obsega.
Tukaj je opisano, kako lahko deklarirate in uporabite a Škatla kazalec:
fnglavni(){
// nov primerek pametnega kazalca polja
pustiti x = Škatla::novo(5);
println!(x)
}
The Škatla type je del Rustovega uvoda, zato vam v nasprotju z drugimi pametnimi kazalci vrste ne bo treba uvoziti.
The x spremenljivka je a Škatla kazalec, ki kaže na vrednost 5 celega števila. Rust dodeli pomnilnik za vrednost na kupu in ga samodejno sprosti, ko je spremenljivka izven obsega.
2. Pametni kazalec Rc
The Rc (Reference Counted) pametni kazalec zagotavlja funkcionalnost za ustvarjanje vrednosti skupnega lastništva. The Rc pametni kazalci sledijo številu sklicev na vrednost in sprostijo vrednost, ko je zadnji sklic izven obsega.
The Rc pametni kazalec je priročen, ko morate deliti lastništvo vrednosti za dostopnost v več delih vašega programa.
Za razglasitev Rc pametni kazalec, boste uvozili Rc struct iz standardne knjižnice, deklarirajte novo Rc kazalec z novo funkcijo in klonirajte spremenljivko kazalca z klon spremenljivka.
uporaba std:: rc:: Rc;
fnglavni() {
// nov primerek pametnega kazalca RC
pustiti x = Rc:: novo(5);
pustiti y = Rc:: klon(&x);
println!("x = {}, y = {}", x, y);
}
The x spremenljivka je Rc spremenljivka kazalca in l spremenljivka je klon z dostopom do vrednosti v pomnilniku. Število sklicev je dve in vrednost se sprosti iz pomnilnika, ko so spremenljivke izven obsega.
3. Pametni kazalec RefCell
The RefCell pametni kazalec zagotavlja notranjo spremenljivost, ki omogoča soobstoj nespremenljivih in spremenljivih referenc, dokler obstaja ena spremenljiva referenca na določen čas.
The RefCell pametni kazalec je priročen pri spreminjanju vrednosti v lasti spremenljivih sklicev.
The Refcell funkcija ni del Rustovega uvoda, zato boste morali za uporabo pametnega kazalca uvoziti strukturo iz standardne knjižnice.
uporaba std:: celica:: RefCell;
fnglavni(){
// nov primerek pametnega kazalca Refcell
pustiti x = RefCell:: novo(5);pustiti y = x.posojilo();
pustiti z = x.borrow_mut();println!("y = {}", *y);
println!("z = {}", *z);
}
The Refcell pametni kazalec vsebuje vrednost in l spremenljivka je nespremenljiva referenca na vrednost. The borrow_mut funkcija ustvari spremenljivo referenco vrednosti.
Program je varen, če obstaja samo ena spremenljiva referenca hkrati.
4. Pametni kazalec Mutex
The Mutex pametni kazalec zagotavlja medsebojne izključitve. The Mutex pametni kazalec je priročen za sinhronizacijo dostopa do vrednosti v več nitih v sočasnih programih.
The Mutex pametni kazalec zagotavlja medsebojno izključevanje, da zagotovi, da lahko samo ena nit dostopa do vrednosti, hkrati pa preprečuje sledi podatkov.
Uvoziti boste morali Mutex struct in ustvarite nov primerek z novo funkcijo za uporabo Mutex Pametni kazalec v Rustu.
uporaba std:: sync:: Mutex;
fnglavni() {
// nov primerek kazalca mutexa
pustiti števec = Mutex:: novo(0);{
pustitimut num = counter.lock().unwrap();
*številka += 1;
}
println!("Rezultat: {}", *counter.lock().unwrap());
}
The števec spremenljivka je nova Mutex primerek. The glavni funkcija pridobi zaklepanje muteksa z zaklepanje metoda Mutex primerek. Ključavnica omogoča varno spreminjanje vrednosti števca, preden sprostite ključavnico in izpišete vrednost.
The Mutex tip zagotavlja, da lahko samo ena nit dostopa do skupnih virov (v tem primeru števec spremenljivka) in hkrati spremenite njeno vrednost. Medsebojna izključitev zagotavlja, da je sočasni dostop do skupnih virov serializiran, da se preprečijo sledi podatkov in druge težave s sočasnostjo.
Rustov model lastništva zagotavlja varnost pomnilnika
Pametni kazalci so eden od Rustovih pristopov k varnosti in prilagodljivosti pomnilnika. Rustov model lastništva zagotavlja, da programi varno uporabljajo pomnilnik s preverjalnikom izposoje med prevajanjem.
Preverjevalnik izposoje je ključna lastnost Rustovega modela lastništva, ki uveljavlja stroga pravila za dostopnost in spreminjanje pomnilnika.