Programmēšanas valodas atšķiras ar to, kā tās apstrādā atmiņu un ievieš atmiņas pārvaldības noteikumus. Go un Python izmanto atkritumu savācējus, lai izstrādātāji varētu koncentrēties uz koda rakstīšanu. C un C++ uzdod programmētājiem atbildību par atmiņas pārvaldību zemākā līmenī.

Rust izturas pret atmiņas pārvaldību atšķirīgi, izmantojot jēdzienus, ko tā sauc par īpašumtiesībām un aizņemšanos. Tas izmanto “aizņemšanās pārbaudītāju”, lai efektīvi nodrošinātu atmiņas drošību.

Kas ir īpašumtiesības?

Īpašumtiesības ir Rust funkcija un vienošanās, kas palīdz nodrošināt programmu atmiņas drošību bez atkritumu savācēja. Tas ir vēl viens veids, kā cīnīties atmiņas noplūdes problēma savā kodā.

Rust kompilators pārbauda, ​​vai programma kompilēšanas laikā ievēro īpašumtiesību noteikumus. Ja programma ievēro šos noteikumus, to var palaist. Ja tā nenotiek, kompilators atsakās izveidot izpildāmo failu.

Rust pārbauda īpašumtiesību noteikumus, izmantojot aizņemties pārbaudītāju. Aizņemšanās pārbaudītājs pārbauda īpašumtiesību modeli un izlemj, vai atmiņā (

instagram viewer
kaudze vai kaudze) ir vai nav darbības joma. Ja vērtība ir ārpus tās darbības jomas, tā nav pieejama citām programmas daļām, ja vien tā nav aizņemta.

Īpašumtiesību noteikumi

Programmā Rust katram mainīgajam pieder vērtība, ar kuru tas ir inicializēts, un var būt tikai viens īpašnieks. Kad īpašnieks ir ārpus darbības jomas, vērtība tiek samazināta. Ir svarīgi izprast īpašumtiesību noteikumu detaļas.

Pirmais īpašumtiesību noteikums ir tāds, ka katram mainīgajam pieder tā inicializētā vērtība.

ļaut īpašnieks = Stīga::from("viens");

The īpašnieks iepriekšminētajam mainīgajam pieder virkne viens un atšķirībā no tādām valodām kā Python un Go, mainot mainīgo, šī vērtība tiks atmesta.

Otrais īpašumtiesību noteikums ir tāds, ka divi mainīgie nevar norādīt uz vienu un to pašu atmiņas vietu; katrai vērtībai var būt tikai viens īpašnieks.

ļaut jauns_īpašnieks = īpašnieks;

The jauns_īpašnieks mainīgajam tagad pieder vērtība, kas saglabāta atmiņas vietā īpašnieks mainīgs. Ja mēģināt izmantot īpašnieks mainīgais, kompilators nonāks panikā un atsakās ģenerēt izpildāmo failu.

Lielākajā daļā valodu, kurās tiek izmantoti atkritumu savācēji, divi mainīgie var norādīt uz vienu un to pašu atmiņas vietu. Šeit ir līdzvērtīga JavaScript koda piemērs:

ļaut īpašnieks = "īpašnieks";
ļaut jauns_īpašnieks = īpašnieks;
konsole.log (jaunais_īpašnieks);

Iepriekš minētā JavaScript koda palaišana darbojas bez kļūdām, un, ja to darīsit Go vai Python, arī jūsu programma darbosies bez kļūdām.

Trešais īpašumtiesību noteikums ir tāds, ka, tiklīdz mainīgais ir ārpus deklarētās jomas, vērtība tiek noņemta un atmiņa tiek atbrīvota.

// mainīgais atsevišķā tvērumā
{
ļaut piemērs = Stīga::from("Šeit ir jauns tvērums");
}

drukāt!("{}", piemērs)

Jūs nevarat piekļūt piemērs mainīgais ārpus tā darbības jomas; mēģinot to izdarīt, kompilatorā radīsies panika.

Īpašumtiesības funkcijās

Kad funkcijai nododat vērtību kā argumentu, funkcija var piekļūt šim mainīgajam, pat ja tas nav deklarēts tā darbības jomā:

fnprinteris(vērtība: Stīga) -> Stīga {
atgriezties vērtību
}

fngalvenais() {
ļaut x = Stīga::from("Drukā vērtību"); // x pieder virknes vērtība

// īpašumtiesības tiek pārvietotas uz printera funkciju šeit
drukāt!("{} Rezultāts of Printing X ir tas, ka tas -:", printeris (x));
}

Funkcija var piekļūt šim mainīgajam, jo ​​Rust nodod īpašumtiesības uz to funkcijai kompilēšanas laikā.

Jūs varētu domāt, ka joprojām ir iespējams izmantot mainīgo vēlāk tā sākotnējā tvērumā:

fnprinteris(vērtība: Stīga) -> Stīga {
atgriezties vērtību
}

fngalvenais() {
ļaut x = Stīga::from("Drukā vērtību");
drukāt!("{} Rezultāts no Drukāšanas x ir tas, ka tas -:", printeris (x));

// Mēģina izmantot mainīgo pēc tam, kad ir nodotas īpašumtiesības uz tā vērtību
println!("{} nedrīkst būt pieejams", x)
}

Bet, ja jūs mēģināt to izdarīt, kompilators nonāks panikā un atsakās izveidot izpildāmo failu:

Rūsa dod priekšroku koda atkārtotai izmantošanai

Koda atkārtota izmantošana ir būtiska prakse, taču, lai praktizētu koda atkārtotu izmantošanu, jums ir jāsaprot Rust īpašumtiesību noteikumi.

Rust ir ļoti elastīga programmēšanas valoda. Tas nodrošina tādus jēdzienus kā aizņemšanās, pārvietošana, kopēšana un īpašumtiesību klonēšana mainīgai atkārtotai izmantošanai.