Smarte pointere har tilføjede fordele i forhold til almindelige pointere. Her er alt, hvad du behøver at vide om smarte pointers i Rust.

Hukommelsesstyring er et af Rusts salgsargumenter, især da sikkerheden ikke kompromitteres. Rusts ejerskabssystem gør det muligt for compileren at garantere kodesikkerhed og frihed fra hukommelsesfejl som dinglende pointere og hukommelseslækager.

Rust giver også smarte pointere med yderligere metadata og muligheder ud over traditionelle pointere. Smarte pointere er praktiske til at tackle hukommelseslækager.

Hvad er smarte pointere i rust?

Smarte pointere er en af Rusts datatyper der udvider mulighederne for almindelige pointere ved at tilbyde yderligere funktionaliteter som overbelastede operatører, destruktorer og automatisk hukommelsesstyring.

Rust bruger strukturer til at udføre smarte pointere; således har smarte pointere også ejerskabsmuligheder.

Når du forbinder hukommelse, der indeholder dynamisk allokerede data, med smarte pointere, deallokeres de automatisk. Smarte pointere giver funktionalitet til styring af

instagram viewer
Rusts objektlevetid, hvilket gør dem praktiske til at forhindre fejl som null pointer dereferencing og hukommelseslækager, der er populære i andre lavniveausprog som C og C++.

Fordele ved at bruge Smart Pointers

Her er nogle fordele ved at bruge smarte pointere:

  1. Automatisk hukommelsesstyring: Smarte pointere giver automatisk hukommelsesstyring, inklusive allokering og deallokering, i modsætning til manuel hukommelsesstyring med almindelige pointere.
  2. Forbedret sikkerhed: Smarte pointere håndhæver ejerskabssemantik, der sikrer, at kun én ejer kan få adgang til ressourcer pr. gang, hvilket forhindrer dataspor og samtidighedsrelaterede fejl.
  3. Fleksibilitet: Rust giver flere smarte pointere, hver med sit sæt af ejerskab semantik til fleksibel skrivning af sikker kode.
  4. Ressourcestyring: Du kan bruge smarte pointere til at administrere andre ressourcer som filbehandlere og netværkssockets ved at indkapsle ressourcerne inden for en smart pointer, der gør det nemmere at styre deres livscyklus og sikre, at de er korrekt lukket og frigivet efter brug.
  5. Forbedret ydeevne: Smarte pointere hjælper med at forbedre ydeevnen ved at reducere hukommelseskopiering og -allokeringer – reduceret hukommelsesfodaftryk fra brug af smarte pointere resulterer i øget ydeevne.

Smart pointere er velegnede til mellemstore til store applikationer, især i tilfælde, hvor hukommelsesstyring er kritisk.

Typer af smarte pointere

Rust giver flere typer smarte pointere, bl.a Boks, Rc, RefCell, og Mutex.

1. Box Smart Pointer

Det Boks Smart Pointer er Rusts enkleste og mest almindelige smarte pointer. Det Boks smart pointer hjælper med at allokere værdier på heapen og skaber en indrammet pointer for tilgængelighed.

Det Boks Smart Pointer er praktisk til dynamisk hukommelsesallokering, når du skal sikre, at hukommelsen automatisk deallokeres, når pointerne er uden for rækkevidde.

Sådan kan du deklarere og bruge en Boks pointer:

fnvigtigste(){

// ny forekomst af boksen smart pointer
lade x = Boks::ny(5);
println!(x)

}

Det Boks type er en del af Rusts optakt, så du slipper for at importere typen i modsætning til andre smarte pointere.

Det x variabel er en Boks markør, der peger på 5-heltalsværdien. Rust allokerer hukommelsen for værdien på heapen og deallokerer automatisk, når variablen er uden for scope.

2. Rc Smart Pointer

Det Rc (Reference Counted) smart pointer giver funktionalitet til at skabe værdier af delt ejerskab. Det Rc smarte pointere sporer antallet af referencer til en værdi og tildeler værdien, når den sidste reference er uden for rækkevidde.

Det Rc smart pointer er praktisk, når du skal dele ejerskabet af en værdi for tilgængelighed i flere dele af dit program.

At erklære en Rc smart pointer, importerer du Rc struct fra standardbiblioteket, erklære en ny Rc pointer med ny funktion, og klon pointervariablen med klon variabel.

brug std:: rc:: Rc;

fnvigtigste() {

// ny forekomst af RC smart pointer
lade x = Rc:: ny(5);
lade y = Rc:: klon(&x);

println!("x = {}, y = {}", x, y);
}

Det x variabel er Rc pointer variabel, og y variabel er en klon med adgang til værdien i hukommelsen. Referenceantallet er to, og værdien bliver deallokeret fra hukommelsen, når variablerne er uden for rækkevidde.

3. RefCell Smart Pointer

Det RefCell smart pointer giver indvendig mutabilitet, der tillader uforanderlige og foranderlige referencer at eksistere side om side, så længe der er én foranderlig reference pr. given tid.

Det RefCell smart pointer er praktisk, når du muterer værdier, der ejes af foranderlige referencer.

Det Refcell funktion er ikke en del af Rusts optakt, så du bliver nødt til at importere strukturen fra standardbiblioteket for at bruge den smarte pointer.

brug std:: celle:: RefCell;

fnvigtigste(){

// ny forekomst af Refcell smart pointer
lade x = RefCell:: ny(5);

lade y = x.lån();
lade z = x.lån_mut();

println!("y = {}", *y);
println!("z = {}", *z);

}

Det Refcell smart pointer indeholder værdien og y variabel er den uforanderlige reference til værdien. Det låne_mut funktion opretter en foranderlig reference for værdien.

Programmet er sikkert, hvis der kun er én foranderlig reference ad gangen.

4. Mutex Smart Pointer

Det Mutex smart pointer giver gensidige udelukkelser. Det Mutex smart pointer er praktisk til at synkronisere adgang til værdier på tværs af flere tråde i samtidige programmer.

Det Mutex smart pointer giver gensidig udelukkelse for at sikre, at kun én tråd kan få adgang til værdien og samtidig forhindre dataspor.

Du skal importere Mutex strukturer og opret en ny instans med ny funktion at bruge Mutex Smart Pointer i rust.

brug std:: sync:: Mutex;

fnvigtigste() {

// ny forekomst af mutex-markøren
lade tæller = Mutex:: ny(0);

{
lademut num = counter.lock().unwrap();
*num += 1;
}

println!("Resultat: {}", *counter.lock().unwrap());
}

Det tæller variabel er den nye Mutex eksempel. Det vigtigste funktion opnår en lås på mutex'et med låse metoden til Mutex eksempel. Låsen muliggør sikker ændring af tællerens værdi, før låsen udløses og værdien udskrives.

Det Mutex type garanterer, at kun én tråd kan få adgang til de delte ressourcer (i dette tilfælde tæller variabel) og ændre dens værdi ad gangen. Den gensidige udelukkelse sikrer, at samtidig adgang til delte ressourcer serialiseres for at forhindre dataspor og andre samtidighedsproblemer.

Rusts ejerskabsmodel garanterer hukommelsessikkerhed

Smart pointers er en af ​​Rusts tilgange til hukommelsessikkerhed og fleksibilitet. Rusts ejerskabsmodel sikrer, at programmer bruger hukommelsen sikkert med lånekontrollen på kompileringstidspunktet.

Lånekontrollen er et afgørende træk ved Rusts ejerskabsmodel, der håndhæver strenge regler for tilgængelighed og modifikation af hukommelsen.