Rust язык программирования для Ρ‡Π΅Π³ΠΎ

ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ история Rust: ΠΎΡ‚ Ρ…ΠΎΠ±Π±ΠΈ Π΄ΠΎ самого популярного ЯП ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ StackOverflow

Rust β€” это язык систСмного программирования, создатСли ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡƒΠ΄Π΅Π»ΠΈΠ»ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‚Ρ€Π΅ΠΌ Π²Π΅Ρ‰Π°ΠΌ: ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌΡƒ, скорости ΠΈ бСзопасности. И хотя Rust считаСтся ΠΌΠΎΠ»ΠΎΠ΄Ρ‹ΠΌ языком программирования β€” Π΅Π³ΠΎ пСрвая ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ вСрсия Π²Ρ‹ΡˆΠ»Π° Π² 2015 Π³ΠΎΠ΄Ρƒ β€” ΠΎΠ½ разрабатываСтся ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ дСсяти Π»Π΅Ρ‚.

БСгодня ΠΌΡ‹ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ΅ ΠΈ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ языка Rust, ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ измСнились Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ возмоТности Π·Π° врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ привСсти ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ внСдрСния этого ЯП Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

Π›ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ (2006–2010)

ВСхнология ΠΈΠ· ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ, которая ΠΏΡ€ΠΈΠ·Π²Π°Π½Π° спасти Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ ΠΎΡ‚ самого сСбя

β€” Грэйдон Π₯ΠΎΡ€ (Graydon Hoare), Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Rust

Π­Ρ‚ΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· Ρ†ΠΈΡ‚Π°Ρ‚ Грэйдона Π₯ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ·Π²ΡƒΡ‡ΠΈΠ» Π‘Ρ‚ΠΈΠ² Клабник (Steve Klabnik) ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Rust Π²ΠΎ врСмя своСй ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ ACM Π² 2016 Π³ΠΎΠ΄Ρƒ (слайды ΠΊ ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ ссылкС, Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ слайдами, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ стрСлки Π½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅). Π­Ρ‚ΠΈ слова Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Rust β€” Π½Π΅ Ρ€Π΅Π²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ язык, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΏΠ΅Ρ€Π΅Π΄ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Он просто Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя мноТСство Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠ· «старых» языков (Π² Ρ‚ΠΎΠΌ числС C++), ΠΏΠΎΠ²Ρ‹ΡˆΠ°Ρ ΠΈΡ… Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ.

Π—Π°Π½ΠΈΠΌΠ°ΡΡΡŒ языком, Грэйдон установил ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°. Он ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π», Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ΄Π΅Π»ΡΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ сСмантикС языка, Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ синтаксисом β€” это послСднСС Π΄Π΅Π»ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Ρ€Π°Π½Π½Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Rust ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова Π±Ρ‹Π»ΠΈ Π½Π΅ Π΄Π»ΠΈΠ½Π½Π΅Π΅ пяти символов β€” язык Π±Ρ‹Π» Β«ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌΒ» ΠΈ использовал Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠ°ΠΊ log, ret ΠΈ fn.

НапримСр, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° Rust, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ²ΠΈΠ΄Π΅Π» свСт, выглядСл Ρ‚Π°ΠΊ:

Как ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π‘Ρ‚ΠΈΠ² Клабник, со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ снято: Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов Β«ΡƒΠ΄Π»ΠΈΠ½ΠΈΠ»ΠΈΒ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ret прСвратился Π² return, Π° Ρ‡Π°ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ совсСм. Для сравнСния, Π² соврСмСнной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ языка Π²Ρ‹Π²ΠΎΠ΄ строки Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!Β» выглядит Ρ‚Π°ΠΊ:

Π’Π°ΠΊΠΆΠ΅ Π·Π° врСмя ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΈ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов языка Π±Ρ‹Π»Π° ΡƒΠ±Ρ€Π°Π½Π°. Когда Π½Π°Π΄ языком Ρ€Π°Π±ΠΎΡ‚Π°Π» Грэйдон, Rust Π±Ρ‹Π» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΈ использовал ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ obj для описания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². БСйчас ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠ΅ ООП языком Π½Π΅ поддСрТиваСтся, Π½ΠΎ Rust Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΅Π³ΠΎ понятия с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ абстракций.

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

Π‘Π°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Π΄ Rust Грэйдон Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½Π° протяТСнии Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π»Π΅Ρ‚. Π—Π° это врСмя Π΅ΠΌΡƒ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²ΠΎΠΏΠ»ΠΎΡ‚ΠΈΡ‚ΡŒ Π² Тизнь ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ 90% Π·Π°Π΄ΡƒΠΌΠ°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠΌΠ΅Π»Π° довольно Π³Ρ€ΡƒΠ±ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ). Π‘Ρ€Π΅Π΄Π° для выполнСния ΠΊΠΎΠ΄Π° Π±Ρ‹Π»Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° Π½Π° 70%. ВсСго Π·Π° это врСмя Π₯ΠΎΡ€ написал 38 тыс. строк ΠΊΠΎΠ΄Π° для компилятора Π½Π° OCaml.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ Mozilla (2010–2012)

Π― Π½Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Ρƒ языка Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π³Π»Π°Π²Π½Ρ‹Π΅ особСнности.

Он Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° понятных ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Β«Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚Β» Π² ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ

β€” Грэйдон Π₯ΠΎΡ€ (Graydon Hoare), Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Rust

По ΠΏΡ€ΠΎΡˆΠ΅ΡΡ‚Π²ΠΈΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π»Π΅Ρ‚, Грэйдон Ρ€Π΅ΡˆΠΈΠ» ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ свой ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρƒ Π² Mozilla. Π’ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ проявили интСрСс ΠΊ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ искали инструмСнт для пСрСстройки стСка Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π½Π° Π±ΠΎΠ»Π΅Π΅ простых тСхнологиях, Ρ‡Π΅ΠΌ C++. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ создали ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ (Π²ΠΎ Π³Π»Π°Π²Π΅ с Грэйдоном) для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ Rust, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ стал основой Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π½ΠΎΠ³ΠΎ Π΄Π²ΠΈΠΆΠΊΠ° Servo.

Π’ΠΎΠ³Π΄Π° Π΄Π²ΠΈΠΆΠΎΠΊ Mozilla Π½Π΅ ΠΌΠΎΠ³ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡΠ΄Π΅Ρ€Π½Ρ‹ΠΌΠΈ систСмами, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π» ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ схСмы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°. НапримСр, ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ Π±Ρ‹Π»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ формирования содСрТимого ΠΎΠΊΠ½Π° ΠΈ запуска JavaScript. Rust ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° Π½Π° ΠΌΠΈΠ½ΠΈ-Π·Π°Π΄Π°Ρ‡ΠΈ, выполняСмыС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ ΠΈ экономящиС рСсурсы Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ процСссора.

ΠšΡ€ΠΎΠΌΠ΅ ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π° счСт распараллСливания ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Rust ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. На Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Firefox Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° C++ ΠΈ содСрТал 4,5 ΠΌΠ»Π½ строк ΠΊΠΎΠ΄Π°. C++ β€” это Β«Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉΒ» язык программирования, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ внимания ΠΊ дСталям, поэтому ошибки программистов ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ возникновСнию ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… уязвимостСй. Π—Π°Π΄Π°Ρ‡Π΅ΠΉ Rust стало сниТСниС влияния чСловСчСского Ρ„Π°ΠΊΡ‚ΠΎΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ компилятора.

Π’ 2010 Π³ΠΎΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ языка смСнили ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π΄ΠΎ этого компилятор OCaml Π½Π° компилятор, написанный Π½Π° Rust. Π’ 2011 Π³ΠΎΠ΄Ρƒ Грэйдон ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» сообщСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компилятор сумСл ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Β«ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒΒ» сам сСбя, Π° Π² 2012 ΠΊΠΎΠΌΠ°Π½Π΄Π° Rust объявила ΠΎ Ρ€Π΅Π»ΠΈΠ·Π΅ Π°Π»ΡŒΡ„Π°-вСрсии компилятора β€” Π΅Π³ΠΎ докумСнтация Π±Ρ‹Π»Π° Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ, Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ создания Π±ΠΈΠ»Π΄Π° оказалась Π΄Π°Π»Π΅ΠΊΠ° ΠΎΡ‚ идСальной, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π» Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ языка ΠΈ кросс-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ.

Π“ΠΎΠ΄Ρ‹ typesystem (2012–2014)

Наша цСлСвая аудитория β€” Β«Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ C++Β»

Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Грэйдон ΠΎΡ‚ΠΎΡˆΠ΅Π» ΠΎΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π°Π΄ Rust ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹. Как рассказываСт Π‘Ρ‚ΠΈΠ² Клабник, послС этого систСма управлСния стала Π±ΠΎΠ»Π΅Π΅ «распрСдСлСнной». Π‘Ρ‹Π»Π° сформирована фСдСративная структура, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π° измСнСния, вносимыС Π² Ρ€Π°Π·Π½Ρ‹Π΅ части ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΎΡ‚Π²Π΅Ρ‡Π°Π»Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ Π³Ρ€ΡƒΠΏΠΏΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

Команда ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ»Π° расти, ΠΈ Π² Π½Π΅ΠΉ стали ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ люди, Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π² слоТных систСмах Ρ‚ΠΈΠΏΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°Ρ‡Π°Π»ΠΎΡΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ typesystem, ΠΈ всС большС аспСктов языка Π²Ρ‹Π½ΠΎΡΠΈΠ»ΠΈΡΡŒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

НапримСр, Π½Π° Ρ€Π°Π½Π½ΠΈΡ… этапах Rust Π±Ρ‹Π» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ «сборщик мусора» (GC β€” Garbage Collector), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Грэйдон Π²Π½Π΅Π΄Ρ€ΠΈΠ» для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ защищСнности памяти. Однако ΠΏΠΎΡ‚ΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ надСТности с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмы Ρ‚ΠΈΠΏΠΎΠ², ΠΈ ΠΎΡ‚ GC ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈΡΡŒ.

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ сказалось Π½Π° систСмС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² Rust. Π”ΠΎ удалСния «сборщика мусора» Π² языкС Π±Ρ‹Π»ΠΎ Ρ‚Ρ€ΠΈ основных указатСля:

ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ с 2012 ΠΏΠΎ 2014 Π³ΠΎΠ΄ β€” это врСмя, ΠΊΠΎΠ³Π΄Π° сообщСство Rust Π½Π°Ρ‡Π°Π»ΠΎ ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ. Π’ Π½Π΅ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»ΠΎΡΡŒ Ρ‚Ρ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… «лагСря»: ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ C++, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ скриптовых языков ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ программисты. Π˜Ρ… экспСртиза повлияла Π½Π° язык β€” постСпСнно ΠΎΠ½ стал ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ Π² сСбС ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ программирования.

Π’ ΠΌΠ°Ρ€Ρ‚Π΅ 2014 Π³ΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π» сформирован RFC-процСсс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ использовался для прСдставлСния Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² языкС. РСшСниС ΡΡ‚Ρ€ΠΎΠΈΠ»ΠΎΡΡŒ ΠΏΠΎ ΠΎΠ±Ρ€Π°Π·Ρƒ ΠΈ подобию Python PEP, ΠΈ сСйчас Π² Π½Π΅ΠΌ сдСлано 3 тыс. ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π² RFC ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ любоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, Π΄Π°ΠΆΠ΅ вносимоС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ. По ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Rust, Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π½ΠΎΡΠΈΡ‚ΡŒ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ измСнСния, Π½Π΅ обсудив Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с сообщСством.

Π Π΅Π»ΠΈΠ· (2015)

ΠœΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ навСрняка, Ρ‡Ρ‚ΠΎ ΠΈΠ· этого получится

Π’ Π½Π°Ρ‡Π°Π»Π΅ 2015 Π³ΠΎΠ΄Π° Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° вСрсия Rust 1.0 Alpha. Π’ Π½Π΅ΠΉ стабилизировали ядро языка, Ρ€Π°Π·Π²ΠΈΠ»ΠΈ систСму макросов, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π·Π°ΠΊΡ€Π΅ΠΏΠΈΠ»ΠΈ Π·Π° цСлочислСнными Ρ‚ΠΈΠΏΠ°ΠΌΠΈ int ΠΈ uint названия isize ΠΈ usize. Π’ Π½Π°Ρ‡Π°Π»Π΅ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠ²Π°Ρ€Ρ‚Π°Π»Π° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π³ΠΎΠ΄Π° Rust 1.0 ΠΏΠ΅Ρ€Π΅ΡˆΠ΅Π» Π² Π±Π΅Ρ‚Ρƒ β€” ΠΊ этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ crates.io ΠΈΠΌΠ΅Π» 1700 крэйтов (структурная Π΅Π΄ΠΈΠ½ΠΈΡ†Π° компиляции), Π° количСство скачиваний ΠΈΠ· рСпозитория прСвысило ΠΎΠ΄ΠΈΠ½ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½.

Π’ ΠΌΠ°Π΅ 2015 Π³ΠΎΠ΄Π° состоялся ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· β€” Rust 1.0. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°ΠΌΠ΅Π½ΠΎΠ²Π°Π»ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° всС вносимыС измСнСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Rust Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Он Π½Π°Ρ‡Π°Π» Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² Ρ‚Π°ΠΊΠΈΡ… сфСрах, ΠΊΠ°ΠΊ game dev, Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ (ΠΌΠ°ΠΉ 2016)

Если язык Ρ…ΠΎΡ€ΠΎΡˆ лишь Π² Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎΠΌ, Ρ‚ΠΎ это β€” ΠΏΡ€ΠΎΠ²Π°Π»

Π’ 2015 Π³ΠΎΠ΄Ρƒ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΊΠ° StackOverflow ΠΏΡ€ΠΎΠ²Π΅Π»Π° опрос срСди Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡ… попросили ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, с ΠΊΠ°ΠΊΠΈΠΌΠΈ языками программирования ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΈ с ΠΊΠ°ΠΊΠΈΠΌΠΈ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ. Π’ΠΎΠ³Π΄Π° Rust занял Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ строчку Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³Π°. Однако Π³ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΎΠ½ пСрСмСстился Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ΅ мСсто β€” 79% ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ изъявили ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Π½ΠΈΠΌ.

Один ΠΈΠ· Ρ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚ΠΎΠ² Hacker News Π½Π°Π·Π²Π°Π» Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ достоинствами языка ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ простоту Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΡΡ‚ΡŒ ΠΈ Π΄ΠΎΠ±Ρ€ΠΎΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Rust-сообщСства, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ всСгда Π³ΠΎΡ‚ΠΎΠ²ΠΎ ΠΏΠΎΠΌΠΎΡ‡ΡŒ с ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ особСнностСй ЯП.

ΠŸΡ€ΠΈ этом ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с этим языком ΠΈΠ·-Π·Π° Π΅Π³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² бСзопасности. Как сказал ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Reddit: Β«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Rust β€” это ΠΊΠ°ΠΊ ΠΏΠ°Ρ€ΠΊΡƒΡ€ со страховкой ΠΈ Π² Π·Π°Ρ‰ΠΈΡ‚Π΅; ΠΈΠ½ΠΎΠ³Π΄Π° это выглядит странно, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ‚Ρ€ΡŽΠΊΠΈ, Π½Π΅ боясь ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ сСбС Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒΒ».

Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Ρ€Π΅Π»ΠΈΠ·Π° ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ вСрсии Rust начался ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ использования Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½. Одной ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ Rust Π² своСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, стала Mozilla. Π§Π°ΡΡ‚ΡŒ «внутрСнностСй» Firefox 45 для Linux Π±Ρ‹Π»ΠΈ пСрСписаны Π½Π° Rust, Π° начиная с вСрсии Firefox 47, Rust-ΠΊΠΎΠ΄ присутствуСт ΠΈ Π² вСрсии для Windows. Π˜Ρ… Project Quantum, анонсированный Π² октябрС 2016 Π³ΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π² своСм составС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Servo.

Rust ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ Π² Dropbox β€” Π½Π° этом ЯП написано ядро ΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. Компания Dropbox создала своС Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Magic Pocket, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ пСрСнСсла ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ с Amazon S3. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π° языкС Go, Π½ΠΎ ΠΏΡ€ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡŒ высокоС ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти ΠΈ низкая ΠΏΡ€Π΅Π΄ΡΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ повСдСния ΠΊΠΎΠ΄Π° Π½Π° Go. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π±Ρ‹Π» частично задСйствован Rust.

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ Π³ΠΎΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Rust для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² JavaScript Π½Π°Ρ‡Π°Π»ΠΈ Π² npm. Rust ΠΏΠΎΠΌΠΎΠ³ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π² систСмС, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΉ с 350 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² дСнь. БпСциалист слуТбы ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ npm Эшли Уильямс (Ashley Williams) рассказывала ΠΎΠ± ΠΎΠΏΡ‹Ρ‚Π΅ использования Rust Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ RustFest Π² Π£ΠΊΡ€Π°ΠΈΠ½Π΅. Π’ΠΈΠ΄Π΅ΠΎ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΏΠΎ ссылкС.

Rust Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈ ΠΌΡ‹ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Bitfury. На этом языкС программирования Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ наш Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ для создания Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΎΠ² Exonum. Π’ΠΏΠ΅Ρ€Π²Ρ‹Π΅ ΠΌΡ‹ прСдставили ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ Π½Π° ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ RustFest 2017, Π³Π΄Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π΅Ρ‘ возмоТности ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ Π²ΠΎΡ€ΠΊΡˆΠΎΠΏ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ продСмонстрировали Ρ€Π°Π±ΠΎΡ‚Ρƒ сСрвиса ΠΏΠΎ созданию ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ²Π°Π»ΡŽΡ‚ (ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ²Π°Π»ΡŽΡ‚Ρƒ Π½Π° Exonum Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ здСсь).

РСализация Π½Π° Rust оказалась кстати ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ со смарт-ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Π°ΠΌΠΈ. Благодаря этому ΡƒΠΌΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ Exonum ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‡Π΅ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚Ρ‹ Ethereum (ΠΈΠ»ΠΈ Fabric). Код ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ ΠΈ Π»Π΅ΠΆΠΈΡ‚ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° GitHub.

Rust Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² сфСрС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ бСзопасности. Π’Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΊΠ°ΠΊ Tor ΡƒΠΆΠ΅ пСрСносят Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π½Π° Rust.

Π’ Ρ†Π΅Π»ΠΎΠΌ, сСгодня Rust Π² своих ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ 105 ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ. ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΈΡ… список (Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π° ΠΈ Bitfury Group) ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° страницС Friends of 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 ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΏΠΎ сборкС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС языка.

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

Rust ΠΎΡ‡Π΅Π½ΡŒ Π»ΡŽΠ±ΡΡ‚, Π½ΠΎ Ρ‡Ρ‚ΠΎ Π² Π½Ρ‘ΠΌ особСнного?

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

Rust ΠΎΡ‡Π΅Π½ΡŒ Π»ΡŽΠ±ΡΡ‚, Π½ΠΎ Ρ‡Ρ‚ΠΎ Π² Π½Ρ‘ΠΌ особСнного?

Rust оказываСтся самым Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΌ языком ΠΏΠΎ вСрсии StackOverflow ΡˆΠ΅ΡΡ‚ΡŒ Π»Π΅Ρ‚ подряд. Π’ Ρ‡Ρ‘ΠΌ Π΅Π³ΠΎ сСкрСт? ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚ β€” Rust ΠΈΠ·Π±Π°Π²Π»Π΅Π½ ΠΎΡ‚ Π±ΠΎΠ»Π΅Π²Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅ΡΡ‚ΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… соврСмСнных языках программирования.

ΠœΡ‹ рассмотрим нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Rust справляСтся с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков ΠΈ Π΅Π³ΠΎ нСдостатки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

НаслСдник динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков

Π‘ΠΏΠΎΡ€Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ программистами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ статичСской, вСроятно, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ Π΅Ρ‰Π΅ дСсятилСтия, Π½ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠΏΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ прСимущСствах статичСских Ρ‚ΠΈΠΏΠΎΠ².

Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… языков, ΠΊΠ°ΠΊ TypeScript ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… возмоТностСй, ΠΊΠ°ΠΊ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π² Python, ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ люди Ρ€Π°Π·ΠΎΡ‡Π°Ρ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ состоянии динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

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

Однако Π½Π΅ всС способы статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ эквивалСнтны. МногиС статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ языки ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ NULL.

Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ любоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ создавая Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Как Haskell ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ соврСмСнныС языки программирования, Rust Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚ΠΈΠΏΠ° optional, ΠΈ компилятор Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ case None.

Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ошибки: TypeError: Cannot read property β€˜foo’ of null Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, вмСсто этого ошибка появляСтся Π΅Ρ‰Ρ‘ Π²ΠΎ врСмя компиляции, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Ρ‘ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΅Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для привСтствия ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π·Π½Π°Π΅ΠΌ ΠΌΡ‹ Π΅Π³ΠΎ имя ΠΈΠ»ΠΈ Π½Π΅Ρ‚; Ссли Π±Ρ‹ ΠΌΡ‹ Π·Π°Π±Ρ‹Π»ΠΈ случай None Π² match ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ всСгда ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ строковым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, компилятор Π²Ρ‹Π΄Π°Π» Π±Ρ‹ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

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

Π₯отя это ΡƒΠ΄ΠΎΠ±Π½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, сниТаСтся ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ компилятора ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, Π² случаС нСсовпадСния Ρ‚ΠΈΠΏΠΎΠ². Rust учится Π½Π° ΠΎΠ±ΠΎΠΈΡ… этих стилях ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ элСмСнты Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ константы, ΠΈΠΌΠ΅Π»ΠΈ явныС Ρ‚ΠΈΠΏΡ‹, позволяя ΠΏΡ€ΠΈ этом Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ компилятор Rust ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π²Π°ΠΆΠ΄Ρ‹, 2 ΠΈ 1, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ val ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ 32-разрядныС Ρ†Π΅Π»Ρ‹Π΅ числа со Π·Π½Π°ΠΊΠΎΠΌ.

НаслСдник языков со сборщиком мусора

Одним ΠΈΠ· самых Π±ΠΎΠ»ΡŒΡˆΠΈΡ… прСимущСств использования систСмного языка программирования являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ.

Rust позволяСт Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… Π² стСкС ΠΈΠ»ΠΈ Π² ΠΊΡƒΡ‡Π΅ ΠΈ Π²ΠΎ врСмя компиляции опрСдСляСт Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ большС Π½Π΅ Π½ΡƒΠΆΠ½Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡ΠΈΡ‰Π΅Π½Π°. Π­Ρ‚ΠΎ позволяСт эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Tilde β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Rust Π² своСм ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ Skylight, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ», Ρ‡Ρ‚ΠΎ ΠΈΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ использованиС памяти с 5 Π“Π‘ Π΄ΠΎ 50 ΠœΠ‘, пСрСписав Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ HTTP Π½Π° Java Π² Rust. Вакая экономия становится особСнно Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ ΠΌΠ΅Π½ΡΡŽΡ‚ Ρ†Π΅Π½Ρ‹ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

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

Обладая прямым доступом ΠΊ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΡŽ ΠΈ памяти, Rust являСтся ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ языком для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ встраиваСмых ΠΈ bare-metal систСм. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ядра ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈΠ»ΠΈ прилоТСния для ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ². ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Rust, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² этих особСнно слоТных срСдах.

НаслСдник языков систСмного программирования

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

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… языков систСмного программирования, Rust Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈ всС своС врСмя, ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°ΡΡΡŒ Π² ΠΌΠ΅Π»ΡŒΡ‡Π°ΠΉΡˆΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ. Rust стрСмится ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС абстракций с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ β€” абстракций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‚ΠΎΠ»ΡŒ ΠΆΠ΅ эффСктивны, ΠΊΠ°ΠΊ ΠΈ эквивалСнтный рукописный ΠΊΠΎΠ΄. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, основная абстракция Rust, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ создания Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, содСрТащСго ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π΅ΡΡΡ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… чисСл:

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

ИспользованиС нСбСзопасного Rust Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΆΠ΅ Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠΉ ΠΈ остороТности, ΠΊΠ°ΠΊ ΠΈ Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ нСсСтС ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ повСдСния. Π‘Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ нСбСзопасного ΠΊΠΎΠ΄Π° β€” Π»ΡƒΡ‡ΡˆΠΈΠΉ способ свСсти ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ возмоТности сбоСв ΠΈ уязвимостСй ΠΈΠ·-Π·Π° нСбСзопасности памяти.

Π―Π·Ρ‹ΠΊΠΈ систСмного программирования ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ эффСктивно ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ‡Π½ΠΎ. Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ соврСмСнныС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ срока слуТбы, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ хотят Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡ… Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Π±Π°Π·Π° ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Π° для использования Π² ΠΎΠ±ΠΎΠ·Ρ€ΠΈΠΌΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. Rust ΠΏΡ€ΠΈΠ·Π½Π°Π΅Ρ‚ это ΠΈ принял ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дизайнСрскиС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ; это язык, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Π½Π° блиТайшиС 40 Π»Π΅Ρ‚.

ЭкосистСма Rust

Rust большС, Ρ‡Π΅ΠΌ спСцификация языка ΠΈ компилятор; ΠΌΠ½ΠΎΠ³ΠΈΠ΅ аспСкты создания ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠ³ΠΎ качСства Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ класса. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ rustup ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ нСсколько ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ инструмСнтов Rust ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ. Rust ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ с Cargo β€” инструмСнтом ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки для управлСния зависимостями, запуска тСстов, создания Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ зависимости, тСсты ΠΈ докумСнтация доступны ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈΡ… использованиС ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСно. crates.io β€” это сайт сообщСства для ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈ поиска Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Rust. Π›ΡŽΠ±Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, опубликованная Π² crates.io Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свою Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π½Π° docs.rs.

ΠšΡ€ΠΎΠΌΠ΅ встроСнных инструмСнтов, ΠΊΠΎΠΌΠΌΡŒΡŽΠ½ΠΈΡ‚ΠΈ Rust создало мноТСство срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π‘Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠΈΠ½Π³, Π°Π½Π°Π»ΠΈΠ· ΠΈ тСстированиС Π½Π° основС свойств β€” всС это Π»Π΅Π³ΠΊΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½Ρ‚Ρ‹ компилятора доступны Π² Clippy, Π° автоматичСскоС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ обСспСчиваСтся rustfmt. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° IDE Ρ…ΠΎΡ€ΠΎΡˆΠ° ΠΈ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π΄Π½Π΅ΠΌ становится всё Π±ΠΎΠ»Π΅Π΅ эффСктивной.

Rust ΠΈΠΌΠ΅Π΅Ρ‚ яркоС, гостСприимноС сообщСство. БущСствуСт нСсколько ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… способов ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠΌΠΎΡ‰ΡŒ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ‡Π°Ρ‚, Ρ„ΠΎΡ€ΡƒΠΌ, сабрСддит Rust ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Stack Overflow. Π£ Rust Π΅ΡΡ‚ΡŒ кодСкс повСдСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ ΠΏΠΎΡ‚Ρ€ΡΡΠ°ΡŽΡ‰Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², поэтому ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Π°Π»Ρ‹ ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π½Π΅ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ ΠΊ сСбС.

Π’ ΠΎΡ„Ρ„Π»Π°ΠΉΠ½Π΅ Rust ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ мноТСство ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΉ ΠΏΠΎ всСму ΠΌΠΈΡ€Ρƒ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ RustConf, Rust Belt Rust, RustFest, Rust Latam, RustCon Asia ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

НС всё Ρ‚Π°ΠΊ просто

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

ОсобСнно часто ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ ТалуСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ «борСтся с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ заимствований». Π₯отя эти ошибки ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΊΡƒΡ€Π°ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· выявлСнных мСст ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³Π»ΠΎ привСсти ΠΊ ошибкам ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ уязвимостям.

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

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, сообщСниС ΠΎΠ± ошибкС Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя наш ΠΊΠΎΠ΄ ΠΈ ΠΈΠ·ΠΎ всСх сил пытаСтся ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, указывая Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ мСста.

ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Rust ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ слоТными ΠΈΠ·-Π·Π° Π΅Π³ΠΎ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Ρ‹ ΠΈ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Rust Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ покрытия 100% условий. ΠšΡ€Π°ΠΉΠ½ΠΈΠ΅ случаи Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ описаны, Π΄Π°ΠΆΠ΅ Ссли программист Π΅Ρ‰Π΅ Π½Π΅ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ. На Ρ€Π°Π½Π½ΠΈΡ… стадиях Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ эти ΠΊΡ€Π°ΠΉΠ½ΠΈΠ΅ случаи часто ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ, Π²Ρ‹Π·Π²Π°Π² сбой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ошибок Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅ΠΌ этапС. Π­Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс, ΠΎΠ½ встрСчаСтся Π² Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Ruby, Π³Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ часто ΠΏΡ€ΠΎΠ±ΡƒΡŽΡ‚ ΠΊΠΎΠ΄ Π² REPL, Π° Π·Π°Ρ‚Π΅ΠΌ пСрСносят Π΅Π³ΠΎ Π² ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ, Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ рассматривая случаи ошибок.

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

Π₯отя Rust Ρ‚Π²Π΅Ρ€Π΄ΠΎ ΠΏΡ€ΠΈΠ²Π΅Ρ€ΠΆΠ΅Π½ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости, это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ язык Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒΡΡ функциями языка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΠ»ΠΈ Π±Ρ‹ Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π±Ρ‹ Π΅Π΅ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ. НапримСр, Π² Rust асинхронныС Ρ„ΡŒΡŽΡ‡Π΅Ρ€ΡΡ‹ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π΅Ρ… Π»Π΅Ρ‚, Π½ΠΎ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° async/await появилась Π½Π΅ Ρ‚Π°ΠΊ Π΄Π°Π²Π½ΠΎ.

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

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

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