Programovací jazyky se liší v tom, jak zacházejí s pamětí a vynucují pravidla správy paměti. Go a Python zaměstnávají garbage collectory, takže se vývojáři mohou soustředit na psaní kódu. C a C++ dávají programátorům odpovědnost za správu paměti na nižší úrovni.
Rust zachází se správou paměti jinak a používá pojmy, které nazývá vlastnictví a půjčování. K účinnému vynucení bezpečnosti paměti používá „kontrolu půjček“.
Co je vlastnictví?
Vlastnictví je funkce a konvence Rustu, která pomáhá zajistit paměťovou bezpečnost programů bez garbage collectoru. Je to další způsob řešení problém s úniky paměti ve vašem kódu.
Kompilátor Rust v době kompilace kontroluje, zda program dodržuje pravidla vlastnictví. Pokud se program řídí těmito pravidly, může běžet. Pokud tomu tak není, kompilátor odmítne vytvořit spustitelný soubor.
Rust ověřuje pravidla vlastnictví pomocí půjčka checker. Nástroj pro kontrolu výpůjček ověří model vlastnictví a rozhodne, zda je hodnota v paměti (hromada nebo hromada) je mimo rozsah nebo ne. Pokud je hodnota mimo její rozsah, není přístupná ostatním částem programu, pokud není vypůjčena.
Pravidla vlastnictví
V Rustu každá proměnná vlastní hodnotu, se kterou je inicializována, a může existovat pouze jeden vlastník. Jakmile je vlastník mimo rozsah, hodnota se zruší. Je důležité porozumět podrobnostem pravidel vlastnictví.
První pravidlo vlastnictví je, že každá proměnná vlastní svou inicializovanou hodnotu.
nechat majitel = Tětiva::from("jeden");
The majitel výše uvedená proměnná vlastní řetězec jeden a na rozdíl od jazyků jako Python a Go bude tato hodnota při změně přiřazení proměnné vynechána.
Druhé pravidlo vlastnictví je, že dvě proměnné nemohou ukazovat na stejné místo v paměti; každá hodnota může mít pouze jednoho vlastníka.
nechat new_owner = vlastník;
The nový majitel proměnná nyní vlastní hodnotu uloženou v paměťovém místě majitel variabilní. Pokud se pokusíte použít majitel proměnnou, kompilátor zpanikaří a odmítne vygenerovat spustitelný soubor.
Ve většině jazyků, které používají garbage collectors, mohou dvě proměnné ukazovat na stejné místo v paměti. Zde je příklad ekvivalentního kódu JavaScript:
nechat vlastník = "vlastník";
nechat new_owner = vlastník;
řídicí panel.log (nový_vlastník);
Spuštění výše uvedeného kódu JavaScript funguje bez chyb, a pokud totéž uděláte v Go nebo Pythonu, váš program bude také fungovat bez chyb.
Třetí pravidlo vlastnictví je, že jakmile je proměnná mimo deklarovaný rozsah, hodnota se zahodí a paměť se uvolní.
// proměnná v samostatném rozsahu
{
nechat příklad = Tětiva::from("Tady je nový rozsah");
}
tisk!("{}", příklad)
Nemáte přístup k příklad proměnná mimo její rozsah; pokus o to způsobí, že kompilátor propadne panice.
Vlastnictví ve funkcích
Když předáte hodnotu funkci jako argument, funkce může k této proměnné přistupovat, i když nebyla deklarována v jejím rozsahu:
fntiskárna(hodnota: Tětiva) -> Tětiva {
vrátit se hodnota
}fnhlavní() {
nechat x = Tětiva::from("Vytiskne hodnotu"); // x vlastní hodnotu řetězce
// zde se vlastnictví přesune do funkce tiskárny
tisk!(„{} The Výsledek of Printing X je, že to -:", tiskárna (x));
}
Funkce má k této proměnné přístup, protože Rust přesune její vlastnictví do funkce v době kompilace.
Možná si myslíte, že je stále možné použít proměnnou později v jejím původním rozsahu:
fntiskárna(hodnota: Tětiva) -> Tětiva {
vrátit se hodnota
}fnhlavní() {
nechat x = Tětiva::from("Vytiskne hodnotu");
tisk!(„{} The Výsledek of Printing x je, že to -:", tiskárna (x));
// Pokus o použití proměnné poté, co bylo převedeno vlastnictví její hodnoty
println!("{} by neměl být přístupný", x)
}
Ale pokud to zkusíte, kompilátor zpanikaří a odmítne vytvořit spustitelný soubor:
Rust upřednostňuje znovupoužitelnost kódu
Opětovná použitelnost kódu je základní praxí, ale k procvičování opětovného použití kódu musíte porozumět pravidlům vlastnictví Rust.
Rust je velmi flexibilní programovací jazyk. Poskytuje koncepty jako půjčování, přesouvání, kopírování a klonování vlastnictví pro variabilní opětovné použití.