Co to jest własność?
Tradycyjnie istnieją dwa podstawowe sposoby zarządzania wspomnieniami. Pierwszym z nich to śmieci; Jest stosowany głównie w językach wysokiego poziomu, które abstrakcyjne koncepcję zarządzania pamięcią od programisty.
Drugi to „ręczne” zarządzanie pamięcią, w których programista wyraźnie definiuje użycie pamięci. Chociaż zapewnia kontrolę, pozostawia dużo miejsca na strzelanie w stopie.
Rust przyjmuje alternatywne podejście zwane własnością i pożyczaniem. Własność to nowy „konstrukt”, który określa wartość, ma właściciela.
Poniżej przedstawiono zasady własności w rdzy:
Aby lepiej zrozumieć własność rdzy, omówmy kilka koncepcji i przykładów.
Zakres
Możemy zdefiniować zakres jako zakres, w którym żyje określona wartość. Zakres odgrywa ważną rolę we własności i pożyczaniu.
Każda zmienna jest związana jej zakresem. W tym przypadku zakres odnosi się do bloku, jak zamknięty przez parę kręconych aparatów ortodontycznych.
Rozważ następujący przykład program:
fn main ()W poprzednim przykładowym programie mamy dwie funkcje: funkcję główną i funkcję new_func.
Wewnątrz głównej funkcji deklarujemy nową zmienną o nazwie Long_Life. Tworzymy również nowy zakres i deklarujemy nową zmienną o nazwie Short_Life.
Jeśli uruchomisz poprzedni kod, kompilator rdzy powie ci, że zmienne, Short_Life i Long_Life, nie istnieją w tym zakresie.
Wynika to z faktu, że zmienna Short_Life jest zadeklarowana w nowym zakresie. Po zakończeniu tego zakresu zmienna jest upuszczana. Oznacza to, że zmienna Short_Life nie istnieje poza kręconymi aparatami ortodontycznymi.
Ten sam przypadek dotyczy zmiennej Long_Life. Jest dostępny tylko w głównej funkcji. Próba dostępu do do niego w innej funkcji jest niedozwolona.
Sledzenie
Zmienne cieniowanie jest typowym przypadkiem. Odnosi się do funkcji, w której pierwsza deklaracja zmiennej jest „zastąpiona” lub zacieniona przez inną.
Weź następujący przykładowy kod:
fn main ()Tutaj mamy zmienną o nazwie Var1 ustawiona na 10. Następnie zacieniamy, deklarując zmienną o tej samej nazwie i ustawiamy ją na nową wartość.
To powinno wydrukować:
Uwaga: Nie myl cieńowania z mutubilnością. Sprawdź nasz samouczek na temat zmuszenia rdzy, aby dowiedzieć się więcej.
Przeniesienie własności
Rust pozwala nam przenieść własność wartości za pomocą operacji kopiowania lub przeniesienia. Weź następujący przykładowy kod:
fn main ()Poprzedni przykład deklaruje zmienną, var1, i przypisuje jej wartość 10. Zadeklarujemy również nową zmienną, var2, i przypisujemy ją do var1.
Kiedy tak się stanie, Rust utworzy nową kopię wartości i przypisuje ją do VAR2. Oznacza to, że obie zmienne nie mają wartości, a każda zajmuje własną przestrzeń pamięci.
Co się stanie, gdy próbujemy wykonać poprzednią operację o wartości o nieokreślonym rozmiarze pamięci?
Weźmy na przykład typ ciągu. Ponieważ może rosnąć lub kurczyć się, nie ma wcześniej określonej wielkości pamięci. Dlatego nie wdraża cechy kopii:
niech str1 = string :: z („hi”);Uruchomienie tej samej operacji zmusza kompilator rdzy do przeniesienia wartości STR1 do STR2. Ponieważ wartość może mieć tylko jednego właściciela na raz, zmienna STR1 nie jest już ważna. Spowoduje to, że kompilator zwróci błąd, jeśli spróbujemy uzyskać do niego dostęp:
Wniosek
Jednym z powodów, dla których Rustacean uwielbiają język programowania rdzy, jest własność. Jest to nowa funkcja, która jednocześnie oferuje większą elastyczność i bezpieczeństwo. Zrozumienie, jak to działa, może być korzystne dla tworzenia szybkich i wydajnych aplikacji. Ponadto omówiono zasady własności i koncepcji. Mamy nadzieję, że ten artykuł jest pomocny. Sprawdź inne artykuły z Linux, aby uzyskać więcej wskazówek i informacji.