Jakie typy Rusta są oznaczone pojedynczym apostrofem?

89

Napotkałem wiele typów w Rust oznaczonych jednym apostrofem:

'static
'r
'a

Jakie jest znaczenie tego apostrofu? Może to modyfikator referencji ( &)? Typowe typowanie specyficzne dla odniesień? Nie mam pojęcia, gdzie ukrywa się dokumentacja.

Greg Malcolm
źródło
1
są to nazwane okresy życia: static.rust-lang.org/doc/master/guide-lifetimes.html
Arjan,
Link w poprzednim komentarzu już nie działa. Nie wiem, czy to jest równoważne: doc.rust-lang.org/book/lifetimes.html
Ellen Spertus
Link Ellen również przestał działać - oto nowy (stan na czerwiec 2019): doc.rust-lang.org/book/ch10-03-lifetime-syntax.html

Odpowiedzi:

71

To są nazwane wcielenia Rusta.

Cytat z języka programowania Rust :

Każde odwołanie w Rust ma okres istnienia, czyli zakres, dla którego to odwołanie jest ważne. Większość okresów istnienia jest niejawna i wywnioskowana, tak jak wnioskuje się większość typów czasu. Podobnie jak w przypadku, gdy musimy dodawać adnotacje do typów, ponieważ możliwych jest wiele typów, są przypadki, w których okresy życia referencji mogą być powiązane na kilka różnych sposobów, więc Rust potrzebuje adnotacji relacji przy użyciu ogólnych parametrów czasu życia, aby upewnić się, że rzeczywiste odwołania używane w czasie wykonywania z pewnością będą prawidłowe.

Bezterminowe adnotacje nie zmieniają czasu trwania jakichkolwiek odnośników. W ten sam sposób, w jaki funkcje mogą akceptować dowolny typ, gdy podpis określa parametr typu ogólnego, funkcje mogą akceptować odwołania z dowolnym okresem życia, gdy podpis określa ogólny parametr okresu istnienia. To, co robią adnotacje dotyczące czasu życia, to powiązanie ze sobą czasów istnienia wielu odniesień.

Adnotacje dotyczące okresu istnienia mają nieco nietypową składnię: nazwy parametrów czasu życia muszą zaczynać się od apostrofu '. Nazwy parametrów czasu życia są zwykle pisane małymi literami i podobnie jak typy ogólne, ich nazwy są zwykle bardzo krótkie. 'ato nazwa, której większość ludzi używa jako domyślna. Adnotacje parametrów okresu &istnienia są umieszczane po odwołaniu, a spacja oddziela adnotację dotyczącą okresu istnienia od typu odwołania.

Mówiąc inaczej, okres istnienia przybliża okres wykonywania, podczas którego dane, na które wskazuje odniesienie, są ważne. Kompilator Rust ostrożnie wywnioskuje najkrótszy możliwy czas życia, aby był bezpieczny. Jeśli chcesz powiedzieć kompilatorowi, że referencja trwa dłużej niż najkrótsze oszacowanie, możesz ją nazwać, mówiąc, że na przykład referencja wyjściowa ma taki sam czas życia jak dane referencja wejściowa.

Życie 'staticjest życiem szczególnym, najdłuższym ze wszystkich wcieleń - na czas trwania programu. Typowym przykładem są „literały” łańcuchowe, które zawsze będą dostępne przez cały okres istnienia programu / modułu.

Możesz uzyskać więcej informacji z tej prezentacji , zaczynając od slajdu 29.

Lifetimes in Rust także omawia dogłębnie czasy życia.

quux00
źródło