Przekazywanie Pożyczonych Danych
Zasady Rusta dotyczące refencji i pożyczania mogą być ujęte w następujących dwóch punktach:
- Dla każdego zasobu, Rust pozwala na istnienie tylko jednej mutowalnej referencji albo dowolnej ilości nie-mutowalnych referencji. Istnienie dwóch typów referencji do jednego zasobu jest niedozwolone.
- Referencja nie może żyć dłużej niż właściciel, czyli zasób na który wskazuje.
Te zasady nie powinny nam sprawiać zbyt wielu problemów w przypadku przekazywania referencji do wywoływanych funkcji.
Kilka szczegółów:
- Pierwsza z wymienionych wyżej zasad gwarantuje nam brak wyścigów do danych. Czym jest wyścig do danych? Jest to sytuacja w której odczyt danych z zasobu może być niezgodny z aktualnym stanem zmiennej, ze względu na istniejący jednocześnie wątek który wypisuje do tego samego zasobu w tym samym czasie. Ten problem jest częsty w programowaniu wielowątkowym.
- Druga z wymienionych wyżej zasad eliminuje problem z referencjami które wskazują na nie istniejące dane (w nomenklaturze języka C nazywamy to zjawisko dangling pointer).