На Ρ‡Π΅ΠΌ написан rust язык

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 язык

Π’ ΠΌΠΎΠ΅ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎ rust я попытался Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ± истории языка, ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ ΠΏΡ€ΠΈΡˆΡ‘Π». Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±Ρ‹Π»ΠΎ сдСлано мноТСство ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠΉ. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π½Π΅Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ мноТСство. Народу Π½Π΅ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ. Но Π² опросС, Π² ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ сказали, Ρ‡Ρ‚ΠΎ Π½Π°Π΄ΠΎ Π±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ кишки компилятора. Ну Ρ‡Ρ‚ΠΎ ΠΆΠ΅, ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎΠΌ Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ Ρ€Π°Π·Π±ΠΎΡ€ исходных ΠΊΠΎΠ΄ΠΎΠ² компилятора rust. ΠœΡ‹ прослСдим ΠΏΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, начиная ΠΈΠ· исходного Ρ„Π°ΠΉΠ»Π°, прямиком ΠΊ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΡƒ.

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ

ICE (Internal compiler error), ошибка компилятора.

Π”Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΠΉ тСкст ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΌΠ΅Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. МоТно ΠΈ Π½Π΅ Π½Π° rust.

Начало

ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π»Π΅Π·Ρ‚ΡŒ нашими Ρ€ΡƒΡ‡ΠΊΠ°ΠΌΠΈ Π² сам компилятор ΠΈ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π΅Π³ΠΎ исходники. Для Π½Π°Ρ‡Π°Π»Π° Π½Π°ΠΌ понадобятся ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ инструмСнты. Π‘Ρ‚Π°Π²ΠΈΠΌ Ρ‡ΠΈΡΡ‚ΡƒΡŽ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡˆΠΈΠ½Ρƒ с Windows 10. Π˜Π΄Ρ‘ΠΌ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρ‹ ΠΈ Π»ΡŒΡ‘ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

Π‘ΠΎΡ€Ρ†Ρ‹ компилятора. Π”ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ с github. МоТно Π»ΠΈΡ‚ΡŒ просто zip, ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ.

Установщик компилятора. Π›ΡŽΠ±Π°Ρ свСТая ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ вСрсия ΠΏΠΎΠ΄ΠΎΠΉΠ΄Ρ‘Ρ‚.

Guide to Rustc Development. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ компилятора. 460 страниц. НС Ρ…ΠΈΠ»ΠΎ. БохраняСм pdf.

Ну ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π­Ρ‚ΠΎΠ³ΠΎ, для Π½Π°Ρ‡Π°Π»Π° достаточно. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΎΡ‚ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°, Ρ…Π²Π°Ρ‚Π°Π΅ΠΌ Π½ΠΎΡƒΡ‚Π±ΡƒΠΊ ΠΈ ΠΈΠ΄Ρ‘ΠΌ Π½Π° Π²Π΅Ρ€Π°Π½Π΄Ρƒ, ΡΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ. НачинаСм ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ, ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π»ΡƒΠΏΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ компиляторС, Ссли ΠΌΡ‹ Π½Π΅ скомпилируСм Ρ…ΠΎΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ. Ок, Ρ‚Π°ΠΊ ΠΈ сдСлаСм.

Ок, это Π±Ρ‹Π»ΠΎ просто. Но ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ cargo для самой компиляции. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ компилятор Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Но я ΠΆΠ΅ Π½Π° Π½Π°Π΄ΠΎ cargo издСваюсь, Ρ‚Π°ΠΊ вСдь?

ΠžΡ‚ΡΡ‚ΡƒΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

На Ρ‡Π΅ΠΌ написан rust язык. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ На Ρ‡Π΅ΠΌ написан rust язык. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ На Ρ‡Π΅ΠΌ написан rust язык. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ На Ρ‡Π΅ΠΌ написан rust язык. Π€ΠΎΡ‚ΠΎ На Ρ‡Π΅ΠΌ написан rust ΡΠ·Ρ‹ΠΊΠšΠ°ΠΊ Π½Π΅ Π½Π°Π΄ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ rust

Π§Π΅Π³ΠΎ? Π’Π°ΠΊ, сам ΠΏΠΎ сСбС компилятор всё собрал, Π½ΠΎ ругаСтся Π½Π° отсутствиС Π»ΠΈΠ½ΠΊΠ΅Ρ€Π°. ΠžΡ‚ ΠΆΠ΅ΠΆ, Π·Π°Ρ€Π°Π·Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π»ΠΈΠ½ΠΊΠ΅Ρ€ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ΅Π½ внСшний. РугаСмся Π½Π° компилятор, встаём с ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ крСсла ΠΈ ΠΈΠ΄Ρ‘ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΠ°Π»ΠΈΡ‚ΡŒ 5 Π³ΠΈΠ³ΠΎΠ² установщика Visual Studio Build Tools Π½Π΅ хочСтся Π½Π° хотспотС.

Π‘ΠΈΠ»Π΄ΠΈΠΌ всё Π΅Ρ‰Ρ‘ Ρ€Π°Π· ΠΈ смотрим.

На Ρ‡Π΅ΠΌ написан rust язык. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ На Ρ‡Π΅ΠΌ написан rust язык. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ На Ρ‡Π΅ΠΌ написан rust язык. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ На Ρ‡Π΅ΠΌ написан rust язык. Π€ΠΎΡ‚ΠΎ На Ρ‡Π΅ΠΌ написан rust языкШирина ΠΈ ΠΆΠΈΡ€ΠΈΠ½Π° Ρ„Π°ΠΉΠ»ΠΎΠ².

Ах, Ρ‚Ρ‹, рТавая Π±Π°Π½ΠΊΠ°! Какого Ρ‡Ρ‘Ρ€Ρ‚Π°?? Π― ΡƒΠΆΠ΅ ΠΊΠ°ΠΊ Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽ всСм обитатСлям Π₯Π°Π±Ρ€Π° ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚Ρ‹ прСкрасный компилятор, ΠΈ ΠΊΠ°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ‚Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅ΡˆΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΈ, Π° Ρ‚Ρ‹. 150 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ исполняСмого ΠΊΠΎΠ΄Π° ΠΈΠ·-Π·Π° ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΈΠ½ΠΈΠΈ тСкста Π½Π° экранС?

Ус Π½Π΅Π΄ΠΎΠ²ΠΎΠ»Π΅Π½. На Π½Π΅Π³ΠΎ ΠΈ Ρ‚Π°ΠΊ ΡƒΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Π³ΠΎ Π½Π°ΠΌΠΎΡ‚Π°Π½ΠΎ, ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π΅ΠΌΡƒ Π½Π°Π΄ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ с исходниками раста Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ.

Π¨Π°Π³ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ: rustc

ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ сорцы ΠΈ наслаТдаСмся. Всё выглядит ΠΎΡ‡Π΅Π½ΡŒ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ ΠΈ чисто. Π’ΡƒΡ‚, понятноС Π΄Π΅Π»ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠΌΡƒ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° куски ΠΈ ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° rust. БобствСнно говоря, сразу понятно ΠΊΡƒΠ΄Π° ΠΈΠ΄Ρ‚ΠΈ. ЗабираСмся Π² compiler/rustc/src/main.rs ΠΈ смотрим.

На Ρ‡Π΅ΠΌ написан rust язык. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ На Ρ‡Π΅ΠΌ написан rust язык. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ На Ρ‡Π΅ΠΌ написан rust язык. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ На Ρ‡Π΅ΠΌ написан rust язык. Π€ΠΎΡ‚ΠΎ На Ρ‡Π΅ΠΌ написан rust языкВсё Ρ‚ΠΎΠ»ΡŒΠΊΠΎ начинаСтся. Π”Π΅Ρ€ΠΆΠΈΡ‚Π΅ΡΡŒ.

Π₯ΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ просто тянСт jemalloc Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΈ запускаСт Π΅Ρ‰Ρ‘ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Ну Π²ΠΎΡ‚, всё. Π’Π΅ΠΏΠ΅Ρ€ΡŒ понятно ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ компилятор rust. Π”Π΅Π»ΠΎΠ²-Ρ‚ΠΎ! ΠšΡΡ‚Π°Ρ‚ΠΈ, jemalloc это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ памяти, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ для FreeBSD Π² 2005 Π³ΠΎΠ΄Ρƒ. Основной ΡƒΠΏΠΎΡ€ Π±Ρ‹Π» сдСлан Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ памяти ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с этим Π°Π»Π»ΠΎΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ. Π’ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ вСрсии ΠΎΠ½ просто замСняСт malloc. Π’ 2007 Π³ΠΎΠ΄Ρƒ Firefox Π½Π°Ρ‡Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ для сниТСния расхода памяти, Π° Π΅Ρ‰Ρ‘ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Ρƒ Π»Π΅Ρ‚ ΠΎΠ½ ΠΏΠΎΠΏΠ°Π» Π² Facebook.

Π¨Π°Π³ Π²Ρ‚ΠΎΡ€ΠΎΠΉ: rustc-driver

Π›Π°Π΄Π½ΠΎ, всё выглядит слишком ΡƒΠΆ просто. ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡΡ дальшС. rustc тянСт Π·Π° собой rustc-driver. НыряСм Ρ‚ΡƒΠ΄Π°.

Π’ΡƒΡ‚ ΠΌΡ‹ Π½Π°ΠΉΠ΄Ρ‘ΠΌ нСбольшой readme, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ расскаТСт Π½Π°ΠΌ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ компилятора Π² самом Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π΅ ΠΌΡ‹ Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘ΠΌ. Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° собираСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ запускаСт сам процСсс компиляции ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΡ€Π΅ΠΉΡ‚ΠΎΠ². ПослС изучСния исходников Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для запуска процСсса компиляции.

Π”Π°, Π² этом ΠΊΡ€Π΅ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π΅ Ρ‚Π°ΠΊ-Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ Ρ‚ΡƒΡ‚ Π½Π΅ Ρ‚Π²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, Π½Π° самом Π΄Π΅Π»Π΅ всё сводится ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² ΠΊΡ€Π΅ΠΉΡ‚Π΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ interface. Π’Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ это ΠΈ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚. interface::run_compiler ΠΈ ΠΏΠΎΠ΅Ρ…Π°Π»ΠΈ.

Π§Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π² rustc-driver? ΠœΡ‹ собрали всС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ. ΠŸΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ всС Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ нашли ΠΈΡ… мСстополоТСниС Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС. Π‘ΠΎΠ·Π΄Π°Π»ΠΈ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ слСдит Π·Π° процСссом компиляции ΠΈ запускаСт Π»ΠΈΠ½ΠΊΠ΅Ρ€ послС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ компиляции. Запустили Π»ΠΈΠ½Ρ‚Π΅Ρ€Ρ‹ (Ссли Ρ‚Π°ΠΊΠΈΠ΅ имСлись) ΠΈ ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ сам компилятор ΠΊ запуску. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ.

Π¨Π°ΠΊ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ: rustc-interface

Ага. Π’ΡƒΡ‚ ΠΌΡ‹ ΡƒΠΆΠ΅ Π±Π»ΠΈΠΆΠ΅ ΠΊ самому процСссу компиляции. ВсС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ ΠΏΠΎΠ΄ΡŠΠ΅Π΄Π΅Π½Ρ‹, Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚ΠΎΠΆΠ΅ Π·Π°ΠΌΠ΅ΠΏΠ»Π΅Π½Ρ‹. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° исходники интСрфСйса. Π˜Ρ… Ρ…ΠΎΡ‚ΡŒ ΠΈ Π½Π΅ Ρ‚Π°ΠΊ-Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ это наш Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΎΠΊΠ·Π°Π», Π³Π΄Π΅ ΠΊΡƒΡ‡Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΡ€Π΅ΠΉΡ‚ΠΎΠ² собираСтся Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ.

Π’Π°ΠΊ, осматриваСмся ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ

ΠšΡΡ‚Π°Ρ‚ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅, Π½Π΅Π΄Π°Π»Π΅ΠΊΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ настройку ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Π‘Ρ‹ΡΡ‚Ρ€Π΅Π½ΡŒΠΊΠΎ посмотрим Π½Π° наши сорцы ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ Ρƒ нас прямо Π² сорцах Π΅ΡΡ‚ΡŒ 3 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… модуля ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π§Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚? ΠŸΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ MIR Π² ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ для систСмы компиляции. ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ rustc-codegen-llvm ΠΈ смотрим Π² README:

Ок, Π½Ρƒ Ρ‚ΡƒΡ‚ всё понятно, ΠΌΡ‹ Π±Π΅Ρ€Ρ‘ΠΌ MIR ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Ρ‹Π²Π°Π΅ΠΌ Π΅Π³ΠΎ Π² LLVM IR. ПослС этого LLVM ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ. Но ΠΏΠΎΠ³ΠΎΠ΄ΠΈΡ‚Π΅, ΠΏΠΎΠΌΠΈΠΌΠΎ LLVM Π±Π΅ΠΊΠ΅Π½Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ Π΄Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ…! Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ Ρ‚ΡƒΠ΄Π°. rustc-codegen-ssa согласно Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, позволяСт Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ привязан ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌΡƒ бСкэнду (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, LLVM) ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π² дальнСйшСм ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ систСмы компиляции.

БобствСнно говоря, прямо Ρ‚Π°ΠΌ ΠΆΠ΅ Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ rustc-codegen-cranelift. Π’ΠΎ Π΅ΡΡ‚ΡŒ MIR Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‡Π΅Ρ€Π΅Π· cranelift, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΈΠ΄Π΅Π°Π»Π΅ ускорит процСсс компиляции. Ну это Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ, ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² процСссС тСстирования ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Π“Π°Π·Π΅Π»ΡŒ Π±Π΅Π· ΠΌΠΎΡ‚ΠΎΡ€Π°.

ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ смотрим, Ρ‡Ρ‚ΠΎ происходит Π²Π½ΡƒΡ‚Ρ€ΠΈ:

Ага, Π²ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΠΌΡ‹ Π±Π΅Ρ€Ρ‘ΠΌ Π±Ρ‹ΠΊΠ° Π·Π° Ρ€ΠΎΠ³Π° ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ Π½Π° части. Π”Π°Π»Π΅Π΅, создаём ΠΈ провСряСм AST

Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΈ помСняли Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ»Π΅, Ρ‚ΠΎ благодаря систСмС запросов Π²Ρ‹ смоТСтС ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠΉ пСрСкомпиляции. Π§Ρ‚ΠΎ Ссли Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ линию Π² коммСнтариях ΠΊ Ρ„Π°ΠΉΠ»Ρƒ? ΠŸΠ΅Ρ€Π΅ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π½Π΅ придётся.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° запросы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ создаёт компилятор:

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Ρƒ нас Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ получаСтся большая ΠΈ толстая структура:

И ΠΊΠ°ΠΊ Ρ€Π°Π· Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ Π΄Ρ‘Ρ€Π³Π°Ρ‚ΡŒ для выполнСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… запросов.

Π¨Π°Π³ Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ: rustc-parse ΠΈ rustc-lexer

Π”Π°Π»Π΅Π΅ ΠΏΠΎ тСксту Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ всСх этих запросов. «ΠŸΡ€ΠΎΡΡ‚ая» Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΊΡ€Π΅ΠΉΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Ρ‘ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚. НапримСр, rustc-parse. Π­Ρ‚ΠΎ ΠΊΡ€Π΅ΠΉΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ rustc-lexer. ЛСксСр Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ строки ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ… Π² ΠΎΡ‡Π΅Π½ΡŒ простыС Ρ‚ΠΎΠΊΠ΅Π½Ρ‹. Π’ΠΎΠΊΠ΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ парсСру, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ… Π² Span ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с ΠΊΠΎΠ΄ΠΎΠΌ. Основной ΠΌΠΎΠΌΠ΅Π½Ρ‚ этого Span Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту Π² Π΄Π΅Ρ€Π΅Π²Π΅ ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° информация ΠΎ Ρ‚ΠΎΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ мСстС этот элСмСнт записан Π² исходном Ρ„Π°ΠΉΠ»Π΅. Когда компилятор Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΠ±Ρ‰Π°Ρ‚ΡŒ ΠΎΠ± ошибкС, Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ эта ошибка ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π°.

Π¨Π°Π³ пятый: rustc-expand

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ парсСра ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ наш самый Π²Π΅Π»ΠΈΠΊΠΈΠΉ ΠΈ ΠΌΠΎΠ³ΡƒΡ‡ΠΈΠΉ AST.

Всё это создаётся ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ макросом astfragments! Π² \compiler\rustcexpand\src\expand.rs

AST ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для дальнСйшСй Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΈ привСдСния Π΅Π³ΠΎ Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²ΠΈΠ΄. ΠŸΡ€ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ. Но ΠΌΡ‹ ΠΏΠΎΠΊΠ° ΡƒΠ΄ΠΎΠ²ΠΎΠ»ΡŒΡΡ‚Π²ΡƒΠ΅ΠΌΡΡ Ρ‚Π°ΠΌ, Ρ‡Ρ‚ΠΎ AST ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΄ΠΎ HIR.

Π¨Π°Π³ ΡˆΠ΅ΡΡ‚ΠΎΠΉ: rustc-middle

Π­Ρ‚ΠΈΠΌ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ занимаСтся rustc-middle. Π’Π΅Ρ€Π½Π΅Π΅, Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ этим. Π—Π°Π»Π΅Π·Π°Π΅ΠΌ Π² исходники ΠΈ Π²ΠΈΠ΄ΠΈΠΌ Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ Ρƒ нас Π΅ΡΡ‚ΡŒ HIR, MIR ΠΈ Types.

Π—Π΄Π΅ΡΡŒ вСсь синтаксичСский сахар растворяСтся Π² Ρ‡Π°Π΅ ΠΈ пСрСстаёт Π±Ρ‹Ρ‚ΡŒ сахаром. Π’Π°ΠΊ моя любимая for node in data прСвращаСтся Π²

Π‘ HIR Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒβ€¦

Шаг сСдьмой: rustc_ty

ПослСдняя тянСтся Ρ‡Π΅Ρ€Π΅Π· вСсь процСсс компиляции.

Π€Π°ΠΉΠ» просто ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΉ. Нам Π½Π°Π΄ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, замыкания ΠΈ Ρ‚Ρ€Π΅ΠΉΡ‚Π°. Π‘Π°ΠΌ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ 3000 строк, Π½Π΅ считая ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ.

ΠšΡΡ‚Π°Ρ‚ΠΈ, смотрим Π² rust-master\compiler\rustc_typeck\src\check\expr.rs

ΠšΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ запускаСм:

ΠŸΠ°ΡΡ…Π°Π»ΠΊΠΈ ΠΎΠ½ΠΈ выглядят ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ.

Π’Π°ΠΊ, вычислили Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ пытаСтся Π·Π°ΠΏΠΈΡ…Π½ΡƒΡ‚ΡŒ строку Π² Int. Π₯ΠΎΡ€ΠΎΡˆΠΎ. МоТно ΠΈΠ΄Ρ‚ΠΈ дальшС.

Шаг восьмой: rustc_mir и rustc_mir_build

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш HIR ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² MIR. Π‘Π΅Ρ€Ρ‘ΠΌ Ρ€Π°Π½Π΅Π΅ созданный TyCtxt ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²

И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅ ΠΏΠΎ всСм Π½ΠΎΠ΄Π°ΠΌ. MIR это Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ гСнСрализированная вСрсия HIR. Она ΠΎΡ‡Π΅Π½ΡŒ Π±Π»ΠΈΠ·ΠΊΠ° ΠΊ Ρ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ нас LLVM для компиляции. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ этой Π³Π΅Π½Π΅Ρ€Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ написанного Π²Π°ΠΌΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ заимствований ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ.

Π¨Π°Π³ дСвятый: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° заимствования

Бамая «ΡΡ‚Ρ€Π°ΡˆΠ½Π°Ρ» функция rust это всСм извСстный borrow cheker. Π‘Π°ΠΌ ΠΎΠ½ ΠΆΠΈΠ²Ρ‘Ρ‚ Π²

Π¨Π°Π³ дСсятый: ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ

Π¨Π°ΠΊ ΠΎΠ΄ΠΈΠ½Π½Π°Π΄Ρ†Π°Ρ‚Ρ‹ΠΉ: ΠΏΡ€ΠΎΡ‰Π°ΠΉ, rust!

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ MIR ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π΅Π»Π°Ρ‚ΡŒ Π² LLVM IR. ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ. rustc-codegen-llvm создаёт LLVM-IR Π½Π° Π±Π°Π·Π΅ MIR, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ сгСнСрировали Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ этапС. Π—Π΄Π΅ΡΡŒ заканчиваСтся rust ΠΈ начинаСтся llvm. Π₯отя, ΠΌΡ‹ Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ с сорцами компилятора.

КопаСмся Ρ‡ΡƒΡ‚ΡŒ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ rustc-target Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²ΠΈΠ΄ΠΈΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ассСмблСром.

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ кодогСнСрация Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ IR Π² сам LLVM. rustc_llvm Π½Π°ΠΌ Π² ΠΏΠΎΠΌΠΎΡ‰ΡŒ.

Π’ΠΎΡ‚, собствСнно говоря, ΠΈ всё, рСбята! LLVM Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ нашСй видимости. На ΠΌΠΎΠ΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Visual Studio Build Tools Π±Π΅Ρ€ΡƒΡ‚ Π½Π° сСбя ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅Π³ΠΎΠ½ΡΡŽΡ‚ LLVMIR Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊ.

Он парсится ΠΈΠ· тСкста Π² AST.

AST обрабатываСтся ΠΈ оптимизируСтся Π² HIR

HIR обрабатываСтся ΠΈ оптимизируСтся Π² MIR.

MIR Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ заимствования ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ пСрСгоняСтся Π² LLVMIR.

LLVMIR компилируСтся Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅.

ΠŸΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ€ΡƒΡ‡ΠΊΠ°ΠΌΠΈ

Ну Ρ‡Ρ‚ΠΎ ΠΆΠ΅, напослСдок ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΡΡ‚Π΅Π½ΡŒΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΊΡƒ, Ρ‚ΠΈΠΏΠ° этого:

И Π½Π°Ρ‡Π°Ρ‚ΡŒ Π΅Ρ‘ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ показывая всС внутрСнности. Для Π½Π°Ρ‡Π°Π»Π° Π΅ΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ опция компилятора, которая Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° любой вСрсии:

Π—Π½Π°Ρ‡ΠΈΡ‚, запуская ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΌΠΈΡ€ΠΈΠ°Π΄Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сгСнСрированный ассСмблСровский ΠΊΠΎΠ΄, Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ ΠΈ IR для LLVM, ΠΈ Π΄Π°ΠΆΠ΅ Ρ‡Π΅Π»Π²ΠΎΠ΅ΠΊΠΎ-Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ MIR.

А Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ nightly компилятор, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ

И ΠΏΠΎΠ»ΡŽΠ±ΠΎΠ²Π°Ρ‚ΡŒΡΡ вашим HIR, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ

Даст Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ выглядит AST.

НапослСдок

Ну Ρ‡Ρ‚ΠΎ ΠΆΠ΅, ΠΌΡ‹ Π·Π°Π»Π΅Π·Π»ΠΈ Π² Π΄Π΅Π±Ρ€ΠΈ компилятора. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ происходит ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ запускаСтС Π±ΠΈΠ»Π΄ Π½Π° своСй машинС. Π― ΠΏΠΎΠΊΠ°Π·Π°Π» Π²Π°ΠΌ rust. Но Π½Π΅ Π±ΠΎΠΉΡ‚Π΅ΡΡŒ, ваш Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ язык, скорСС всСго, Π½ΠΈΡ‡ΡƒΡ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ слоТСн. ΠŸΡ€ΠΎΡ‰Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ассСмблСр для 386 ΠΏΠΎΠ΄ досом. И Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, Ссли Π²Ρ‹ запускаСтС C#, Java, Javascript, Golang ΠΈΠ»ΠΈ haskell. ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎΠ΅, хотя ΠΈ совсСм ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ.

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ? Ну ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

ΠŸΠΎΡΡ‚ΡΠΊΡ€ΠΈΠΏΡ‚ΡƒΠΌ

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

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° 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 становится всС Π±ΠΎΠ»Π΅Π΅ популярным, Π° это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ сСйчас самоС врСмя ΠΎΠ±Π·Π°Π²Π΅ΡΡ‚ΠΈΡΡŒ Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ для создания Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… систСм Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ.

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

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

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