Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ шаги ΠΏΠΎ Rust

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚. НСдавно познакомился с Π½ΠΎΠ²Ρ‹ΠΌ для сСбя языком программирования Rust. Π― Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΎΠ½ отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΠ½Π΅ Π΄ΠΎ этого доводилось ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ρ€Π΅ΡˆΠΈΠ» ΠΏΠΎΠΊΠΎΠΏΠ°Ρ‚ΡŒ Π³Π»ΡƒΠ±ΠΆΠ΅. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ ΠΈ своими впСчатлСниями Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ:

Π‘Ρ€Π°Π·Ρƒ поясню, Ρ‡Ρ‚ΠΎ я ΠΎΠΊΠΎΠ»ΠΎ дСсяти Π»Π΅Ρ‚ ΠΏΠΈΡˆΡƒ Π½Π° Java, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€Π°ΡΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ Π±ΡƒΠ΄Ρƒ со своСй колокольни.

Killer feature

Rust пытаСтся Π·Π°Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ языками Ρ‚ΠΈΠΏΠ° C/C++ ΠΈ высокоуровнСвыми Java/C#/Python/Ruby… Π§Π΅ΠΌ Π±Π»ΠΈΠΆΠ΅ язык находится ΠΊ ΠΆΠ΅Π»Π΅Π·Ρƒ, Ρ‚Π΅ΠΌ большС контроля, Π»Π΅Π³Ρ‡Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ. Но ΠΈ имСя ΠΏΠΎΠ»Π½Ρ‹ΠΉ доступ ΠΊ памяти Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΡ‚ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ сСбС Π½ΠΎΠ³Ρƒ. Π’ противовСс Π‘/Π‘++ появились Python/Java ΠΈ всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅. Π’ Π½ΠΈΡ… Π½Π΅Ρ‚ нСобходимости Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΠ± очистки памяти. Бамая ΡΡ‚Ρ€Π°ΡˆΠ½Π°Ρ Π±Π΅Π΄Π° β€” это NPE, ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ Π½Π΅ Ρ‚Π°ΠΊΠΎΠ΅ ΡƒΠΆ частоС явлСниС. Но Ρ‡Ρ‚ΠΎΠ±Ρ‹ это всС Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, garbage collector, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΆΠΈΡ‚ΡŒ своСй Тизнью, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Π΅Ρ‰Π΅ Π΄Π°Π΅Ρ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΎΠ½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ, Π½ΠΎ Π½Π° сколько это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ β€” спорный вопрос, Π½Π΅ Π±ΡƒΠ΄Ρƒ Π΅Π³ΠΎ сСйчас ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Ρ‚ΡŒ.

Rust являСтся Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ языком, Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ компилятор Π²Ρ‹Π΄Π°Π΅Ρ‚ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ, для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ухищрСния. Вся Π»ΠΎΠ³ΠΈΠΊΠ° ΠΏΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² интСгрируСтся Π² ΠΊΠΎΠ΄ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ компиляции, Ρ‚.Π΅. сборщика мусора Π²ΠΎ врСмя выполнСния Ρ‚ΠΎΠΆΠ΅ Π½Π΅Ρ‚. Π’ Rust Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π΅Ρ‚ пустых ссылок ΠΈ Ρ‚ΠΈΠΏΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ бСзопасными, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ Ρ‡Π΅ΠΌ Java.

Π’ основС управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π»Π΅ΠΆΠΈΡ‚ идСя владСния ссылкой Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ одалТивания. Если ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π²Π»Π°Π΄Π΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° пСрСмСнная, Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ кончаСтся срок Π΅Π΅ ΠΆΠΈΠ·Π½ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ Π±Π»ΠΎΠΊΠ°, всС Π½Π° Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»Π° ΠΌΠΎΠΆΠ½ΠΎ рСкурсивно ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ. Π’Π°ΠΊΠΆΠ΅ ссылки ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄Π°Π»ΠΆΠΈΠ²Π°Ρ‚ΡŒ для чтСния ΠΈΠ»ΠΈ записи. Π’ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΎΠ΄ΠΈΠ½ ΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ.

Π­Ρ‚Ρƒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ кускС ΠΊΠΎΠ΄Π°. Из ΠΌΠ΅Ρ‚ΠΎΠ΄Π° main() вызываСтся test(), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ создаСтся рСкурсивная структура Π΄Π°Π½Π½Ρ‹Ρ… MyStruct, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ интСрфСйс дСструктора. Drop позволяСт Π·Π°Π΄Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ для выполнСния, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½. Π§Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π² Java, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Java, ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° drop() Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½.

Π’Ρ‹Π²ΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

Π’.Π΅. ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· test() ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±Ρ‹Π»Π° рСкурсивно ΠΎΡ‡ΠΈΡ‰Π΅Π½Π°. ΠŸΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΠ»ΡΡ ΠΎΠ± этом компилятор, вставив Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Box ΠΈ Option ΠΎΠΏΠΈΡˆΡƒ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Rust Π±Π΅Ρ€Π΅Ρ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ высокоуровнСвых языков ΠΈ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… языков программирования.

Π§Ρ‚ΠΎ Π΅Ρ‰Π΅ интСрСсного

Π”Π°Π»Π΅Π΅ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡŽ Ρ‡Π΅Ρ€Ρ‚Ρ‹ языка ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ ваТности, Π½Π° ΠΌΠΎΠΉ взгляд.

Π’ΡƒΡ‚ Rust Π²ΠΎΠΎΠ±Ρ‰Π΅ Π²ΠΏΠ΅Ρ€Π΅Π΄ΠΈ ΠΏΠ»Π°Π½Π΅Ρ‚Ρ‹ всСй. Если Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ языков ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ мноТСствСнного наслСдования, Ρ‚ΠΎ Π² Rust наслСдования Π½Π΅Ρ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅. Π’.Π΅. класс ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйсы Π² любом количСствС, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… классов. Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Java это ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π±Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ всС классы final. Π’ΠΎΠΎΠ±Ρ‰Π΅ синтаксичСскоС Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ для поддСрТания OOP Π½Π΅ Ρ‚Π°ΠΊ Π²Π΅Π»ΠΈΠΊΠΎ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, это ΠΈ ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ΠΌΡƒ.

Для объСдинСния Π΄Π°Π½Π½Ρ‹Ρ… Π΅ΡΡ‚ΡŒ структуры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ trait ΠΈ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π”ΠΎ абстрактных классов ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΡ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‚, Ρ‚.ΠΊ. Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ΠΉ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΆΠ°Π»ΡƒΡŽΡ‚ΡΡ Π½Π° это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. Бинтаксис выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄ΡƒΠΌΠ°ΡŽ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Ρ‚ΡƒΡ‚ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹:

Из особСнностСй Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ» Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π•Ρ‰Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ бСзопасности

Как я ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ» Rust удСляСт большоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ надСТности ΠΊΠΎΠ΄Π° ΠΈ пытаСтся ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ошибок Π½Π° этапС компиляции. Для этого Π±Ρ‹Π»Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ ссылки пустыми. Π­Ρ‚ΠΎ ΠΌΠ½Π΅ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠ»ΠΎ nullable Ρ‚ΠΈΠΏΡ‹ ΠΈΠ· Kotlin. Для создания пустых ссылок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Option. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² Kotlin, ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, компилятор Π±ΡƒΠ΄Π΅Ρ‚ Π±ΠΈΡ‚ΡŒ ΠΏΠΎ Ρ€ΡƒΠΊΠ°ΠΌ, заставляя Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΆΠ΅ Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ошибкС. Но этого ΡƒΠΆ Ρ‚ΠΎΡ‡Π½ΠΎ нСльзя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ случайно ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Java.

МнС Π΅Ρ‰Π΅ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ поля классов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡΠ²Π»ΡΡŽΡ‚ΡΡ нСизмСняСмыми. ΠžΠΏΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Ρ‚ Kotlin. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, это явно Π½Π°Π΄ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом mut. Π― Π΄ΡƒΠΌΠ°ΡŽ, стрСмлСниС ΠΊ нСизмСняСмости сильно ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. Π₯отя Option ΠΏΠΎΡ‡Π΅ΠΌΡƒ-Ρ‚ΠΎ являСтся измСняСмым, этого я Π½Π΅ понял, Π²ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ

Π’ Rust Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ enum. Волько ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ числа Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ½ΠΈ Π΅Ρ‰Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ это Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ срСднСС ΠΌΠ΅ΠΆΠ΄Ρƒ пСрСчислСниями ΠΈ классами Π² Java. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ enum Option Π² ΠΌΠΎΠ΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ:

Для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ конструкция:

А Ρ‚Π°ΠΊΠΆΠ΅

Π― Π½Π΅ ΡΡ‚Π°Π²Π»ΡŽ сСбС Ρ†Π΅Π»ΡŒΡŽ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ Rust, Π° просто Ρ…ΠΎΡ‡Ρƒ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ особСнности. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΎΠΏΠΈΡˆΡƒ, Ρ‡Ρ‚ΠΎ Π΅Ρ‰Π΅ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ, Π½ΠΎ, Π½Π° ΠΌΠΎΠΉ взгляд, Π½Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ:

Π›ΠΎΠΆΠΊΠΈ дСгтя

Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹.

Killer problem

Π“Π»Π°Π²Π½Ρ‹ΠΉ нСдостаток происходит ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠΉ особСнности. Π—Π° всС приходится ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ. Π’ Rust ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ c измСняСмыми Π³Ρ€Π°Ρ„ΠΎΠ²Ρ‹ΠΌΠΈ структурами Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚.ΠΊ. Π½Π° любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ссылки. Для ΠΎΠ±Ρ…ΠΎΠ΄Π° этого ограничСния Π΅ΡΡ‚ΡŒ Π±ΡƒΠΊΠ΅Ρ‚ встроСнных классов:

И это Π½Π΅ΠΏΠΎΠ»Π½Ρ‹ΠΉ список. Для ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΡ€ΠΎΠ±Ρ‹ Rust, я ΠΎΠΏΡ€ΠΎΠΌΠ΅Ρ‚Ρ‡ΠΈΠ²ΠΎ Ρ€Π΅ΡˆΠΈΠ» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ односвязный список с Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС ссылка Π½Π° ΡƒΠ·Π΅Π» ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Option >:

Выглядит Ρ‚Π°ΠΊ сСбС, ΠΈΡ‚ΠΎΠ³ΠΎ Ρ‚Ρ€ΠΈ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΎΠ΄Π½ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Код для простого добавлСния элСмСнта Π² ΠΊΠΎΠ½Π΅Ρ† списка получился ΠΎΡ‡Π΅Π½ΡŒ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΉ, ΠΈ Π² Π½Π΅ΠΌ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ клонирования ΠΈ одалТивания:

На Kotlin Ρ‚ΠΎ ΠΆΠ΅ самоС выглядит Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅:

Как выяснил ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ структуры Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΌΠΈ для Rust, Π° ΠΌΠΎΠΉ ΠΊΠΎΠ΄ совсСм Π½Π΅ΠΈΠ΄ΠΈΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅Π½. Π›ΡŽΠ΄ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΈΡˆΡƒΡ‚ Ρ†Π΅Π»Ρ‹Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

Π’ΡƒΡ‚ Rust ΠΆΠ΅Ρ€Ρ‚Π²ΡƒΠ΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π΄ΠΈ бСзопасности. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ упраТнСния Π΅Ρ‰Π΅ ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ Π·Π°Ρ†ΠΈΠΊΠ»Π΅Π½Π½Ρ‹ΠΌ ссылкам, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависнут Π² памяти, Ρ‚.ΠΊ. Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ garbage collector ΠΈΡ… Π½Π΅ ΡƒΠ±Π΅Ρ€Π΅Ρ‚. Π Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° Rust я Π½Π΅ писал, поэтому ΠΌΠ½Π΅ слоТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ насколько Ρ‚Π°ΠΊΠΈΠ΅ трудности ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ Тизнь. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ интСрСсно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ².

Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ изучСния

Π”ΠΎΠ»Π³ΠΈΠΉ процСсс изучСния Rust Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ слСдуСт ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°. ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ Ρ…ΠΎΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ придСтся ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° освоСниС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ владСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ‚.ΠΊ. ΠΎΠ½Π° ΠΏΡ€ΠΎΠ½ΠΈΠ·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строчку. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ список Ρƒ мСня занял ΠΏΠ°Ρ€Ρƒ Π²Π΅Ρ‡Π΅Ρ€ΠΎΠ², Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π½Π° Kotlin Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π·Π° 10 ΠΌΠΈΠ½ΡƒΡ‚, ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ это Π½Π΅ ΠΌΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ язык. Помимо этого ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ написанию Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΈΠ»ΠΈ структур Π΄Π°Π½Π½Ρ‹Ρ… Π² Rust Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΡΡ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚. Π’.Π΅. ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π½Π° Π½Π΅Π³ΠΎ понадобится Π±ΠΎΠ»Π΅Π΅ глубокая пСрСстройка ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ, просто ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ синтаксис Π±ΡƒΠ΄Π΅Ρ‚ нСдостаточно. Π­Ρ‚ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ JavaScript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всС ΠΏΡ€ΠΎΠ³Π»ΠΎΡ‚ΠΈΡ‚ ΠΈ всС стСрпит. Π”ΡƒΠΌΠ°ΡŽ, Rust Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ станСт Ρ‚Π΅ΠΌ языком, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΡ‡Π°Ρ‚ Π΄Π΅Ρ‚Π΅ΠΉ Π² школС программирования. Π”Π°ΠΆΠ΅ Ρƒ Π‘/Π‘++ Π² этом смыслС большС шансов.

Π’ ΠΈΡ‚ΠΎΠ³Π΅

МнС показалась ΠΎΡ‡Π΅Π½ΡŒ интСрСсной идСя управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π½Π° этапС компиляции. Π’ Π‘/Π‘++ Ρƒ мСня ΠΎΠΏΡ‹Ρ‚Π° Π½Π΅Ρ‚, поэтому Π½Π΅ Π±ΡƒΠ΄Ρƒ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ со smart pointer. Бинтаксис Π² Ρ†Π΅Π»ΠΎΠΌ приятный ΠΈ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ лишнСго. Π― ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠΊΠΎΠ²Π°Π» Rust Π·Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ²Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ, ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°ΡŽ, Ρ‡Ρ‚ΠΎ это ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ всСх языков программирования Π±Π΅Π· GC. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, сравнСния с Kotlin Π±Ρ‹Π»ΠΎ ΠΈ Π½Π΅ совсСм чСстным.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я совсСм Π½Π΅ коснулся многопоточности, Π΄ΡƒΠΌΠ°ΡŽ это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ большая Ρ‚Π΅ΠΌΠ°. Π•Ρ‰Π΅ Π΅ΡΡ‚ΡŒ ΠΏΠ»Π°Π½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ структуру Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ послоТнСС списка, Ссли Π΅ΡΡ‚ΡŒ ΠΈΠ΄Π΅ΠΈ, ΠΏΡ€ΠΎΡˆΡƒ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π² коммСнтариях. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ прилоТСния ΠΊΠ°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΏΠΈΡˆΡƒΡ‚ Π½Π° Rust.

ΠŸΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ

Если вас заинтСрСсовал Rust, Ρ‚ΠΎ Π²ΠΎΡ‚ нСсколько ссылок:

UPD: ВсСм спасибо Π·Π° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ. Π£Π·Π½Π°Π» ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ³ΠΎ для сСбя. Π˜ΡΠΏΡ€Π°Π²ΠΈΠ» нСточности ΠΈ ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ, Π΄ΠΎΠ±Π°Π²ΠΈΠ» ссылок. Π”ΡƒΠΌΠ°ΡŽ, Ρ‚Π°ΠΊΠΈΠ΅ обсуТдСния сильно ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ Π½ΠΎΠ²Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Rust β€” ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠΉ ΠΈ Π΄Π΅Ρ€Π·ΠΊΠΈΠΉ язык программирования

Говорят, Ρ‡Ρ‚ΠΎ это ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ C++ ΠΈ Haskell.

ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия языка Rust появилась Π² 2010 Π³ΠΎΠ΄Ρƒ, ΠΈ ΠΎΠ½ сразу занял Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ строчку Π² спискС Π»ΡŽΠ±ΠΈΠΌΡ‹Ρ… языков Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Π½Π° StackOverflow. Π“ΠΎΠ΄ спустя Rust Π²ΠΎΠ·Π³Π»Π°Π²ΠΈΠ» этот список ΠΈ дСрТался Ρ‚Π°ΠΌ нСсколько Π»Π΅Ρ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΏΠΎΡ‡Π΅ΠΌΡƒ этот язык стал Ρ‚Π°ΠΊΠΈΠΌ популярным, Π² Ρ‡Ρ‘ΠΌ Π΅Π³ΠΎ особСнности ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΎΠΊΡ€ΡƒΠ³ Π½Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ споров.

Π’ Ρ‡Ρ‘ΠΌ идСя языка Rust

Автору языка Π½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ всСмогущСство языка C++ ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ Haskell. Он поставил ΠΏΠ΅Ρ€Π΅Π΄ собой Π·Π°Π΄Π°Ρ‡Ρƒ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΎΠ±Π° этих ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² ΠΎΠ΄Π½ΠΎΠΌ языкС, ΠΈ Π·Π° нСсколько Π»Π΅Ρ‚ ΠΎΠ½ собрал ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ языка Rust.

Rust позиционируСтся ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ систСмный ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык высокого уровня. БСйчас поясним, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚.

👉 ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ готовая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° β€” это ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π° любом ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ с Π½ΡƒΠΆΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой. Для запуска Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ срСду Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ компилятор, достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ скомпилированная вСрсия ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠ»Π° ΠΊ Π²Π°ΡˆΠ΅ΠΌΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ.

👉 БистСмный β€” это ΠΊΠΎΠ³Π΄Π° Π½Π° языкС ΠΏΠΈΡˆΡƒΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы Π² Ρ†Π΅Π»ΠΎΠΌ. Π­Ρ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы, Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΈ слуТСбныС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° Rust β€” ΠΎΡ‚ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π΄ΠΎ систСмы управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. БистСмный язык позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ быстрыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ всС возмоТности ΠΆΠ΅Π»Π΅Π·Π°.

👉 ΠœΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² языкС ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‚ΡΡ нСсколько ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ программирования. Π’ случаС Rust это ООП, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. ΠŸΡ€ΠΈΡ‡Ρ‘ΠΌ, ООП Π² Rust ΠΏΡ€ΠΈΡˆΠ»ΠΎ ΠΈΠ· C++, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ β€” ΠΈΠ· Haskell. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ сам Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ стилС ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Ρ… элСмСнтах ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Бинтаксис ΠΈ ΠΊΠΎΠ΄

Π—Π° основу синтаксиса Π² Rust взят синтаксис ΠΈΠ· C ΠΈ C++.НапримСр, классичСский Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!Β» Π½Π° Rust выглядит Ρ‚Π°ΠΊ:

fn main() <
println!(«Hello, world!»);
>

Если Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ синтаксисом, Ρ‚ΠΎ смоТСтС быстро Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈ Π½Π° Rust. Π”Ρ€ΡƒΠ³ΠΎΠ΅ Π΄Π΅Π»ΠΎ, Ρ‡Ρ‚ΠΎ Π² Rust Π΅ΡΡ‚ΡŒ свои особСнности:

let x = if new_game() < 4 >
else if reload() < 3 >
else

ПослСднСС Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΉ записи пСрСмСнная x Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° Ρ‡Π΅Ρ‚Ρ‹Ρ€Ρ‘ΠΌ, Ссли функция new_game() Π²Π΅Ρ€Π½Ρ‘Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true. Если этого Π½Π΅ случится, компилятор Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ reload() ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ. Если true, Ρ‚ΠΎ x ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3, Π° Ссли ΠΈ это Π½Π΅ сработаСт β€” Ρ‚ΠΎ x станСт Ρ€Π°Π²Π½Ρ‹ΠΌ 0.

Π•Ρ‰Ρ‘ Π² Rust Π΅ΡΡ‚ΡŒ сравнСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ. Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, с ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ совпало Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, выполнится Ρ‚Π° ΠΈΠ»ΠΈ иная функция:

Главная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Rust

НСсмотря Π½Π° синтаксис, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° C, Π³Π»Π°Π²Π½ΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Rust Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ взяли ΠΈΠ· Haskell, ΠΈ Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΎΠ½Π° Ρ‚Π°ΠΊ:

Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Rust ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ ΠΈ Π½Π΅ ΡƒΠΏΠ°Π»Π° Π²ΠΎ врСмя запуска, Ρ‚ΠΎ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ сами Π΅Ρ‘ Π½Π΅ остановитС.

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Rust ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹, ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Haskell. ΠŸΠΎΡ‡Ρ‚ΠΈ β€” ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ссли программист ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ «нСбСзопасный» Π±Π»ΠΎΠΊ unsafe, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Ρ‘Ρ‚ Π΅ΠΌΡƒ прямой доступ ΠΊ памяти, Ρ‚ΠΎ Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ это ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ сбоям. Но Π΄Π°ΠΆΠ΅ с Ρ‚Π°ΠΊΠΈΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Rust стараСтся ΡΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒΡΡ сам ΠΈ ΠΏΠ°Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Π΅Π·Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹Ρ… случаях.

ΠŸΠ»ΡŽΡΡ‹ ΠΈ минусы языка

Когда язык совмСщаСт Π² сСбС нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ прСимущСств ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ…:

ΠœΠΈΠ½ΡƒΡΡ‹ Π² основном связаны со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ развития языка. Π’Π°ΠΊ ΠΊΠ°ΠΊ Rust развиваСтся ΠΎΡ‡Π΅Π½ΡŒ быстро, Ρ‚ΠΎ часто Π±Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΈΠ· старой вСрсии Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Π½ΠΎΠ²ΠΎΠΉ вСрсии. Π•Ρ‰Ρ‘ ΠΊ минусам ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ:

Π§Ρ‚ΠΎ написано Π½Π° Rust

Π§Π°Ρ‰Π΅ всСго Rust ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² Ρ‚Π΅Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, Π³Π΄Π΅ Π½ΡƒΠΆΠ½Π° ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ высокой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈ ΠΎΠ±Ρ‰Π΅Π΅ быстродСйствиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Rust ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ОБ, Π²Π΅Π±-сСрвСров, систСмных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°, Π²Π΅Π±-Π΄Π²ΠΈΠΆΠΊΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ для создания ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… частСй Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π° ΠΈ бэкСнда. НапримСр, Π²ΠΎΡ‚ самыС извСстныС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π³Π΄Π΅ Rust Π±Ρ‹Π» основным языком программирования:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Rust

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust

Apr 17 Β· 12 min read

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΡƒΡŽΡ‚ Π½Π° rust

Rust β€” это пСрспСктивный язык программирования, Π½Π°Π±ΠΈΡ€Π°ΡŽΡ‰ΠΈΠΉ Ρ€Π΅ΠΊΠΎΡ€Π΄Π½ΡƒΡŽ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… систСм, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы ΠΈ компиляторы.

Π’ 2020 Π³ΠΎΠ΄Ρƒ ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ опроса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Stack Overflow самым Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΌ языком программирования ΡƒΠΆΠ΅ пятый Π³ΠΎΠ΄ подряд Π±Ρ‹Π» ΠΏΡ€ΠΈΠ·Π½Π°Π½ Rust. МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Rust скоро ΠΎΠ±Π³ΠΎΠ½ΠΈΡ‚ C ΠΈ C++ благодаря своСму срСдству ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ заимствований ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π΄Π°Π²Π½ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π° Ρ‚Π°ΠΊΠΆΠ΅ нСявная ΠΈ явная типизация.

БСгодня ΠΌΡ‹ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ Π²Π°ΠΌ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€ Π° Π±ΠΎΡ‚Ρƒ с Rust нСзависимо ΠΎΡ‚ вашСго уровня ΠΎΠΏΡ‹Ρ‚Π°. ΠœΡ‹ расскаТСм, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ Rust ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, ΠΈΠ·ΡƒΡ‡ΠΈΠΌ Π΅Π³ΠΎ основныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Π°ΡˆΡƒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Rust!

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассмотрим Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Rust?

Rust β€” это ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык программирования с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для создания ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм, компиляторов ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ-Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… срСдств. Он Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π“Ρ€Π΅ΠΉΠ΄ΠΎΠ½ΠΎΠΌ Π₯ΠΎΡ€ΠΎΠΌ Π² Mozilla Research Π² 2010 Π³ΠΎΠ΄Ρƒ.

Rust ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π΅Π½ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ бСзопасности, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π°ΠΊΡ†Π΅Π½Ρ‚ здСсь сдСлан Π½Π° бСзопасном ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ΅. Π­Ρ‚ΠΎΡ‚ язык большС всСго ΠΏΠΎΡ…ΠΎΠΆ Π½Π° C ΠΈΠ»ΠΈ C++, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ срСдство ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ заимствований для подтвСрТдСния бСзопасности ссылок.

Rust β€” это ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ язык систСмного программирования для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ встроСнного ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ Π±Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. НаиболСС распространСно ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Rust Π² Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… систСмах, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ядрах ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈΠ»ΠΈ Π² ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ….

Rust отличаСтся ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… языков ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования с ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ Π³ΠΎΠ½ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Π—Π°Ρ‡Π΅ΠΌ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ Rust?

Π―Π·Ρ‹ΠΊ программирования Rust идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ систСмного программирования ΠΈΠ·-Π·Π° систСмы выдСлСния памяти с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ владСния ΠΈ привСрТСнности ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΈ бСзопасному ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΡƒ. И хотя Π΅Π³ΠΎ всС Π΅Ρ‰Π΅ нСчасто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… компаниях, Rust остаСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· языков, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… самыС высокиС ΠΎΡ†Π΅Π½ΠΊΠΈ.

Rust ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² условиях Π½Π΅ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π³ΠΎΡΡ роста Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ систСмам ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ способСн ΡΡ‚Π°Ρ‚ΡŒ языком Π·Π°Π²Ρ‚Ρ€Π°ΡˆΠ½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ сСбя Π² Ρ€ΠΎΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Rust ΡƒΠΆΠ΅ сСйчас, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΆΠ΅Π»Π°Π΅ΠΌΡƒΡŽ Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ, Π½Π°Π΄ΠΎΠ»Π³ΠΎ обСспСчив сСбя Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ с высокой ΠΎΠΏΠ»Π°Ρ‚ΠΎΠΉ.

Β«Hello World!Β» Π½Π° Rust

Π Π°Π·Π±Π΅Ρ€Π΅ΠΌ всС части этого ΠΊΠΎΠ΄Π°.

fn β€” это сокращСниС ΠΎΡ‚ function («Ѐункция»). Π’ Rust (ΠΊΠ°ΠΊ ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования) функция ΠΊΠ°ΠΊ Π±Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚: Β«Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚Π΅ ΠΌΠ½Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π° я сдСлаю Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈ Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π΄Π°ΠΌ ΠΎΡ‚Π²Π΅Ρ‚Β».

Ѐункция main β€” это Ρ‚ΠΎ мСсто, Π³Π΄Π΅ начинаСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

Π‘ΠΊΠΎΠ±ΠΊΠΈ содСрТат список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. БСйчас ΠΎΠ½ пуст, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅Ρ‚. Но скоро ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

Π”Π°Π»ΡŒΡˆΠ΅ ΠΈΠ΄Π΅Ρ‚ строка. Π‘Ρ‚Ρ€ΠΎΠΊΠΈ состоят ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… собранных вмСстС Π±ΡƒΠΊΠ² ΠΈΠ»ΠΈ символов. Для обозначСния строки эти символы ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ( » ). Π—Π°Ρ‚Π΅ΠΌ строки ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ для макросов Ρ‚ΠΈΠΏΠ° println! ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ Π΅Ρ‰Π΅ ΠΏΠΎΠΈΠ³Ρ€Π°Π΅ΠΌ.

А это Ρ‚ΠΎΡ‡ΠΊΠ° с запятой. Она ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ† ΠΎΠ΄Π½ΠΎΠΉ инструкции, ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ° Π² ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΠΈ β€” это указания ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ дСйствиС. Π§Π°Ρ‰Π΅ всСго инструкция состоит ΠΈΠ· всСго ΠΎΠ΄Π½ΠΎΠΉ строки ΠΊΠΎΠ΄Π°. Π’ нашСм случаС ΠΎΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ макрос. Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΈΠ΄Ρ‹ инструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ скоро ΡƒΠ²ΠΈΠ΄ΠΈΠΌ.

ΠžΡΠ½ΠΎΠ²Ρ‹ синтаксиса Rust

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим основныС части ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Rust ΠΈ способы ΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ β€” это Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ использования. Π€ΠΎΡ€ΠΌΠ°Ρ‚ объявлСний ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΎΠ²:

Имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ, Ρ‚. Π΅. ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ, Ρ‡Π΅ΠΌ являСтся Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр:

Π‘ΠΎΠ²Π΅Ρ‚💡 ВсСгда Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ названия, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ со строчной Π±ΡƒΠΊΠ²Ρ‹, Π° Π½ΠΎΠ²ΠΎΠ΅ слово Π½Π°Ρ‡ΠΈΠ½Π°ΠΉΡ‚Π΅ с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ.

Π’ Rust ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ нСизмСняСмы ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚. Π΅. ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСльзя ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π·Π°Π΄Π°Π½Ρ‹.

НапримСр, Π²ΠΎΡ‚ этот ΠΊΠΎΠ΄ выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²ΠΎ врСмя компиляции:

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд Ρ‚Π°ΠΊΠΎΠ΅ свойство языка Rust каТСтся Π½Π΅ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ, Π½ΠΎ ΠΎΠ½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ измСняСмых Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π΅Π΄ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ измСняСмых Π΄Π°Π½Π½Ρ‹Ρ… часто ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ появлСнию Π±Π°Π³ΠΎΠ², Ссли ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ.

Π§Π΅ΠΌ большС Ρƒ вас становится ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Ρ‚Π΅ΠΌ Π»Π΅Π³Ρ‡Π΅ случайно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… значСния. Π’Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ошибки ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π»Π°Π΄ΠΊΠ΅ с Ρ‚Ρ€ΡƒΠ΄ΠΎΠΌ, поэтому Π² Rust ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, объявим Π΅Π΅ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Пока Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Ρ€Π°Π· (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… строками), Π»ΠΈΠ±ΠΎ Ρ†Π΅Π»Ρ‹Ρ… чисСл. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚, ΠΊΠ°ΠΊΠΎΠΉ Π²ΠΈΠ΄ ΠΈΠΌΠ΅ΡŽΡ‚ содСрТащиСся Π² Π½ΠΈΡ… значСния ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ½ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚.

Π’ этом случаС наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с объявлСниСм my_name Π±ΡƒΠ΄Π΅Ρ‚ пСрСписан ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Явная типизация позволяСт ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ошибок Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π΅Π½. Rust сдСлаСт Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ с Π΅Π³ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠΌΡƒ повСдСнию.

Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ нСдопонимания со стороны Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ для нСдопущСния синтаксичСской ошибки помСняСм объявлСниС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π½Π° Rust:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это Π½Π°Π±ΠΎΡ€Ρ‹ связанного ΠΊΠΎΠ΄Π° Π½Π° Rust, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ условным ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… частСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ для объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎΠ΅ Π½Π°ΠΌ сокращСниС ΠΎΡ‚ function («Ѐункция»). Π—Π° Π½ΠΈΠΌ Π² ΠΊΠΎΠ΄Π΅ Rust слСдуСт объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π—Π΄Π΅ΡΡŒ находится ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅.

Π­Ρ‚ΠΈ скобки Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π»ΡŽΠ±Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅ пСрСдаСтся, поэтому скобки оставлСны пустыми.

А здСсь ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ присваиваСтся имя. Π­Ρ‚ΠΎ имя выступаСт Π² Ρ€ΠΎΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΡΡ‹Π»Π°ΡŽΡ‰Π΅ΠΉΡΡ Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² любом мСстС Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ПослС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹ нСявная типизация ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Rust Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π°.

Π€ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΠΎΠ½Π΅Ρ† Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°. Код Π²Π½ΡƒΡ‚Ρ€ΠΈ скобок выполняСтся ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

А это Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ для ΠΊΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π›ΡƒΡ‡ΡˆΠ΅ Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ сюда Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½Π΅ связанного прямо с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠŸΠ΅Ρ€Π΅Π΄Π΅Π»Π°Π΅ΠΌ hello-world Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ say_hello() :

Π‘ΠΎΠ²Π΅Ρ‚💡 Π£Π²ΠΈΠ΄Π΅Π»ΠΈ () β€” Π·Π½Π°Ρ‡ΠΈΡ‚, Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π΄Π΅Π»ΠΎ с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅Ρ‚, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ скобок пустоС ΠΏΠΎΠ»Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π‘Π°ΠΌΠΈ скобки всС Ρ€Π°Π²Π½ΠΎ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ, указывая Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это функция.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ полная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°:

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ β€” это сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат описаниС Ρ‚ΠΎΠ³ΠΎ, для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ сСгмСнт ΠΊΠΎΠ΄Π°. Они ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π°Π²Ρ‚ΠΎΡ€Ρƒ ΠΊΠΎΠ΄Π° быстро Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… своих дСйствий, Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ программистам β€” быстро ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ устроСна ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ написаниС Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΏΠΎΠ»Π΅Π·Π½ΠΎ всСм.

Π‘ΠΎΠ²Π΅Ρ‚💡 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ для «закоммСнтирования» Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΊΠΎΠ΄Π°, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ трСбуСтся, Π½ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·ΠΆΠ΅ понадобится Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ.

УсловныС инструкции

УсловныС инструкции β€” это способ создания повСдСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС истинности Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡ€Π° условий. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих инструкций ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ ситуациями Π±Π΅Π· использования Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Допустим, Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для создания ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи для любого ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅Ρ‰Π΅ Π½Π΅Ρ‚ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² систСмС.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° if :

Π‘ΠΎΠ²Π΅Ρ‚💡 Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Ρ†ΠΈΠΊΠ»Π°Ρ… while провСряСмая пСрСмСнная Π±Ρ‹Π»Π° измСняСмой. Если пСрСмСнная Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ мСняСтся, Ρ‚Π°ΠΊΠΎΠΉ Ρ†ΠΈΠΊΠ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ бСсконСчно.

ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Rust: Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ ΠΈ структуры

Π’Π»Π°Π΄Π΅Π½ΠΈΠ΅

Π’Π»Π°Π΄Π΅Π½ΠΈΠ΅ β€” это Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Rust ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Ρ‚Π°ΠΊΠΎΠΉ Π΅Π³ΠΎ популярности.

Π’ΠΎ всСх языках программирования Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ систСма освобоТдСния Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Java, JavaScript ΠΈΠ»ΠΈ Python, Π΅ΡΡ‚ΡŒ сборщики мусора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ автоматичСски ΡƒΠ΄Π°Π»ΡΡŽΡ‚ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ссылки. Π’ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… языках Ρ‚ΠΈΠΏΠ° C ΠΈΠ»ΠΈ C++ ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² трСбуСтся всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Π ΡƒΡ‡Π½ΠΎΠ΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти сопряТСно с многочислСнными ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, поэтому ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Когда ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся Π½Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΎΠ½Π° расходуСтся Π²ΠΏΡƒΡΡ‚ΡƒΡŽ. А слишком Ρ€Π°Π½Π½Π΅Π΅ освобоТдСниС памяти, ΠΊΠ°ΠΊ ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ памяти Π΄Π²Π°ΠΆΠ΄Ρ‹, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС.

Rust Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ ΠΎΡ‚ всСх этих языков систСма владСния, которая управляСт ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π°Π±ΠΎΡ€Π° ΠΏΡ€Π°Π²ΠΈΠ», примСняСмых компилятором Π²ΠΎ врСмя компиляции.

Π’ΠΎΡ‚ эти ΠΏΡ€Π°Π²ΠΈΠ»Π° владСния.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, ΠΊΠ°ΠΊ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ уТиваСтся с функциями. Для ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Если эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ пСрСмСщаСтся ΠΈΠ»ΠΈ копируСтся ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Ρƒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρƒ Π½Π΅Π³ΠΎ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹

Аналогом этих структур Π² Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Java ΠΈ Python, ΡΠ²Π»ΡΡŽΡ‚ΡΡ классы.

Π’ΠΎΡ‚ синтаксис объявлСния структуры:

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ создаваСмый экзСмпляр Ρ‚ΠΈΠΏΠ° Car Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ значСния для этих ΠΏΠΎΠ»Π΅ΠΉ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ создадим экзСмпляр Car для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ автомобиля со значСниями для brand (ΠΌΠΎΠ΄Π΅Π»ΠΈ) ΠΈ year (Π³ΠΎΠ΄Π° выпуска).

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… с ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ, опрСдСляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Car с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ·ΠΆΠ΅.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит вся структура Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ:

Π’ Ρ†Π΅Π»ΠΎΠΌ структуры ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ подходят для хранСния вмСстС всСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, относящСйся ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ обращСния ΠΊ Π½Π΅ΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

БистСма сборки Rust: Cargo

Cargo β€” это систСма сборки ΠΈ диспСтчСр ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Rust. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½Ρ‹ΠΉ инструмСнт для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Rust. Π—Π΄Π΅ΡΡŒ приводится ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ (ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ зависимостями). Он автоматичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ зависимости ΠΈ собираСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Rust ΠΈΠ· исходного ΠΊΠΎΠ΄Π°.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΌΡ‹ ΠΈΠΌΠ΅Π»ΠΈ Π΄Π΅Π»ΠΎ Π΄ΠΎ сих ΠΏΠΎΡ€, достаточно просты, ΠΈ поэтому зависимости для Π½ΠΈΡ… Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹. А Π²ΠΎΡ‚ ΠΏΡ€ΠΈ создании Π±ΠΎΠ»Π΅Π΅ слоТных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π²Π°ΠΌ понадобится Cargo с возмоТностями инструмСнтов, нСдоступных Π² Ρ€Π°ΠΌΠΊΠ°Ρ… стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Cargo Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ Π½Π° GitHub, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ хранят всС части ΠΈ зависимости вмСстС.

Если ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Rust с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта, Cargo автоматичСски устанавливаСтся вмСстС с компилятором ( rustc ) ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ( rustdoc ) ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€Π° ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… срСдств Rust. Π£Π±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Cargo установлСн, ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

Для создания ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с Cargo запуститС Π² интСрфСйсС ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π§Ρ‚ΠΎΠ±Ρ‹ всС это ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π½Π°Π±Π΅Ρ€ΠΈΡ‚Π΅:

ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ для дальнСйшСго изучСния

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· этих ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² каТутся малСнькими, с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ шаг ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ освоСнию Rust! Π“ΠΎΠ΄ ΠΎΡ‚ Π³ΠΎΠ΄Π° Rust становится всС Π±ΠΎΠ»Π΅Π΅ популярным, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ сСйчас самоС врСмя ΠΎΠ±Π·Π°Π²Π΅ΡΡ‚ΠΈΡΡŒ Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ для создания Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… систСм Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠžΠ±Π·ΠΎΡ€ языка программирования Rust

Rust β€” Π½ΠΎΠ²Ρ‹ΠΉ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ язык программирования, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Mozilla. Π―Π·Ρ‹ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΈ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ, позиционируСтся ΠΊΠ°ΠΊ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π‘/Π‘++, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ само ΠΏΠΎ сСбС интСрСсно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π°ΠΆΠ΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄Π΅Π½Ρ‚ΠΎΠ² Π½Π° ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ†ΠΈΡŽ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ. МоТно Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ D Π’Π°Π»ΡŒΡ‚Π΅Ρ€Π° Π‘Ρ€Π°ΠΉΡ‚Π° ΠΈΠ»ΠΈ Go ΠΎΡ‚ Google.
Π’ Rust ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΠΈΡ†ΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ΅, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ΅ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚.Π΅. ΠΏΠΎΡ‡Ρ‚ΠΈ вСсь спСктр Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ.

Π― Π½Π΅ ΡΡ‚Π°Π²Π»ΡŽ Ρ†Π΅Π»ΡŒΡŽ пСрСвСсти Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ (ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΎΠ½Π° вСсьма скудная ΠΈ постоянно измСняСтся, Ρ‚.ΠΊ. ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π»ΠΈΠ·Π° языка Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»ΠΎ), вмСсто этого хочСтся ΠΎΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ интСрСсныС Ρ„ΠΈΡ‡ΠΈ языка. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ собрана ΠΊΠ°ΠΊ ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΈ ΠΈΠ· ΠΊΡ€Π°ΠΉΠ½Π΅ нСмногочислСнных ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠΉ языка Π½Π° просторах Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°.

ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅

Бинтаксис языка строится Π² Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ си-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ стилС (Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΡƒΠΆΠ΅ стандарт Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ). ЕстСствСнно, всСм извСстныС ошибки Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π‘/Π‘++ ΡƒΡ‡Ρ‚Π΅Π½Ρ‹.
Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Hello World выглядит Ρ‚Π°ΠΊ:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‡ΡƒΡ‚ΡŒ послоТнСС β€” функция расчСта Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°:

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² Β«Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌΒ» стилС (Ρ‚Π°ΠΊΠΎΠΉ ΡΡ‚ΠΈΠ»ΡŒ ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСимущСства ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ Β«int fac(int n)Β»). Π’ΠΈΠ΄ΠΈΠΌ автоматичСский Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ² (ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово let), отсутствиС ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок Ρƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° while (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Go). Π•Ρ‰Π΅ сразу бросаСтся Π² Π³Π»Π°Π·Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов. Π‘ΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ Rust Π΄Π΅ΠΉΡ‚ΡΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π»Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎ сдСлали всС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌΠΈ, ΠΈ, скаТу чСстно, ΠΌΠ½Π΅ это нравится.

МСлкиС, Π½ΠΎ интСрСсныС синтаксичСскиС особСнности

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Rust, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Go, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ (хотя, ΠΏΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΡŽ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ², языки Ρ€Π°Π·Π²ΠΈΠ²Π°Π»ΠΈΡΡŒ нСзависимо, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это влияниС ΠΈΡ… ΠΎΠ±Ρ‰ΠΈΡ… ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²Π΅Π½Π½ΠΈΠΊΠΎΠ² β€” Alef, Limbo ΠΈ Ρ‚.Π΄.). Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ структурная типизация? НапримСр, Ρƒ вас Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Π΅ объявлСна структура (ΠΈΠ»ΠΈ, Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Rust, «запись»)
type point = ;
Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΡƒΡ‡Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Β«pointΒ». Π—Π°Ρ‚Π΅ΠΌ, Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ структуру, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
type MySuperPoint = ;
ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ этого Ρ‚ΠΈΠΏΠ° Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ совмСстимы с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ° point.

Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ этому, номинативная типизация, принятая Π² Π‘, Π‘++,C# ΠΈ Java Ρ‚Π°ΠΊΠΈΡ… конструкций Π½Π΅ допускаСт. ΠŸΡ€ΠΈ Π½ΠΎΠΌΠΈΠ½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ каТдая структура β€” это ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ нСсовмСстимый с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π² Rust Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «записи» (record). Π’Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ β€” это Ρ‚Π΅ ΠΆΠ΅ записи, Π½ΠΎ с бСзымянными полями. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ элСмСнтов записи, Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ измСняСмыми.

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° β€” Π² Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ массивам, Π° Π² Ρ‡Π΅ΠΌ-Ρ‚ΠΎ β€” Ρ‚ΠΈΠΏΡƒ std::vector ΠΈΠ· stl. ΠŸΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ списком ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки, Π° Π½Π΅ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ ΠΊΠ°ΠΊ Π² Π‘/Π‘++

Π’Π΅ΠΊΡ‚ΠΎΡ€, Ρ‚Π΅ΠΌ Π½ΠΈ ΠΌΠ΅Π½Π΅Π΅ β€” динамичСская структура Π΄Π°Π½Π½Ρ‹Ρ…, Π² частности, Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΡŽ.

Π•ΡΡ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹. Π˜Ρ… синтаксис Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π΅Π½, Π±Π΅Π· Π½Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Β«templateΒ» ΠΈΠ· Π‘++. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

Π―Π·Ρ‹ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ‚Π΅Π³ΠΈ. Π­Ρ‚ΠΎ Π½Π΅ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ union ΠΈΠ· Π‘ΠΈ, с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ»Π΅ΠΌ β€” ΠΊΠΎΠ΄ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ‰Π΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ объСдинСниСм ΠΈ пСрСчислСниСм). Или, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚Π΅ΠΎΡ€ΠΈΠΈ β€” алгСбраичСский Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС Ρ‚Π΅Π³ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡŽ:

Π’ Π±ΠΎΠ»Π΅Π΅ слоТных случаях ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт «пСрСчислСния» β€” ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½Π°Ρ структура, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ свой «конструктор».
Π•Ρ‰Π΅ интСрСсный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” рСкурсивная структура, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ задаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° «список»:

Π’Π΅Π³ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² выраТСниях сопоставлСния с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ достаточно слоТными.

БопоставлСниС с ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ (pattern matching)

Для Π½Π°Ρ‡Π°Π»Π° ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ ΠΌΠ°Ρ‚Ρ‡ΠΈΠ½Π³ ΠΊΠ°ΠΊ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΉ switch. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово alt, послС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ Π² Ρ‚Π΅Π»Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° β€” ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Ρ‹ ΠΈ дСйствия Π² случаС совпадСния с ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°ΠΌΠΈ.

Π’ качСствС Β«ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€ΠΎΠ½ΠΎΠ²Β» ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ константы (ΠΊΠ°ΠΊ Π² Π‘ΠΈ), Π½ΠΎ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС выраТСния β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹, Ρ‚ΠΈΠΏΡ‹, символы-Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΠΈ (placeholders, ‘_’). МоТно ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ условия с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° when, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ сразу Π·Π° ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½ΠΎΠΌ. БущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° для ΠΌΠ°Ρ‚Ρ‡ΠΈΠ½Π³Π° Ρ‚ΠΈΠΏΠΎΠ². Π’Π°ΠΊΠΎΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² языкС присутствуСт ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ any, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ значСния любого Ρ‚ΠΈΠΏΠ°.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. ΠšΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Β«ΡΠΈΡˆΠ½Ρ‹Ρ…Β» ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Π² Rust ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Β«ΡƒΠΌΠ½Ρ‹Π΅Β» ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ со встроСнным подсчСтом ссылок β€” раздСляСмыС (Shared boxes) ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ (Unique boxes). Они Π² Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ shared_ptr ΠΈ unique_ptr ΠΈΠ· Π‘++. Они ΠΈΠΌΠ΅ΡŽΡ‚ свой синтаксис: @ для раздСляСмых ΠΈ

для ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ…. Для ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ вмСсто копирования сущСствуСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ опСрация β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅:

послС Ρ‚Π°ΠΊΠΎΠ³ΠΎ пСрСмСщСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ x дСинициализируСтся.

Замыкания, частичноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π‘ этого мСста начинаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’ Rust ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ поддСрТиваСтся концСпция Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка β€” Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π² качСствС своих Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

1. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово lambda ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для объявлСния Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ….

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ make_plus_function, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΡƒΡŽ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Β«xΒ» Ρ‚ΠΈΠΏΠ° int ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° Β«int->intΒ» (здСсь lambda β€” ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово). Π’ Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ описываСтся эта самая фунция. НСмного сбиваСт с Ρ‚ΠΎΠ»ΠΊΡƒ отсутствиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«returnΒ», Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, для ЀП это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π΄Π΅Π»ΠΎ.

2. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово block ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° β€” Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² качСствС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ, ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅ Π½Π° Π±Π»ΠΎΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½Π° Π²Ρ…ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ подаСтся Π±Π»ΠΎΠΊ β€” ΠΏΠΎ сути лямбда-функция Ρ‚ΠΈΠΏΠ° Β«int->intΒ», ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ‚ΠΈΠΏΠ° int (ΠΎ синтаксисС Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² Π΄Π°Π»Π΅Π΅). Π‘Π°ΠΌ Β«Π±Π»ΠΎΠΊΒ» Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ записыавСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ нСсколько Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ синтаксиса <|x| x + 1 >. Π›ΠΈΡ‡Π½ΠΎ ΠΌΠ½Π΅ большС нравятся лямбды Π² C#, символ | ΡƒΠΏΠΎΡ€Π½ΠΎ воспринимаСтся ΠΊΠ°ΠΊ Π±ΠΈΡ‚ΠΎΠ²ΠΎΠ΅ Π˜Π›Π˜ (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅, кстати, Π² Rust Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ всС старыС Π΄ΠΎΠ±Π½Ρ‹Π΅ ΡΠΈΡˆΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ).

3. ЧастичноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ β€” это созданиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° основС Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с большим количСством Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡƒΡ‚Π΅ΠΌ указания Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² этой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово bind ΠΈ символ-Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ «_»:

Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятнСС, скаТу сразу, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Π‘ΠΈ ΠΏΡƒΡ‚Π΅ΠΌ создания ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ, ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ:
const char* daynum (int i) < const char *s =<"mo", "tu", "we", "do", "fr", "sa", "su">; return s[i]; >

Но частичноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ β€” это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ, Π° Π½Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ (кстати, ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° нСясно, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ частичноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²)

Π•Ρ‰Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ функция add с двумя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ int, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ int. Π”Π°Π»Π΅Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ single_param_fn, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ int ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ int. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ bind ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° add4 ΠΈ add5, построСнныС Π½Π° основС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ add, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ частично Π·Π°Π΄Π°Π½Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

4. ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹
ЧистыС (pure) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов (Π² Ρ‚ΠΎΠΌ числС Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ чистых). Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π΄ΡΠ»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом pure.

ΠŸΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹ β€” это чистыС (pure) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏ bool. Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² систСмС typestate (см. дальшС), Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π° этапС компиляции для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… статичСских ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ.

БинтаксичСскиС макросы
ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΠ°Ρ Ρ„ΠΈΡ‡Π°, Π½ΠΎ ΠΎΡ‡Π΅Π½ΡŒ полСзная. Π’ Rust ΠΎΠ½Π° ΠΏΠΎΠΊΠ° Π½Π° стадии Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ ΡΠΈΡˆΠ½ΠΎΠΌΡƒ printf, Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π΅ΡΡ Π²ΠΎ врСмя компиляции (соотвСтствСнно, всС ошибки Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π° стадии компиляции). К соТалСнию, ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² ΠΏΠΎ синтаксичСским макросам ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΌΠ°Π»ΠΎ, Π΄Π° ΠΈ сами ΠΎΠ½ΠΈ находятся Π² стадии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ Π΅ΡΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ΄Π° Ρ‡Ρ‚ΠΎ получится Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ° макросов Nemerle.
ΠšΡΡ‚Π°Ρ‚ΠΈ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Nemerle, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ макросы синтаксичСски с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ символа # ΡΡ‡ΠΈΡ‚Π°ΡŽ ΠΎΡ‡Π΅Π½ΡŒ Π³Ρ€Π°ΠΌΠΎΡ‚Π½Ρ‹ΠΌ: макрос β€” это ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ, ΠΎΡ‡Π΅Π½ΡŒ сильно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰Π°ΡΡΡ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ я ΡΡ‡ΠΈΡ‚Π°ΡŽ Π²Π°ΠΆΠ½Ρ‹ΠΌ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ взгляда Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π³Π΄Π΅ Π² ΠΊΠΎΠ΄Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π³Π΄Π΅ β€” макросы.

Атрибуты

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ, похоТая Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ C# (ΠΈ Π΄Π°ΠΆΠ΅ со схоТим синтаксисом). Π—Π° это Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ спасибо. Как ΠΈ слСдовало ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΊ Ρ‚ΠΎΠΉ сущности, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΈ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΡŽΡ‚,

ΠŸΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ синтаксиса Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² β€” Ρ‚Π° ΠΆΠ΅ строка, Π½ΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой Π² ΠΊΠΎΠ½Ρ†Π΅, Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ контСкст. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ соотвСтствуСт блиТайшим Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌ скобкам, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉ, ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±Π»Π΅Π΅ интСрСсных частСй языка. ΠŸΡ€ΠΈ этом Π² tutorial Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ описана Π²ΠΎΠΎΠ±Ρ‰Π΅:)
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Rust состоит ΠΈΠ· Β«Π΄Π΅Ρ€Π΅Π²Π° Π·Π°Π΄Π°Ρ‡Β». КаТдая Π·Π°Π΄Π°Ρ‡Π° ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ…ΠΎΠ΄Π°, собствСнный стСк, срСдства взаимодСйствия с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ β€” ΠΊΠ°Π½Π°Π»Ρ‹ для исходящСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΡ€Ρ‚Ρ‹ для входящСй, ΠΈ Π²Π»Π°Π΄Π΅Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² динамичСской ΠΊΡƒΡ‡Π΅.
ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Π·Π°Π΄Π°Ρ‡ Rust ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Π—Π°Π΄Π°Ρ‡ΠΈ Rust «лСгковСсныС»: каТдая Π·Π°Π΄Π°Ρ‡Π° потрСбляСт мСньшС памяти Ρ‡Π΅ΠΌ процСсс ОБ, ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ осущСствляСтся быстрСС Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ процСссами ОБ (Ρ‚ΡƒΡ‚, вСроятно, ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Ρƒ всС-ΠΆΠ΅ Β«ΠΏΠΎΡ‚ΠΎΠΊΠΈΒ»).

Π—Π°Π΄Π°Ρ‡Π° состоит ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Запуск Π·Π°Π΄Π°Ρ‡ΠΈ осущСствляСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ spawn. КаТдая Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°Π½Π°Π»Ρ‹, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€Π°Ρ†ΠΈΡŽ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π·Π°Π΄Π°Ρ‡Π°ΠΌ. Канал β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ chan, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°Π½Π°Π»Π°. НапримСр, chan β€” ΠΊΠ°Π½Π°Π» для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ².
Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² ΠΊΠ°Π½Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция send, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся ΠΊΠ°Π½Π°Π», Π° Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ. ЀактичСски эта функция ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€ ΠΊΠ°Π½Π°Π»Π°.
Для ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠΎΡ€Ρ‚Ρ‹. ΠŸΠΎΡ€Ρ‚ β€” это ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ port, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ€Ρ‚Π°: port β€” ΠΏΠΎΡ€Ρ‚ для ΠΏΡ€ΠΈΠ΅ΠΌΠ° Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ².
Для чтСния ΠΈΠ· ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция recv, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся ΠΏΠΎΡ€Ρ‚, Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ β€” Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΠΎΡ€Ρ‚Π°. Π§Ρ‚Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‡Ρƒ, Ρ‚.Π΅. Ссли ΠΏΠΎΡ€Ρ‚ пуст, Π·Π°Π΄Π°Ρ‡Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² состояниС оТидания Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° другая Π·Π°Π΄Π°Ρ‡Π° Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Π½Π° связанный с ΠΏΠΎΡ€Ρ‚ΠΎΠΌ ΠΊΠ°Π½Π°Π» Π΄Π°Π½Π½Ρ‹Π΅.
БвязываниС ΠΊΠ°Π½Π°Π»ΠΎΠ² с ΠΏΠΎΡ€Ρ‚Π°ΠΌΠΈ происходит ΠΎΡ‡Π΅Π½ΡŒ просто β€” ΠΏΡƒΡ‚Π΅ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°Π½Π°Π»Π° ΠΏΠΎΡ€Ρ‚ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова chan:
let reqport = port();
let reqchan = chan(reqport);
НСсколько ΠΊΠ°Π½Π°Π»ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΠΎΡ€Ρ‚Ρƒ, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ β€” ΠΎΠ΄ΠΈΠ½ ΠΊΠ°Π½Π°Π» Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΊ нСскольким ΠΏΠΎΡ€Ρ‚Π°ΠΌ.

Typestate

ΠžΠ±Ρ‰Π΅ΠΏΡ€ΠΈΠ½ΡΡ‚ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Π½Π° русский понятия Β«typestateΒ» я Ρ‚Π°ΠΊ ΠΈ Π½Π΅ нашСл, поэтому Π±ΡƒΠ΄Ρƒ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ это «состояния Ρ‚ΠΈΠΏΠΎΠ²Β». Π‘ΡƒΡ‚ΡŒ этой Ρ„ΠΈΡ‡ΠΈ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ контроля Ρ‚ΠΈΠΏΠΎΠ², принятого Π² статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ контСкстныС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° этапС компиляции.
Π’ Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅ состояния Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°ΠΊΠΎΠΌΡ‹ всСм программистам β€” ΠΏΠΎ сообщСниям компилятора «пСрСмСнная ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π΅Π· ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈΒ». ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ опрСдСляСт мСста, Π³Π΄Π΅ пСрСмСнная, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΠΈ Ρ€Π°Π·Ρƒ Π½Π΅ Π±Ρ‹Π»ΠΎ записи, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для чтСния, ΠΈ Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅. Π’ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ эта идСя выглядит Ρ‚Π°ΠΊ: Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΅ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ состояний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ состоянии для этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ допустимыС ΠΈ нСдопустимыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. И компилятор ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ β€” допустима Π»ΠΈ конкрСтная опСрация Π½Π°Π΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Π² Ρ‚ΠΎΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ эти ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π° этапС компиляции.

НапримСр, Ссли Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° Β«Ρ„Π°ΠΉΠ»Β», Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ состояниС Β«Π·Π°ΠΊΡ€Ρ‹Ρ‚Β» ΠΈ Β«ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Β». И опСрация чтСния ΠΈΠ· Ρ„Π°ΠΉΠ»Π° нСдопустима, Ссли Ρ„Π°ΠΉΠ» Π·Π°ΠΊΡ€Ρ‹Ρ‚. Π’ соврСмСнных языках ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ функция чтСния ΠΈΠ»ΠΈ бросаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ ошибки. БистСма состояний Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠ³Π»Π° Π±Ρ‹ Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π½Π° этапС компиляции β€” ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ компилятор опрСдСляСт, Ρ‡Ρ‚ΠΎ опСрация чтСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ происходит Π΄ΠΎ любой Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи, ΠΎΠ½ ΠΌΠΎΠ³ Π±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Β«ReadΒ», допустимый Π² состоянии Β«Ρ„Π°ΠΉΠ» ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Β», вызываСтся Π΄ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Β«OpenΒ», пСрСводящСго ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² это состояниС.

Π’ Rust сущСствуСт понятиС Β«ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹Β» β€” ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏ bool. Π’Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ компилятором для Π²Ρ‹Π·ΠΎΠ²Π° Π½Π° этапС компиляции с Ρ†Π΅Π»ΡŒΡŽ статичСских ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… условий.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ (constraints) β€” это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π½Π° этапС компиляции. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово check.

ΠŸΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Β«Π½Π°Π²Π΅ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡΒ» Π½Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ‚Π°ΠΊΠΈΠΌ Π²ΠΎΡ‚ способом:

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ typestate ΠΊΡ€Π°ΠΉΠ½Π΅ ΠΌΠ°Π»ΠΎ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠΊΠ° нСпонятны, Π½ΠΎ концСпция Π² любом случаС интСрСсная.

На этом всС. Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ я всС-ΠΆΠ΅ пропустил ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ интСрСсныС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, Π½ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΈ Ρ‚Π°ΠΊ Ρ€Π°Π·Π΄ΡƒΠ»Π°ΡΡŒ. ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΆΠ΅ сСйчас ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ компилятор Rust ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΏΠΎ сборкС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС языка.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *