Programski jeziki se razlikujejo po tem, kako ravnajo s pomnilnikom in uveljavljajo pravila upravljanja pomnilnika. Go in Python zaposlujeta zbiralce smeti, tako da se lahko razvijalci osredotočijo na pisanje kode. C in C++ programerjem dajeta odgovornost za upravljanje pomnilnika na nižji ravni.

Rust upravljanje pomnilnika obravnava drugače, pri čemer uporablja koncepte, ki jih imenuje lastništvo in izposoja. Za učinkovito uveljavljanje varnosti pomnilnika uporablja "preverjevalnik izposoje".

Kaj je lastništvo?

Lastništvo je funkcija in konvencija Rusta, ki pomaga zagotoviti varnost pomnilnika programov brez zbiralnika smeti. To je drug način reševanja problem puščanja spomina v vaši kodi.

Prevajalnik Rust med prevajanjem preveri, ali program upošteva pravila lastništva. Če program sledi tem pravilom, se lahko izvaja. Če se ne, prevajalnik noče izdelati izvedljive datoteke.

Rust preveri pravila lastništva z uporabo izposoditi čeker. Preverjevalnik izposoje preveri model lastništva in se odloči, ali je vrednost v pomnilniku (

instagram viewer
sklad ali kup) je izven obsega ali ne. Če je vrednost izven svojega obsega, ni dostopna drugim delom programa, razen če je izposojena.

Pravila o lastništvu

V Rustu ima vsaka spremenljivka vrednost, s katero je inicializirana, lastnik pa je lahko samo en. Ko je lastnik izven obsega, se vrednost izbriše. Pomembno je razumeti podrobnosti lastniških pravil.

Prvo pravilo lastništva je, da ima vsaka spremenljivka svojo inicializirano vrednost.

pustiti lastnik = Vrvica::od("ena");

The lastnik zgornja spremenljivka ima v lasti niz eno in za razliko od jezikov, kot sta Python in Go, bo ta vrednost opuščena pri ponovni dodelitvi spremenljivke.

Drugo pravilo lastništva je, da dve spremenljivki ne moreta kazati na isto pomnilniško lokacijo; vsaka vrednost ima lahko samo enega lastnika.

pustiti novi_lastnik = lastnik;

The novi_lastnik spremenljivka ima zdaj vrednost, shranjeno na pomnilniški lokaciji lastnik spremenljivka. Če poskušate uporabiti lastnik spremenljivke, se bo prevajalnik ustrašil in zavrnil generiranje izvedljive datoteke.

V večini jezikov, ki uporabljajo zbiralnike smeti, lahko dve spremenljivki kažeta na isto pomnilniško lokacijo. Tukaj je primer enakovredne kode JavaScript:

pustiti lastnik = "lastnik";
pustiti novi_lastnik = lastnik;
konzola.log (nov_lastnik);

Zagon zgornje kode JavaScript deluje brez napak in če enako storite v Go ali Python, bo tudi vaš program deloval brez napak.

Tretje pravilo lastništva je, da ko je spremenljivka izven deklariranega obsega, se vrednost izbriše in pomnilnik se sprosti.

// spremenljivka v ločenem obsegu
{
pustiti primer = Vrvica::from("Tukaj je nov obseg");
}

natisni!("{}", primer)

Ne morete dostopati do primer spremenljivka zunaj svojega obsega; poskus tega povzroči paniko v prevajalniku.

Lastništvo v funkcijah

Ko funkciji posredujete vrednost kot argument, lahko funkcija dostopa do te spremenljivke, čeprav ni bila navedena v njenem obsegu:

fntiskalnik(vrednost: Vrvica) -> Vrvica {
vrnitev vrednost
}

fnglavni() {
pustiti x = Vrvica::from("Natisne vrednost"); // x ima vrednost niza

// lastništvo se tukaj prenese na funkcijo tiskalnika
natisni!("{} The Rezultat tiskanja X je, da je -:", tiskalnik (x));
}

Funkcija lahko dostopa do te spremenljivke, ker Rust v času prevajanja prenese lastništvo nad njo na funkcijo.

Morda mislite, da je spremenljivko še vedno mogoče uporabiti pozneje v njenem izvirnem obsegu:

fntiskalnik(vrednost: Vrvica) -> Vrvica {
vrnitev vrednost
}

fnglavni() {
pustiti x = Vrvica::from("Natisne vrednost");
natisni!("{} The Rezultat tiskanja x je, da je -:", tiskalnik (x));

// Poskus uporabe spremenljivke po prenosu lastništva njene vrednosti
println!("{} ne bi smelo biti dostopno", x)
}

Toda če poskusite to, se bo prevajalnik ustrašil in zavrnil izdelavo izvedljive datoteke:

Rust daje prednost ponovni uporabi kode

Ponovna uporabnost kode je bistvena praksa, a če želite izvajati ponovno uporabnost kode, morate razumeti pravila lastništva Rusta.

Rust je zelo prilagodljiv programski jezik. Ponuja koncepte, kot so izposoja, premikanje, kopiranje in lastništvo kloniranja za spremenljivo ponovno uporabnost.