Програмски језици се разликују по томе како рукују меморијом и примењују правила управљања меморијом. Го и Питхон запошљавају сакупљаче смећа, тако да се програмери могу фокусирати на писање кода. Ц и Ц++ дају програмерима одговорност за управљање меморијом на нижем нивоу.

Руст другачије третира управљање меморијом, користећи концепте које назива власништвом и позајмљивањем. Користи „проверу позајмљивања“ за ефикасно спровођење безбедности меморије.

Шта је власништво?

Власништво је карактеристика и конвенција Руста која помаже да се обезбеди сигурност меморије програма без сакупљача смећа. То је још један начин решавања проблем цурења меморије у вашем коду.

Руст компајлер проверава да ли програм поштује правила власништва у време компајлирања. Ако програм прати ова правила, може се покренути. Ако то не учини, компајлер одбија да произведе извршни фајл.

Руст проверава правила власништва користећи позајмљивач. Контролор позајмљивања верификује модел власништва и одлучује да ли је вредност у меморији (

instagram viewer
стек или гомила) је ван опсега или не. Ако је вредност ван свог опсега, није доступна другим деловима програма осим ако није позајмљена.

Правила о власништву

У Русту, свака променљива поседује вредност којом је иницијализована, а може бити само један власник. Када је власник ван опсега, вредност се испушта. Важно је разумети детаље правила о власништву.

Прво правило власништва је да свака променљива поседује своју иницијализовану вредност.

дозволити власник = Низ::фром("један");

Тхе власник горња варијабла поседује стринг једно и, за разлику од језика као што су Питхон и Го, та вредност ће бити испуштена приликом прерасподеле променљиве.

Друго правило власништва је да две варијабле не могу упућивати на исту меморијску локацију; свака вредност може имати само једног власника.

дозволити нови_власник = власник;

Тхе нови_власник променљива сада поседује вредност сачувану на меморијској локацији власник променљива. Ако покушате да користите власник променљиве, компајлер ће успаничити и одбити да генерише извршни фајл.

У већини језика који користе сакупљаче смећа, две варијабле могу указивати на исту меморијску локацију. Ево примера еквивалентног ЈаваСцрипт кода:

дозволити власник = "власник";
дозволити нови_власник = власник;
конзола.лог (нев_овнер);

Покретање горенаведеног ЈаваСцрипт кода ради без грешака, а ако исто урадите у Го или Питхон-у, ваш програм ће такође радити без грешака.

Треће правило власништва је да када променљива изађе ван декларисаног опсега, вредност се испушта и меморија се ослобађа.

// променљива у посебном опсегу
{
дозволити пример = Низ::фром("Ево новог опсега");
}

принт!(„{}“, пример)

Не можете приступити пример променљива ван свог опсега; покушај да то уради ће изазвати панику компајлера.

Власништво у функцијама

Када проследите вредност функцији као аргумент, функција може да приступи тој променљивој иако није декларисана у њеном опсегу:

фнштампач(вредност: Низ) -> Низ {
повратак вредност
}

фнглавни() {
дозволити к = Низ::фром("Штампа вредност"); // к поседује вредност стринга

// власништво је премештено у функцију штампача овде
принт!("{} Тхе Резултат штампања Кс је да је -:", штампач (к));
}

Функција може да приступи тој променљивој јер Руст пребацује власништво над њом на функцију у време компајлирања.

Можда мислите да је још увек могуће користити променљиву касније у њеном оригиналном опсегу:

фнштампач(вредност: Низ) -> Низ {
повратак вредност
}

фнглавни() {
дозволити к = Низ::фром("Штампа вредност");
принт!("{} Тхе Резултат од Штампање к је да је -:", штампач (к));

// Покушавамо да користимо променљиву након што је власништво над њеном вредношћу пренесено
принтлн!(„{} не би требало да буде доступно“, к)
}

Али ако покушате ово, компајлер ће се успаничити и одбити да произведе извршни фајл:

Руст даје предност поновној употреби кода

Поновна употреба кода је суштинска пракса, али да бисте практиковали поновну употребу кода, морате разумети Руст-ова правила власништва.

Руст је веома флексибилан програмски језик. Он пружа концепте као што су позајмљивање, премештање, копирање и клонирање власништва за променљиву поновну употребу.