Języki programowania różnią się sposobem obsługi pamięci i egzekwowania reguł zarządzania pamięcią. Go i Python wykorzystują garbage collectors, dzięki czemu programiści mogą skupić się na pisaniu kodu. C i C++ dają programistom odpowiedzialność za zarządzanie pamięcią na niższym poziomie.
Rust traktuje zarządzanie pamięcią inaczej, używając pojęć, które nazywa posiadaniem i pożyczaniem. Wykorzystuje „kontroler pożyczania”, aby skutecznie egzekwować bezpieczeństwo pamięci.
Co to jest własność?
Własność to funkcja i konwencja Rusta, która pomaga zapewnić bezpieczeństwo pamięci programów bez modułu odśmiecania pamięci. To kolejny sposób na poradzenie sobie problem wycieków pamięci w twoim kodzie.
Kompilator Rusta sprawdza, czy program przestrzega zasad własności w czasie kompilacji. Jeśli program przestrzega tych zasad, może działać. Jeśli tak się nie stanie, kompilator odmawia utworzenia pliku wykonywalnego.
Rust weryfikuje zasady własności za pomocą pożyczyć sprawdzania. Narzędzie do sprawdzania pożyczek weryfikuje model własności i decyduje, czy wartość w pamięci (
stos lub sterta) jest poza zakresem lub nie. Jeśli wartość jest poza zakresem, nie jest dostępna dla innych części programu, chyba że została wypożyczona.Zasady własności
W Ruście każda zmienna posiada wartość, z którą została zainicjowana, i może być tylko jeden właściciel. Gdy właściciel jest poza zakresem, wartość jest usuwana. Ważne jest, aby zrozumieć szczegóły zasad własności.
Pierwszą zasadą własności jest to, że każda zmienna posiada swoją zainicjowaną wartość.
wynajmować właściciel = Strunowy::od jednego");
The właściciel zmienna powyżej jest właścicielem napisu jeden i, w przeciwieństwie do języków takich jak Python i Go, ta wartość zostanie odrzucona przy ponownym przypisaniu zmiennej.
Drugą zasadą własności jest to, że dwie zmienne nie mogą wskazywać tej samej lokalizacji w pamięci; każda wartość może mieć tylko jednego właściciela.
wynajmować nowy_właściciel = właściciel;
The nowy właściciel zmienna posiada teraz wartość przechowywaną w lokalizacji pamięci właściciel zmienny. Jeśli spróbujesz użyć właściciel kompilator wpadnie w panikę i odmówi wygenerowania pliku wykonywalnego.
W większości języków używających odśmiecaczy pamięci dwie zmienne mogą wskazywać na tę samą lokalizację w pamięci. Oto przykład równoważnego kodu JavaScript:
wynajmować właściciel = "właściciel";
wynajmować nowy_właściciel = właściciel;
konsola.log (nowy_właściciel);
Uruchomienie powyższego kodu JavaScript działa bez błędów, a jeśli zrobisz to samo w Go lub Pythonie, Twój program również będzie działał bez błędów.
Trzecia reguła własności polega na tym, że gdy zmienna znajduje się poza zadeklarowanym zakresem, wartość jest usuwana, a pamięć jest zwalniana.
// zmienna w osobnym zakresie
{
wynajmować przykład = Strunowy::from("Oto nowy zakres");
}
wydrukować!("{}", przykład)
Nie możesz uzyskać dostępu do przykład zmienna poza jej zakresem; próba zrobienia tego spowoduje panikę kompilatora.
Własność w funkcjach
Gdy przekazujesz wartość do funkcji jako argument, funkcja może uzyskać dostęp do tej zmiennej, nawet jeśli nie została zadeklarowana w jej zasięgu:
fndrukarka(wartość: Strunowy) -> Strunowy {
zwrócić wartość
}fnGłówny() {
wynajmować x = Strunowy::from("Wypisuje wartość"); // x jest właścicielem wartości ciągu
// własność zostaje przeniesiona do funkcji drukarki tutaj
wydrukować!("{} Wynik drukowania X jest to, że to -:", drukarka (x));
}
Funkcja może uzyskać dostęp do tej zmiennej, ponieważ Rust przenosi jej własność na funkcję w czasie kompilacji.
Możesz pomyśleć, że nadal można użyć zmiennej później w jej pierwotnym zakresie:
fndrukarka(wartość: Strunowy) -> Strunowy {
zwrócić wartość
}fnGłówny() {
wynajmować x = Strunowy::from("Wypisuje wartość");
wydrukować!("{} Wynik drukowania x jest to, że to -:", drukarka (x));
// Próba użycia zmiennej po przeniesieniu własności jej wartości
drukuj!("{} nie powinno być dostępne", x)
}
Ale jeśli spróbujesz tego, kompilator wpadnie w panikę i odmówi utworzenia pliku wykonywalnego:
Rust nadaje priorytet ponownemu użyciu kodu
Ponowne wykorzystanie kodu jest podstawową praktyką, ale aby przećwiczyć ponowne wykorzystanie kodu, musisz zrozumieć zasady własności Rusta.
Rust to bardzo elastyczny język programowania. Zawiera koncepcje takie jak pożyczanie, przenoszenie, kopiowanie i klonowanie własności w celu wielokrotnego ponownego wykorzystania.