Rust používa nástroj na kontrolu výpožičiek, aby presadil svoje vlastnícke pravidlá a zabezpečil, že programy sú bezpečné pre pamäť. Pravidlá vlastníctva určujú, ako Rust spravuje pamäť nad zásobníkom a haldou.

Pri písaní programov Rust budete musieť používať premenné bez zmeny vlastníctva súvisiacej hodnoty. Rust poskytuje robustný mechanizmus výpožičiek na podporu flexibility a opätovného použitia kódu.

Čo je požičiavanie v hrdze?

Požičiavanie je prístup k hodnote premennej bez prevzatie vlastníctva premennej odkazom na vlastníka. Nástroj na kontrolu výpožičiek zaisťuje, že referencia je platná a údaje sa nezahadzujú pomocou konštrukcie nazývanej životnosť.

Životnosť vyjadruje, ako dlho existuje premenná. Životnosť začína vytvorením premennej a končia deštrukciou premennej. Môžete si požičať vlastníctvo premennej, a keď je vypožičaná referencia mimo rozsahu, vlastníctvo sa vráti do premennej vlastníka. Požičiavanie je trochu ako ukazovatele, ktoré nájdete v jazykoch ako C++ a Go. Kompilátor Rust však používa nástroj na kontrolu výpožičiek, aby zabezpečil, že programy sú bezpečné pre pamäť.

instagram viewer

Príklad požičiavania v hrdze

Vlastníctvo premennej si môžete požičať uvedením vlastníka pomocou symbolu ampersand (&).

fnhlavné() {
nech x = Reťazec::from("ahoj"); // x vlastní "ahoj"
nech y = &x; // y odkazuje na x, požičiava "ahoj"
println!("{}", X);
println!("{}", y)
}

Bez požičiavania pomocou odkazovania by program spanikáril. Porušilo by to pravidlo vlastníctva, že hodnota môže mať jedného vlastníka a dve premenné nemôžu ukazovať na to isté miesto v pamäti. Požičiavanie môže byť veľmi užitočné vo funkciách. Tu je príklad požičiavania vo funkcii, aby ste si zachovali vlastníctvo pri volaní iných funkcií, ktoré berú lokálne premenné ako argumenty.

fntlačiť_párne(vectr: &Vec<i32>) {
pre hodnoty v vectr {
ak hodnoty % 2 == 0 {
println!("{}", hodnoty);
}
}
}

The tlačiť_párne funkcia odkazuje na vektor 32-bitových celých čísel ako svoj argument. Potom vytlačí riadky hodnôt, ktoré sú násobkami dvoch vo vektore pomocou slučky for a println! makro.

fnhlavné() {
nech číselný_vektor = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
print_even(&number_vector); // vlastníctvo je požičané, nepresťahované
println!("Hlavná funkcia si zachováva vlastníctvo číselného vektora{:?}", číselný_vektor)
}

Hlavná funkcia deklaruje premennú number_vector a priradí jej vektor 32-bitových celých čísel. Potom zavolá funkciu print_even a odovzdá jej odkaz na číselný_vektor premenná pomocou symbolu ampersand.

Hlavná funkcia si zachováva vlastníctvo číselný_vektor premennej, môže naďalej používať hodnotu vo svojom pamäťovom mieste.

Požičiavanie a mutovanie referencií

Funkcie môžu tiež upravovať vypožičané premenné pomocou meniteľných odkazov na ne, a to pred vrátením vlastníctva.

Na rozdiel od bežných premenných, ktoré je možné nastaviť na premenlivé pomocou kľúčového slova mut, musíte pred premenlivé odkazy uviesť symbol ampersand.

Pred vytvorením meniteľných odkazov musí byť premenná, ktorú chcete upraviť, meniteľná.

fnodstrániť_hodnotu(vectr: &mutVec<i32>) -> &Vec<i32> {
vectr.remove(4);
vrátiť vectr
}

The odstrániť_hodnotu funkcia berie odkaz na meniteľný vektor 32-bitových celých čísel. Po odstránení hodnoty vektora vo štvrtom indexe vráti vektor 32-bitových celých čísel.

fnhlavné() {
nechmut čísla = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
remove_value(&mut čísla); // meniteľný odkaz tu
println!("{:?}", nums);
}

Funkcia upravuje nums vektor volaním remove_value a odovzdaním meniteľnej referencie vektora ako argumentu. Pri tlači vektora predchádzajúci štvrtý index vektora neexistuje.

Všimnite si, že argument je odkaz na premenlivý vektor.

Je dôležité pochopiť vlastníctvo a požičiavanie

Aby ste mohli napísať efektívny, pamäťovo bezpečný kód Rust, ktorý sa skompiluje a spustí, budete musieť pochopiť vlastníctvo a požičiavanie. Ak váš kód nespĺňa pravidlá vlastníctva, kontrola pôžičiek to zistí. Budete musieť zabezpečiť pamäť svojho programu, aby ho Rust mohol skompilovať.

Kontrola pôžičiek je nepríjemná, keď ste v Ruste noví. Ale keď budete písať viac kódu Rust, zvyknete si na to a získate skúsenosti s písaním kódu Rust bezpečného pre pamäť.