Please enable JavaScript.
Coggle requires JavaScript to display documents.
Rust (Ownership (Rust zaujímá jiný přístup. Paměť je automaticky vrácena,…
Rust
Ownership
Paměť je řízena "systémem vlastnictví" se skupinou pravidel, které kompiler kontroluje v compile time.
- Každá hodnota v Rustu má proměnnou, která se nazývá jeho "Owner".
- Může být pouze jeden "Owner" v aktuálním čase.
- Když "Owner" vyjde ze scopu, tak hodnota se zahodí.
V jazycích, kde je Garbage Collector (GC) čistí paměť, která už není dále využívána automaticky.
V jazycích, kde není GC musíme paměť "vrátit".
Rust zaujímá jiný přístup. Paměť je automaticky vrácena, jakmile proměnná, která paměť vlastní je "out of scope".
Vypadá to jednoduše, ale může to být komplikované, když chceme mít několik proměnných, které jsme alokovali v "Heap".
Pokud "zkopírujeme" proměnnou do druhé proměnné (string), tak se zkopírují jen délka, kapacita. Pointer potom ukazuje do Heap, kde jsou data.
Takže je jedno, kolik proměnných uděláme. Vždy bude pointer odkazovat na stejné místo v Heap.
Problém je, že když "drop" funkce (čistí paměť na konci dané funkce) bude chtít paměť uvolnit, tak bude chtít uvolnit dvakrát tu stejnou paměť - ukazuje tam pointer.
To co Rust dělá je, že jakmile "zkopíruje" data, tak první proměnná není dále validní.
-
Pokud používáme například integer, tak po zavolání funkce a předání proměnné (integer) funkci můžeme dále proměnnou používat. U proměnné, která je string to dál už nejde - proměnná je nadále invalidní.
V hodně programovacích jazycích se nemusíte starat, jestli je proměnná v "heap", nebo ve "stack", ale v Rustu to má vliv na to, jak se program chová.
Stack je "first in, first out".
Jako, když skládáme talíře na sebe - když nějaký potřebujeme, tak nebereme ze spodku, nebo z prostředku, ale z vrchu.
-
-
Vkládání do Stacku je vždy rychlejší, než do Heap - OS nemusí hledat volnou paměť!
-
Reference and borowing
Pokud chceme předat proměnnou další funkci, ale nadále proměnnou používat, tak musíme předat referenci pomocí "&".
"&" - umožní vytvoří referenci, která referencuje do hodnoty proměnné, ale nevlastní ji!
-
V jednom čase lze mít pouze jednu "mutable" referenci, nebo několik "imutable" referencí.