Pametni pokazivači imaju dodatne prednosti u odnosu na obične pokazivače. Ovdje je sve što trebate znati o pametnim pokazivačima u Rustu.
Upravljanje memorijom jedno je od Rustovih prodajnih mjesta, pogotovo jer sigurnost nije ugrožena. Rustov sustav vlasništva omogućuje kompajleru da jamči sigurnost koda i slobodu od memorijskih pogrešaka poput visećih pokazivača i curenja memorije.
Rust također nudi pametne pokazivače s dodatnim metapodacima i mogućnostima izvan tradicionalnih pokazivača. Pametni pokazivači zgodni su za rješavanje curenja memorije.
Što su pametni pokazivači u Rustu?
Pametni pokazivači su jedan od Rustove vrste podataka koji proširuje mogućnosti uobičajenih pokazivača nudeći dodatne funkcionalnosti kao što su preopterećeni operatori, destruktori i automatsko upravljanje memorijom.
Rust koristi strukture za izvršavanje pametnih pokazivača; stoga pametni pokazivači također imaju mogućnosti vlasništva.
Kada memoriju koja sadrži dinamički dodijeljene podatke povežete s pametnim pokazivačima, oni se automatski oslobađaju. Pametni pokazivači pružaju funkcionalnost za kontrolu
Životni vijek Rustovog objekta, što ih čini praktičnim za sprječavanje pogrešaka poput dereferenciranja nultog pokazivača i curenja memorije koji su popularni u drugim jezicima niske razine kao što su C i C++.Prednosti korištenja pametnih pokazivača
Evo nekih prednosti korištenja pametnih pokazivača:
- Automatsko upravljanje memorijom: Pametni pokazivači omogućuju automatsko upravljanje memorijom, uključujući dodjelu i poništavanje, za razliku od ručnog upravljanja memorijom s običnim pokazivačima.
- Poboljšana sigurnost: Pametni pokazivači provode semantiku vlasništva, osiguravajući da samo jedan vlasnik može pristupiti resursima u jednom trenutku, sprječavajući tragove podataka i pogreške povezane s paralelnošću.
- Fleksibilnost: Rust pruža više pametnih pokazivača, svaki sa svojim skupom semantika vlasništva za fleksibilno pisanje sigurnog koda.
- Upravljanje resursima: Možete koristiti pametne pokazivače za upravljanje drugim resursima kao što su rukovatelji datotekama i mrežne utičnice kapsuliranjem resursa unutar pametnog pokazivača koji olakšava upravljanje njihovim životnim ciklusom i osigurava da su ispravno zatvoreni i otpušteni nakon toga koristiti.
- Poboljšane performanse: Pametni pokazivači pomažu u poboljšanju performansi smanjenjem kopiranja i dodjele memorije—smanjena količina memorije korištenjem pametnih pokazivača rezultira povećanom izvedbom.
Pametni pokazivači prikladni su za aplikacije srednje i velike veličine, posebno u slučajevima kada je upravljanje memorijom kritično.
Vrste pametnih pokazivača
Rust nudi više vrsta pametnih pokazivača, uključujući Kutija, Rc, RefCell, i Mutex.
1. The Box Smart Pointer
The Kutija Smart Pointer je Rustov najjednostavniji i najčešći pametni pokazivač. The Kutija pametni pokazivač pomaže pri dodjeljivanju vrijednosti na hrpi i stvara pokazivač u kutiji za pristupačnost.
The Kutija Pametni pokazivač je praktičan za dinamičku dodjelu memorije kada trebate osigurati da se memorija automatski oslobađa kada su pokazivači izvan opsega.
Evo kako možete deklarirati i koristiti a Kutija pokazivač:
fnglavni(){
// nova instanca pametnog pokazivača okvira
neka x = Kutija::novi(5);
println!(x)
}
The Kutija type dio je Rustovog uvoda, tako da nećete morati uvoziti tip, za razliku od drugih pametnih pokazivača.
The x varijabla je a Kutija pokazivač koji pokazuje na vrijednost 5 cijelog broja. Rust dodjeljuje memoriju za vrijednost na hrpi i automatski je poništava kada je varijabla izvan opsega.
2. Rc pametni pokazivač
The Rc (Reference Counted) pametni pokazivač pruža funkcionalnost za stvaranje vrijednosti zajedničkog vlasništva. The Rc pametni pokazivači prate broj referenci na vrijednost i oslobađaju vrijednost kada je zadnja referenca izvan opsega.
The Rc pametni pokazivač je zgodan kada trebate podijeliti vlasništvo nad vrijednošću za pristupačnost u više dijelova vašeg programa.
Za deklaraciju Rc pametni pokazivač, uvest ćete Rc struct iz standardne biblioteke, deklarirajte novu Rc pokazivač s novi i klonirajte varijablu pokazivača s klon varijabla.
koristiti std:: rc:: Rc;
fnglavni() {
// nova instanca RC pametnog pokazivača
neka x = Rc:: novo(5);
neka y = Rc:: klon(&x);
println!("x = {}, y = {}", x, y);
}
The x varijabla je Rc varijabla pokazivača i g varijabla je klon s pristupom vrijednosti u memoriji. Broj referenci je dva, a vrijednost se oslobađa iz memorije kada su varijable izvan opsega.
3. RefCell pametni pokazivač
The RefCell pametni pokazivač pruža unutarnju promjenjivost koja omogućuje koegzistiranje nepromjenjivih i promjenjivih referenci sve dok postoji jedna promjenjiva referenca po određenom vremenu.
The RefCell pametni pokazivač je zgodan kada se mijenjaju vrijednosti koje posjeduju promjenjive reference.
The Refcell funkcija nije dio Rustovog preludea, pa ćete morati uvesti strukturu iz standardne biblioteke da biste koristili pametni pokazivač.
koristiti std:: ćelija:: RefCell;
fnglavni(){
// nova instanca pametnog pokazivača Refcell
neka x = RefCell:: new(5);neka y = x.posuditi();
neka z = x.posuditi_mut();println!("y = {}", *y);
println!("z = {}", *z);
}
The Refcell pametni pokazivač sadrži vrijednost, a g varijabla je nepromjenjiva referenca na vrijednost. The posuditi_mut funkcija stvara promjenjivu referencu vrijednosti.
Program je siguran ako postoji samo jedna promjenjiva referenca u isto vrijeme.
4. Mutex pametni pokazivač
The Mutex pametni pokazivač omogućuje međusobno isključivanje. The Mutex pametni pokazivač je zgodan za sinkronizaciju pristupa vrijednostima u više niti u istodobnim programima.
The Mutex pametni pokazivač omogućuje uzajamno isključivanje kako bi se osiguralo da samo jedna nit može pristupiti vrijednosti dok istovremeno sprječava tragove podataka.
Morat ćete uvesti Mutex strukturirati i stvoriti novu instancu s novi funkcija za korištenje Mutex Pametni pokazivač u Rustu.
koristiti std:: sync:: Mutex;
fnglavni() {
// nova instanca mutex pokazivača
neka brojač = Mutex:: novo(0);{
nekamut num = counter.lock().unwrap();
*broj += 1;
}
println!("Rezultat: {}", *counter.lock().unwrap());
}
The brojač varijabla je nova Mutex primjer. The glavni funkcija dobiva zaključavanje na mutexu s zaključati metoda Mutex primjer. Zaključavanje omogućuje sigurnu promjenu vrijednosti brojača prije otpuštanja zaključavanja i ispisa vrijednosti.
The Mutex tip jamči da samo jedna nit može pristupiti dijeljenim resursima (u ovom slučaju, brojač varijabla) i mijenjati njezinu vrijednost odjednom. Uzajamno isključivanje osigurava da je istodobni pristup zajedničkim resursima serijaliziran kako bi se spriječili tragovi podataka i drugi problemi s istodobnošću.
Rustov model vlasništva jamči sigurnost memorije
Pametni pokazivači jedan su od Rustovih pristupa sigurnosti i fleksibilnosti memorije. Rustov model vlasništva osigurava da programi sigurno koriste memoriju s alatom za provjeru posuđivanja tijekom kompajliranja.
Provjera posuđivanja ključna je značajka Rustovog vlasničkog modela koji nameće stroga pravila za dostupnost i modifikaciju memorije.