Rust Types - Taxonomy
By Nikita Bishonen
ΠΡΠΈΠ²Π΅Ρ! Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ Π΄Π΅Π»ΡΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΌΡΡΠ»ΡΠΌΠΈ ΠΎ ΡΠ°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΠΈ ΡΠΈΠΏΠΎΠ² Π² Π Π°ΡΡ. ΠΡΠΎ ΠΏΠ΅ΡΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΠ°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΠΈ ΠΈ ΠΏΠΎΡΡΠ°, Π±ΡΠ΄Ρ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ Π·Π° Π»ΡΠ±ΡΠ΅ ΠΈΠ΄Π΅ΠΈ ΠΏΠΎ Π΅Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ.
Π’Π°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΡ
Π’Π°ΠΊΡΠΎΠ½ΠΎΜΠΌΠΈΡ (ΠΎΡ Π΄Ρ.-Π³ΡΠ΅Ρ. ΟάξιΟΒ β ΡΡΡΠΎΠΉ, ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΈ Ξ½ΟΞΌΞΏΟΒ β Π·Π°ΠΊΠΎΠ½)Β β ΡΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠΎΡΠ½ΠΎΡΡΡΠΈΡ ΡΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ.
Π― Π·Π°Ρ ΠΎΡΠ΅Π» ΡΠΊΡΠ°ΡΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΊΠ°Π±ΠΈΠ½Π΅Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠ΅ΠΉ "ΡΠ°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΠΈ" ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΡΡ ΠΎΠΆΠ΅ΠΉ Ρ ΡΠΎΠΉ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π Π°ΡΡ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ ΠΌΠΎΠΈ ΠΏΠΎΠΈΡΠΊΠΈ Π½Π΅ ΠΏΡΠΈΠ½Π΅ΡΠ»ΠΈ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈ Ρ ΡΠ΅ΡΠΈΠ» ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΡ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΡ ΠΈ Π΄Π΅Π»ΡΡΡ Π΅Ρ Ρ Π²Π°ΠΌΠΈ Π² ΡΡΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ.
Π’ΠΈΠΏΡ
Π’Π΅ΠΎΡΠΈΠΈ
Π’Π΅ΠΎΡΠΈΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½Ρ ΠΈΡΡΠΎΡΠΈΠ΅ΠΉ ΡΠ°Π·Π²ΠΈΡΠΈΡ Π½Π°ΡΠΊΠΈ ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΡ , Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠΌΠ΅ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅Π½Π½ΠΎΡΡΡ ΠΈ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅. ΠΡΠΈΠ²Π΅Π΄Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π΄Π²Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΡΠ΅ΠΎΡΠΈΠΈ ΠΈΠ· ΠΎΠ±Π΅ΠΈΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΉ:
ΠΠΎ Π½Π΅ Π±ΡΠ΄Ρ ΠΏΡΡΠ°ΡΡΡΡ Π²Π΄Π°Π²Π°ΡΡΡΡ Π² Π΄Π΅ΡΠ°Π»ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΠΈΡ ΡΠΎ ΡΠΊΡΠΈΠΏΠΎΠΌ, ΡΡΠΎ ΡΠΆ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΈΡ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ.
Π’Π΅ΠΎΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² ΠΈ Π Π°ΡΡ
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ, ΠΎΡΠ²Π΅Ρ Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΈΡΠΊΠ°Π» - ΡΠ΅ΠΎΡΠΈΡ ΡΠΈΠΏΠΎΠ² ΡΡΠΎΡΡΠ°Ρ Π·Π° Π Π°ΡΡ ΠΈ Π΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡ Π½Π° ΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° Π½Π° Π Π°ΡΡ. ΠΠ΅ Ρ ΠΎΠ΄ΠΈΠ½ Π·Π°Π΄Π°Π²Π°Π»ΡΡ ΡΠ°ΠΊΠΈΠΌ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ: https://users.rust-lang.org/t/practical-intro-to-type-theory/18204/5 Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π΄ΠΎΠΊΠ»Π°Π΄ Π½Π° ΡΡΡ ΡΠ΅ΠΌΡ: https://av.tib.eu/media/52178 "ΠΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ": https://ia0.github.io/unsafe-mental-model/type-theory.html Π ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΉ ΠΏΠΎΡΡ: https://www.kurtlawrence.info/blog/category-theory-with-rust-pt1 ΠΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΠΊΠ² ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ "Π²ΡΠ΅ΠΎΠ±ΡΠ΅ΠΌΠ»ΡΡΠ΅Π³ΠΎ" Π³ΡΠ°ΡΠΈΠΊΠ°, ΡΡΠΎΠ±Ρ Ρ ΠΏΠΎΠ²Π΅ΡΠΈΠ» Π΅Π³ΠΎ Π½Π° ΡΡΠ΅Π½Ρ.
Π’Π°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΡ Π Π°ΡΡ Π’ΠΈΠΏΠΎΠ²
Π ΠΈΡΠΎΠ³Π΅ Ρ, Π½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ²ΠΎΠΈΡ ΠΏΠΎΠ·Π½Π°Π½ΠΈΠΉ Π² ΡΠ΅ΠΎΡΠΈΠΈ, ΡΠΎΡΡΠ°Π²ΠΈΠ» ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ°ΠΊΠΎΠΉ ΡΠ°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΠΈ. Π― ΠΎΡΠ΅Π½Ρ Π»ΡΠ±Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π΅ΡΠ΅Π²ΡΡ (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅), Π΄Π»Ρ Π²ΡΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΉ, ΠΌΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΡΡΠΎ ΡΠ°ΠΊ Π»Π΅Π³ΡΠ΅ Π½Π°Π²ΠΈΠ³ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΈΡ ΡΡΡΡ. Π‘Π°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΡΠ΅Π»ΡΡ ΡΡΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ, Π½ΠΎ Π΄Π»Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΡ ΡΡ ΠΈ Π½Π΅ΠΈΡΠΊΡΡΡΠ½Π½ΡΡ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ Ρ ΠΏΡΠΈΠ²ΠΎΠΆΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠ½Π΅Π½ΠΈΡ ΠΈ ΡΡΡΠ»ΠΊΠΈ Π½ΠΈΠΆΠ΅.
Π-ΡΠΈΠΏ
Π’ΠΈΠΏ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΠΈ Π΄Π°ΡΡ, Π½ΠΈ Π²Π·ΡΡΡ. ΠΡ ΠΊΠΎΠΌΠΏΠ°Π½ΡΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏΠΎΠ² Π² ΠΎΠ΄ΠΈΠ½, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΊΠ°ΠΊ Π½ΠΎΠ²ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΊΠΈΠ΅ ΡΠΈΠΏΡ Π² Π Π°ΡΡ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ?
- ΠΠΎΡΡΠ΅ΠΆ: Tuple
- Π‘ΡΡΡΠΊΡΡΡΠ°: Struct
- ΠΠΎΡΡΠ΅ΠΆ-Π‘ΡΡΡΠΊΡΡΡΠ°: Tuple Struct
- ΠΠ΄ΠΈΠ½ΠΈΡΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°: Unit-Like Struct
- ΠΠ°ΡΡΠΈΠ²: Array
- Π‘ΡΠ΅Π·: Slice
Ξ£-ΡΠΈΠΏ
Π’ΠΈΠΏ-ΡΡΠΌΠΌΠ° Π² ΠΎΡΠ»ΠΈΡΠΈΠΈ ΠΎΡ Π-ΡΠΈΠΏΠ°, ΡΠΈΠΏ-ΡΡΠΌΠΌΠ° Π΄Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠ³ΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠΈΠΏΠΎΠ².
- ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅: Tagged Union
- ΠΠΏΡΠΈΠΎΠ½: Option
- Π Π΅Π·ΡΠ»ΡΡΠ°Ρ: Result
Π’ΠΈΠΏΡ-ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ
Π Π°ΡΡ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ·ΡΠΊ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ ΠΈ ΡΡΡΠ»ΠΊΠΈ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ. ΠΠ°Ρ ΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ "Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅" ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ.
- Π‘ΡΡΠ»ΠΊΠΈ: References
- Π£ΠΌΠ½ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ
- ΠΠΎΡΠΎΠ±ΠΊΠ°: ΠΠ»Π»ΠΎΡΠΈΡΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΡΡΠ΅. Box
- Rc/Arc: Π‘ΡΡΡΡΠΈΠΊΠΈ ΡΡΡΠ»ΠΎΠΊ. Reference counters
- Ref/RefMut + RefCell: ΠΠ°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Runtime borrowing
ΠΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ
- Π€ΡΠ½ΠΊΡΠΈΠΈ: ΠΠ΅ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠ°ΠΊΡΠΎΠ½ΠΎΠΌΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π»ΠΈΡΡ ΠΏΠΎΡΡΠΎΠ»ΡΠΊΡ-ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ.
- ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ: Closures
- FnOnce: Documentation
- FnMut: Documentation
- Fn: Documentation
- ΠΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ°ΠΆΠΈ: Trait Objects
- Π€Π°Π½ΡΠΎΠΌΠ½ΡΠ΅ ΡΠΈΠΏΡ: Phantom Data