Hva er eierskap?
Tradisjonelt er det to grunnleggende måter å håndtere minner. Den første er søppeloppsamlere; Det brukes hovedsakelig på språk på høyt nivå som abstraherer begrepet minnestyring fra programmereren.
Den andre er "manuell" minnestyring, der programmereren eksplisitt definerer minnebruk. Selv om det gir kontroll, etterlater det mye rom for å skyte deg selv i foten.
Rust tar på seg en alternativ tilnærming som kalles eierskap og lån. Eierskap er en ny "konstruksjon" som definerer en verdi har eieren.
Følgende er eierreglene i rust:
For bedre å forstå rustseierskap, la oss diskutere noen få konsepter og eksempler.
omfang
Vi kan definere omfang som et område som en spesifisert verdi lever. Omfanget spiller en viktig rolle i eierskap og lån.
Hver variabel er bundet av omfanget. I dette tilfellet refererer et omfang til en blokk som er omsluttet av et par krøllete seler.
Tenk på følgende eksempelprogram:
fn main ()I det forrige eksempelprogrammet har vi to funksjoner: hovedfunksjonen og New_Func -funksjonen.
Inne i hovedfunksjonen erklærer vi en ny variabel kalt long_life. Vi lager også et nytt omfang og erklærer en ny variabel som heter Short_Life.
Hvis du kjører den forrige koden, vil Rust -kompilatoren fortelle deg at variablene, Short_Life og Long_Life, ikke eksisterer i det omfanget.
Dette er fordi den variable short_life er erklært i et nytt omfang. Når dette omfanget slutter, blir variabelen droppet. Dette betyr at den variable short_life ikke eksisterer utenfor de krøllete seler.
Det samme tilfellet gjelder for lang_livsvariabelen. Det er bare tilgjengelig i hovedfunksjonen. Å prøve å få tilgang til den i en annen funksjon er ikke tillatt.
Skygge
Variabel skygge er et typisk tilfelle. Den refererer til en funksjon der den første variable erklæringen er "overskrevet" eller skygget av en annen.
Ta følgende eksempelkode:
fn main ()Her har vi en variabel kalt var1 satt til 10. Deretter skygger vi det ved å erklære variabelen med samme navn og sette den til en ny verdi.
Dette skal skrive ut:
Merk: Ikke forveksle skygge med mutabilitet. Sjekk opplæringen vår om rustmutabilitet for å lære mer.
Overfør eierskap
Rust lar oss overføre eierskapet til verdi ved hjelp av kopierings- eller flytting av operasjoner. Ta følgende eksempelkode:
fn main ()Det forrige eksemplet erklærer en variabel, var1, og tildeler den verdien 10. Vi erklærer også en ny variabel, var2, og tildeler den til var1.
Når dette skjer, vil Rust opprette en ny kopi av verdien og tilordne den til var2. Dette betyr at begge variablene ikke deler verdien, og hver okkuperer sitt eget minneplass.
Hva skjer når vi prøver å utføre den forrige operasjonen på en verdi med en ikke-deterministisk minnestørrelse?
Ta for eksempel en strengtype. Siden det kan vokse eller krympe, er det ingen forhåndsbestemt minnestørrelse. Derfor implementerer den ikke kopienegenskapen:
La str1 = streng :: fra ("Hei");Å kjøre den samme operasjonen tvinger Rust -kompilatoren til å flytte verdien av STR1 til STR2. Siden en verdi bare kan ha en eier av gangen, er variabelen STR1 ikke lenger gyldig. Dette vil føre til at kompilatoren returnerer en feil hvis vi prøver å få tilgang til den:
Konklusjon
En grunn til at rustaceans elsker rustprogrammeringsspråket er eierskap. Det er en ny funksjon som tilbyr mer fleksibilitet og sikkerhet samtidig. Å forstå hvordan det fungerer kan være gunstig for å lage raske og effektive applikasjoner. I tillegg ble eierreglene og konseptene diskutert. Vi håper du fant denne artikkelen nyttig. Sjekk de andre Linux -hint -artiklene for flere tips og informasjon.