Indicatoarele inteligente au avantaje suplimentare față de indicatoarele obișnuite. Iată tot ce trebuie să știți despre indicatoarele inteligente din Rust.

Gestionarea memoriei este unul dintre punctele de vânzare ale Rust, mai ales că siguranța nu este compromisă. Sistemul de proprietate Rust permite compilatorului să garanteze siguranța codului și lipsa erorilor de memorie, cum ar fi indicatorii suspendați și scurgerile de memorie.

Rust oferă, de asemenea, indicatori inteligenti cu metadate și capabilități suplimentare dincolo de indicatorii tradiționali. Indicatoarele inteligente sunt utile pentru a rezolva pierderile de memorie.

Ce sunt indicatoarele inteligente în Rust?

Indicatoarele inteligente sunt unul dintre Tipurile de date ale lui Rust care extinde capacitățile indicatoarelor obișnuite, oferind funcționalități suplimentare, cum ar fi operatori supraîncărcați, destructori și gestionarea automată a memoriei.

Rust utilizează structuri pentru a executa pointeri inteligente; astfel, indicatoarele inteligente au și capacități de proprietate.

instagram viewer

Când conectați memoria care conține date alocate dinamic cu pointeri inteligente, acestea sunt dealocate automat. Indicatoarele inteligente oferă funcționalitate pentru controlul Durata de viață a obiectului lui Rust, făcându-le la îndemână pentru prevenirea erorilor, cum ar fi dereferențiarea pointerului nul și scurgerile de memorie, care sunt populare în alte limbaje de nivel scăzut, cum ar fi C și C++.

Avantajele utilizării indicatoarelor inteligente

Iată câteva beneficii ale utilizării indicatoarelor inteligente:

  1. Gestionarea automată a memoriei: Indicatoarele inteligente oferă gestionarea automată a memoriei, inclusiv alocarea și dealocarea, spre deosebire de gestionarea manuală a memoriei cu pointere obișnuite.
  2. Siguranță îmbunătățită: Indicatoarele inteligente impun semantica proprietății, asigurând că un singur proprietar poate accesa resurse de fiecare dată, prevenind urmele datelor și erorile legate de concurență.
  3. Flexibilitate: Rust oferă mai multe indicatoare inteligente, fiecare cu setul său de semantica proprietății pentru scrierea flexibilă a codului sigur.
  4. Managementul resurselor: Puteți utiliza indicatori inteligenti pentru a gestiona alte resurse, cum ar fi manevrele de fișiere și socketurile de rețea, prin încapsularea resurselor într-un indicator inteligent care facilitează gestionarea ciclului de viață și se asigură că sunt corect închise și eliberate după utilizare.
  5. Performanta imbunatatita: Indicatoarele inteligente ajută la îmbunătățirea performanței prin reducerea copierii și alocărilor de memorie — amprenta redusă a memoriei prin utilizarea indicatoarelor inteligente are ca rezultat o performanță crescută.

Indicatoarele inteligente sunt potrivite pentru aplicații de dimensiuni medii și mari, mai ales în cazurile în care gestionarea memoriei este critică.

Tipuri de indicatori inteligente

Rust oferă mai multe tipuri de indicatoare inteligente, inclusiv Cutie, Rc, RefCell, și Mutex.

1. Pointerul Smart Box

The Cutie Smart Pointer este cel mai simplu și mai comun indicator inteligent al Rust. The Cutie pointerul inteligent ajută la alocarea de valori pe heap și creează un indicator în casetă pentru accesibilitate.

The Cutie Smart Pointer este util pentru alocarea dinamică a memoriei atunci când trebuie să vă asigurați că memoria este dealocată automat atunci când pointerii sunt în afara domeniului de aplicare.

Iată cum puteți declara și utiliza a Cutie indicator:

fnprincipal(){

// noua instanță a indicatorului smart casetă
lăsa x = Cutie::nou(5);
println!(X)

}

The Cutie tipul face parte din preludiul lui Rust, așa că nu va trebui să importați tipul, spre deosebire de alte indicatoare inteligente.

The X variabila este a Cutie indicatorul care indică valoarea cu 5 numere întregi. Rust alocă memoria pentru valoarea de pe heap și dealoca automat atunci când variabila este în afara domeniului de aplicare.

2. Indicatorul Rc Smart

The Rc Indicatorul inteligent (Reference Counted) oferă funcționalitate pentru crearea de valori de proprietate partajată. The Rc pointerii inteligente urmăresc numărul de referințe la o valoare și dealocați valoarea atunci când ultima referință este în afara domeniului de aplicare.

The Rc indicatorul inteligent este util atunci când trebuie să împărțiți proprietatea asupra unei valori pentru accesibilitate în mai multe părți ale programului dvs.

A declara un Rc indicator inteligent, veți importa Rc struct din biblioteca standard, declarați un nou Rc indicatorul cu nou funcția și clonează variabila pointer cu clonare variabil.

utilizare std:: rc:: Rc;

fnprincipal() {

// instanță nouă a indicatorului inteligent RC
lăsa x = Rc:: nou(5);
lăsa y = Rc:: clona(&x);

println!(„x = {}, y = {}”, X y);
}

The X variabila este Rc variabila pointer și y variabila este o clonă cu acces la valoarea din memorie. Numărul de referințe este de două, iar valoarea este dealocată din memorie atunci când variabilele sunt în afara domeniului de aplicare.

3. Indicatorul inteligent RefCell

The RefCell indicatorul inteligent oferă o mutabilitate interioară care permite referințelor imuabile și mutabile să coexiste atâta timp cât există o referință mutabilă pe timp dat.

The RefCell indicatorul inteligent este util atunci când se modifică valorile deținute de referințe mutabile.

The Refcell funcția nu face parte din preludiul lui Rust, așa că va trebui să importați structura din biblioteca standard pentru a utiliza indicatorul inteligent.

utilizare std:: cell:: RefCell;

fnprincipal(){

// instanță nouă a indicatorului inteligent Refcell
lăsa x = RefCell:: nou(5);

lăsa y = x.imprumuta();
lăsa z = x.borrow_mut();

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

}

The Refcell indicatorul inteligent conține valoarea și y variabila este referința imuabilă la valoare. The împrumut_mut funcția creează o referință mutabilă a valorii.

Programul este sigur dacă există o singură referință mutabilă la un moment dat.

4. Indicatorul inteligent Mutex

The Mutex indicatorul inteligent oferă excluderi reciproce. The Mutex indicatorul inteligent este la îndemână pentru sincronizarea accesului la valori în mai multe fire în programele concurente.

The Mutex pointerul inteligent oferă excluderea reciprocă pentru a se asigura că doar un fir poate accesa valoarea, prevenind în același timp urmele datelor.

Va trebui să importați Mutex struct și creați o instanță nouă cu nou funcție de utilizat Mutex Indicator inteligent în Rust.

utilizare std:: sync:: Mutex;

fnprincipal() {

// noua instanță a pointerului mutex
lăsa counter = Mutex:: new(0);

{
lăsamut num = counter.lock().unwrap();
*num += 1;
}

println!(„Rezultat: {}”, *counter.lock().unwrap());
}

The tejghea variabila este noua Mutex instanță. The principal funcția capătă o blocare pe mutex cu Lacăt metoda de Mutex instanță. Blocarea permite modificarea în siguranță a valorii contorului înainte de a elibera blocarea și de a imprima valoarea.

The Mutex type garantează că un singur fir poate accesa resursele partajate (în acest caz, the tejghea variabilă) și modificați valoarea acesteia la un moment dat. Excluderea reciprocă asigură că accesul simultan la resursele partajate este serializat pentru a preveni urmărirea datelor și alte probleme de concurență.

Modelul de proprietate al lui Rust garantează siguranța memoriei

Indicatoarele inteligente sunt una dintre abordările Rust privind siguranța și flexibilitatea memoriei. Modelul de proprietate al Rust asigură că programele utilizează memoria în siguranță cu verificatorul de împrumut în timpul compilării.

Verificatorul de împrumut este o caracteristică crucială a modelului de proprietate al lui Rust, care impune reguli stricte pentru accesibilitatea și modificarea memoriei.