Limbajele de programare diferă în ceea ce privește modul în care gestionează memoria și aplică regulile de gestionare a memoriei. Go și Python folosesc colectori de gunoi, astfel încât dezvoltatorii se pot concentra pe scrierea codului. C și C++ oferă programatorilor responsabilitatea de a gestiona memoria la un nivel inferior.
Rust tratează gestionarea memoriei în mod diferit, folosind concepte pe care le numește proprietate și împrumut. Utilizează un „verificator de împrumut” pentru a impune siguranța memoriei în mod eficient.
Ce este proprietatea?
Proprietatea este o caracteristică și o convenție a Rust care ajută la asigurarea siguranței memoriei programelor fără un colector de gunoi. Este un alt mod de a aborda problema scurgerilor de memorie în codul dvs.
Compilatorul Rust verifică dacă un program respectă regulile de proprietate la momentul compilării. Dacă programul respectă aceste reguli, poate rula. Dacă nu, compilatorul refuză să producă un executabil.
Rust verifică regulile de proprietate folosind
verificator de împrumut. Verificatorul de împrumut verifică modelul de proprietate și decide dacă o valoare în memorie (stivă sau grămadă) este în afara domeniului de aplicare sau nu. Dacă o valoare este în afara domeniului său de aplicare, nu este accesibilă altor părți ale programului decât dacă este împrumutată.Regulile de proprietate
În Rust, fiecare variabilă deține valoarea cu care a fost inițializată și poate exista un singur proprietar. Odată ce proprietarul este în afara domeniului de aplicare, valoarea este renunțată. Este important să înțelegeți detaliile regulilor de proprietate.
Prima regulă de proprietate este că fiecare variabilă își deține valoarea inițializată.
lăsa proprietar = Şir::de la ("unul");
The proprietar variabila de mai sus deține șirul unu și, spre deosebire de limbaje precum Python și Go, acea valoare va fi renunțată la realocarea variabilelor.
A doua regulă de proprietate este că două variabile nu pot indica aceeași locație de memorie; fiecare valoare poate avea un singur proprietar.
lăsa new_owner = proprietar;
The noul proprietar variabila acum deține valoarea stocată în locația de memorie a proprietar variabil. Dacă încercați să utilizați proprietar variabilă, compilatorul va intra în panică și va refuza să genereze un executabil.
În majoritatea limbilor care folosesc colectori de gunoi, două variabile pot indica aceeași locație de memorie. Iată un exemplu de cod JavaScript echivalent:
lăsa proprietar = „proprietar”;
lăsa new_owner = proprietar;
consolă.log (nou_proprietar);
Rularea codului JavaScript de mai sus funcționează fără erori și, dacă faceți același lucru în Go sau Python, programul dvs. va funcționa și fără erori.
A treia regulă de proprietate este că, odată ce o variabilă iese din domeniul declarat, valoarea este eliminată și memoria este dealocată.
// o variabilă într-un domeniu separat
{
lăsa exemplu = Şir::from("Iată un domeniu nou");
}
imprimare!("{}", exemplu)
Nu puteți accesa exemplu variabilă în afara domeniului său de aplicare; încercarea de a face acest lucru va face compilatorul să intre în panică.
Proprietatea în funcții
Când treceți o valoare unei funcții ca argument, funcția poate accesa acea variabilă chiar dacă nu a fost declarată în domeniul său de aplicare:
fnimprimanta(valoare: Şir) -> Şir {
întoarcere valoare
}fnprincipal() {
lăsa x = Şir::from("Tipărește o valoare"); // x deține valoarea șirului
// Proprietatea este mutată la funcția de imprimantă aici
imprimare!("{} The Rezultat din Printing X este că este -:", imprimanta (x));
}
Funcția poate accesa acea variabilă deoarece Rust mută proprietatea asupra acesteia în funcție în momentul compilării.
S-ar putea să credeți că este încă posibil să utilizați variabila mai târziu în domeniul său inițial:
fnimprimanta(valoare: Şir) -> Şir {
întoarcere valoare
}fnprincipal() {
lăsa x = Şir::from("Tipărește o valoare");
imprimare!("{} The Rezultat din Printing x este că este -:", imprimanta (x));
// Încercarea de a folosi variabila după ce a fost transferată proprietatea asupra valorii acesteia
println!("{} nu ar trebui să fie accesibil", x)
}
Dar dacă încercați acest lucru, compilatorul va intra în panică și va refuza să producă un executabil:
Rust prioritizează reutilizarea codului
Reutilizarea codului este o practică esențială, dar pentru a practica reutilizarea codului trebuie să înțelegeți regulile de proprietate ale Rust.
Rust este un limbaj de programare foarte flexibil. Oferă concepte precum împrumutul, mutarea, copierea și proprietatea clonării pentru reutilizarea variabilelor.