Programovacie jazyky sa líšia v tom, ako zaobchádzajú s pamäťou a presadzujú pravidlá správy pamäte. Go a Python zamestnávajú zberačov odpadu, takže vývojári sa môžu sústrediť na písanie kódu. C a C++ dávajú programátorom zodpovednosť za správu pamäte na nižšej úrovni.
Rust zaobchádza so správou pamäte odlišne, používa koncepty, ktoré nazýva vlastníctvo a požičiavanie. Na efektívne presadzovanie bezpečnosti pamäte používa „kontrolu výpožičiek“.
Čo je vlastníctvo?
Vlastníctvo je vlastnosť a konvencia Rustu, ktorá pomáha zaistiť bezpečnosť pamäte programov bez zberača odpadu. Je to ďalší spôsob riešenia problém úniku pamäte vo vašom kóde.
Kompilátor Rust skontroluje, či program dodržiava pravidlá vlastníctva v čase kompilácie. Ak program dodržiava tieto pravidlá, môže sa spustiť. Ak nie, kompilátor odmietne vytvoriť spustiteľný súbor.
Rust overuje vlastnícke pravidlá pomocou požičiavateľ. Nástroj na kontrolu výpožičiek overí model vlastníctva a rozhodne, či hodnota v pamäti (hromada alebo hromada
) je mimo rozsahu pôsobnosti alebo nie. Ak je hodnota mimo jej rozsahu, nie je prístupná iným častiam programu, pokiaľ nie je vypožičaná.Pravidlá vlastníctva
V Ruste každá premenná vlastní hodnotu, s ktorou je inicializovaná, a môže existovať iba jeden vlastník. Keď je vlastník mimo rozsahu, hodnota sa zruší. Je dôležité porozumieť podrobnostiam pravidiel vlastníctva.
Prvým pravidlom vlastníctva je, že každá premenná vlastní svoju inicializovanú hodnotu.
nech majiteľ = Reťazec::from("jeden");
The vlastník vyššie uvedená premenná vlastní reťazec jeden a na rozdiel od jazykov ako Python a Go sa táto hodnota pri opätovnom priradení premennej zruší.
Druhé pravidlo vlastníctva je, že dve premenné nemôžu ukazovať na to isté miesto v pamäti; každá hodnota môže mať len jedného vlastníka.
nech new_owner = vlastník;
The nový_vlastník premenná teraz vlastní hodnotu uloženú v pamäťovom mieste vlastník premenlivý. Ak sa pokúsite použiť vlastník premennej, kompilátor prepadne panike a odmietne vygenerovať spustiteľný súbor.
Vo väčšine jazykov, ktoré používajú zberače odpadu, môžu dve premenné ukazovať na rovnaké miesto v pamäti. Tu je príklad ekvivalentného kódu JavaScript:
nech vlastník = "vlastník";
nech new_owner = vlastník;
konzoly.log (nový_vlastník);
Spustenie vyššie uvedeného kódu JavaScript funguje bez chýb a ak to isté urobíte v Go alebo Pythone, váš program bude tiež fungovať bez chýb.
Tretie pravidlo vlastníctva je, že akonáhle je premenná mimo deklarovaného rozsahu, hodnota sa zruší a pamäť sa uvoľní.
// premenná v samostatnom rozsahu
{
nech príklad = Reťazec::from("Tu je nový rozsah");
}
tlačiť!("{}", príklad)
Nemáte prístup k príklad premenná mimo jej rozsahu; pokus o to spôsobí paniku kompilátora.
Vlastníctvo vo funkciách
Keď odošlete hodnotu do funkcie ako argument, funkcia môže pristupovať k tejto premennej, aj keď nebola deklarovaná v jej rozsahu:
fntlačiareň(hodnota: Reťazec) -> Reťazec {
vrátiť hodnotu
}fnhlavné() {
nech x = Reťazec::from("Vytlačí hodnotu"); // x vlastní hodnotu reťazca
// tu sa vlastníctvo presunie do funkcie tlačiarne
tlačiť!(„{} The Výsledok of Printing X je, že to -:", tlačiareň (x));
}
Funkcia môže pristupovať k tejto premennej, pretože Rust presúva jej vlastníctvo do funkcie v čase kompilácie.
Možno si myslíte, že je stále možné použiť premennú neskôr v pôvodnom rozsahu:
fntlačiareň(hodnota: Reťazec) -> Reťazec {
vrátiť hodnotu
}fnhlavné() {
nech x = Reťazec::from("Vytlačí hodnotu");
tlačiť!(„{} The Výsledok of Printing x je, že to -:", tlačiareň (x));
// Pokus o použitie premennej po prevode vlastníctva jej hodnoty
println!("{} by nemalo byť dostupné", x)
}
Ak to však vyskúšate, kompilátor spanikári a odmietne vytvoriť spustiteľný súbor:
Hrdza uprednostňuje opätovnú použiteľnosť kódu
Opätovná použiteľnosť kódu je základnou praxou, ale na precvičenie opätovného použitia kódu musíte pochopiť pravidlá vlastníctva spoločnosti Rust.
Rust je veľmi flexibilný programovací jazyk. Poskytuje koncepty ako požičiavanie, presúvanie, kopírovanie a klonovanie vlastníctva pre variabilnú opätovnú použiteľnosť.