Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ макросы Π² растС

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Π² ΠΈΠ³Ρ€Π΅ Rust: Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅?

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ ΠΈ Ρ‡ΠΈΡ‚Ρ‹ – раковая ΠΎΠΏΡƒΡ…ΠΎΠ»ΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΈΠ³Ρ€Π°Ρ…. БСзусловно, всСгда Π΅ΡΡ‚ΡŒ Ρ‚Π΅ ΠΈΠ³Ρ€ΠΎΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π΄Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прСимущСство Π½Π°Π΄ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ, Π΄Π°ΠΆΠ΅ Π½Π΅ самым чСстным способом. Π”Π°Π²Π°ΠΉΡ‚Π΅ вспомним ΠΈΠ³Ρ€Ρƒ Grand Theft Auto 5, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π΅Ρ‘ Online ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ. Π£ΠΆ Π½Π΅ знаю, ΠΊΠ°ΠΊ Π² Π½Π΅ΠΉ Π΄Π΅Π»Π° обстоят Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½ΠΎ Π³ΠΎΠ΄-Π΄Π²Π° Π½Π°Π·Π°Π΄ читСрство Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ³Ρ€Π΅ Π±Ρ‹Π»ΠΎ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΎΠ±Ρ‹Π΄Π΅Π½Π½Ρ‹ΠΌ.

Π”Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π°-Ρ‚Ρ€ΠΈ Π³ΠΎΠ΄Π° послС Ρ€Π΅Π»ΠΈΠ·Π° ΠΈΠ³Ρ€Ρ‹ Π½Π° ПК ΠΈΠ³Ρ€ΠΎΠΊΠΈ ΠΈ ΡƒΠ΄ΠΈΠ²Π»ΡΠ»ΠΈΡΡŒ Ρ‡ΠΈΡ‚Π΅Ρ€Π°ΠΌ, ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΈΡ… ΠΊΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ· сСссии, Π½ΠΎ ΡƒΠΆΠ΅ сСйчас ΠΎΡ‡Π΅Π½ΡŒ часто заходя Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΉ сСрвСр я Π²ΠΈΠΆΡƒ надпись ΠΏΠΎ Ρ‚ΠΈΠΏΡƒ Β«Π§ΠΈΡ‚Π΅Ρ€Ρ‹ Π΅ΡΡ‚ΡŒ? НакрутитС Π΄Π΅Π½Π΅Π³ ΠΏΠ»Π·Β».

Π‘ΡƒΠ΄Ρƒ чСстСн – я ΠΈ сам Π³Ρ€Π΅ΡˆΠ΅Π½. Π”Π²Π° Ρ€Π°Π·Π° я Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Π» ΠΏΡ€ΠΎΠΊΠ°Ρ‡ΠΊΡƒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ пСрсонаТа, ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π½Π°ΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Π» ΠΈΠ³Ρ€ΠΎΠ²ΡƒΡŽ Π²Π°Π»ΡŽΡ‚Ρƒ ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ софта. И Π·Π½Π°Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ? GTA 5 ΠΌΠ½Π΅ ΡƒΠΆΠ΅ Π½Π°Π΄ΠΎΠ΅Π»Π°, Π° Π²ΠΈΠ½ΠΎΠΉ этому послуТило Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ мСня ΠΈ Ρ‚Π°ΠΊ ΡƒΠΆΠ΅ Π² Π½Π΅ΠΉ всё Π΅ΡΡ‚ΡŒ, ΠΌΠ½Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ Ρ‚Π°ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ. Π—Π°ΡˆΡ‘Π» Ρ€Π°Π· Π² Π³ΠΎΠ΄, посмотрСл обновлСния, Π²Ρ‹ΡˆΠ΅Π». Π’ΠΎΡ‚ Ρ‚Π°ΠΊ сСйчас ΠΈΠ³Ρ€Π°ΡŽ я Π² ГВА.

Но вСрнёмся ΠΊ ΠΈΠ³Ρ€Π΅ Rust. Π§Π°Ρ‰Π΅ всСго Π² нашСй любимой ΠΈΠ³Ρ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ макросников. Π§ΠΈΡ‚Π΅Ρ€Ρ‹ Ρ‚ΠΎΠΆΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ, Π½ΠΎ Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ ΠΈ часто, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. А Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ макросники Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‡Π°Ρ‰Π΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΆΠ΅ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΏΡ€ΠΎ нашСго Π²Ρ€Π°Π³Π° побольшС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Π² ΠΈΠ³Ρ€Π΅ Rust

ΠœΠ°ΠΊΡ€ΠΎΡ – софт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Π·Π° вас ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ. Π’ нашСм случаС ΠΎΠ½ гасит ΠΎΡ‚Π΄Π°Ρ‡Ρƒ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ ΠΎΡ€ΡƒΠΆΠΈΠΈ.

Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ Π²Π°ΠΌ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Π³Π΄Π΅ Π½Π°ΠΉΡ‚ΠΈ макросы, Ρƒ ΠΊΠΎΠ³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚ΡŒ ΠΈΡ…, Π΄Π° ΠΈ стоит Π»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΡ… ΠΏΠΎΠΊΡƒΠΏΠ°Ρ‚ΡŒ. Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ всём своём ΠΆΠ΅Π»Π°Π½ΠΈΠΈ я Π½Π΅ ΠΌΠΎΠ³Ρƒ, Π½Π΅ имСю ΠΏΡ€Π°Π²Π° Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. ЕстСствСнно, люди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½Ρ‹ макросы Π½Π°ΠΉΠ΄ΡƒΡ‚ ΠΈΡ…, Π½ΠΎ ΠΏΡƒΡΡ‚ΡŒ ΡƒΠΆ ΠΎΠ½ΠΈ Π»ΡƒΡ‡ΡˆΠ΅ потратят своё врСмя ΠΈ дСньги, Π½Π΅ΠΆΠ΅Π»ΠΈ это Π±ΡƒΠ΄Ρƒ Π΄Π΅Π»Π°Ρ‚ΡŒ я.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° макросов Π² РастС

Π’ Ρ‡Ρ‘ΠΌ ΠΆΠ΅ прСимущСство людСй с макросами Π² Rust ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΈΠ³Ρ€ΠΎΠΊΠ°ΠΌΠΈ? Π”Π° всё элСмСнтарно – простой ΠΈΠ³Ρ€ΠΎΠΊ Π½Π΅ смоТСт Π·Π°ΠΆΠΈΠΌΠ°Ρ‚ΡŒ с ΠΏΡƒΠ»Π΅ΠΌΡ‘Ρ‚Π° Π½Π° 300 ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², попадая ΠΏΡ€ΠΈ этом Π² ΠΎΠ΄Π½Ρƒ Ρ‚ΠΎΡ‡ΠΊΡƒ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚Π°ΠΊΠΈΠ΅ люди, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ мастСра ΠΏΠΎ ΡΡ‚Ρ€Π΅Π»ΡŒΠ±Π΅ Π² ΠΎΠ΄Π½Ρƒ Ρ‚ΠΎΡ‡ΠΊΡƒ, Π½ΠΎ Π½Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΆΠ΅ ΠΈΠ³Ρ€ΠΎΠΊ Ρ‚Π°ΠΊ стрСляСт. ΠœΠ°ΠΊΡ€ΠΎΡΠ½ΠΈΠΊΠΈ ΠΆΠ΅ сразу послС установки софта ΠΌΠΎΠ³ΡƒΡ‚ Ρ…ΠΎΡ‚ΡŒ всю ΠΊΠ°Ρ€Ρ‚Ρƒ ΠΏΠΎΠ»ΠΈΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Π΄ΠΎΠΌ ΠΏΡƒΠ»ΡŒ.

Как Π±ΠΎΡ€ΠΎΡ‚ΡŒΡΡ с макросниками

Π‘ΠΎΡ€ΡŒΠ±Π° с макросниками – слоТноС Π΄Π΅Π»ΠΎ, Ссли Π²Ρ‹ простой ΠΈΠ³Ρ€ΠΎΠΊ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΏΡ€ΠΈ встрСчС макросника ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ Π½Π° Π½Π΅Π³ΠΎ ΠΆΠ°Π»ΠΎΠ±Ρƒ. Π£ нас ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ, Π³Π΄Π΅ ΠΌΡ‹ описали, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ систСма ΠΆΠ°Π»ΠΎΠ± Π² Rust.

Если Π²Ρ‹ ΠΈΠ³Ρ€Π°Π΅Ρ‚Π΅ Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ сСрвСрС, Ρ‚ΠΎ Ρ‚Π°ΠΌ, скорСС всСго, Π΅ΡΡ‚ΡŒ модСрация, которая ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Π°ΡˆΡƒ ΠΆΠ°Π»ΠΎΠ±Ρƒ, Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ° Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, ΠΈ, Ссли ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ макросы, Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΊΠ°Π·Π°Π½ ΠΏΠΎ всСй строгости Π·Π°ΠΊΠΎΠ½Π°, Ρ…ΠΎΡ‚ΡŒ ΠΈ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ. ΠšΠΎΡ€ΠΎΡ‡Π΅, забанят нСгодяя.

Но ΠΊΠ°ΠΊ ΠΆΠ΅ с Π½ΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π΅Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ? Π›ΠΈΡ‡Π½ΠΎ я дСлаю это ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ – Π½Π΅ ΠΌΠΎΠ³Ρƒ Π²Π·ΡΡ‚ΡŒ ΡΡ‚Ρ€Π΅Π»ΡŒΠ±ΠΎΠΉ, ΡΡ‹Π³Ρ€Π°ΡŽ ΠΎΡ‚ Ρ‚Π°ΠΊΡ‚ΠΈΠΊΠΈ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ быстро ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°, Π·Π°ΠΊΠΈΠ΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π΄Ρ‹ΠΌΠ°ΠΌΠΈ ΠΈ Π³Ρ€Π°Π½Π°Ρ‚Π°ΠΌΠΈ, Π±Π»Π°Π³ΠΎ Π΅ΡΡ‚ΡŒ Π³Ρ€Π°Π½Π°Ρ‚ΠΎΠΌΡ‘Ρ‚.

Если ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΊ макроснику практичСски Π²ΠΏΠ»ΠΎΡ‚Π½ΡƒΡŽ, Ρ‚ΠΎ Ρ‚ΡƒΡ‚ ΡƒΠΆΠ΅ ваши ΡˆΠ°Π½ΡΡ‹ ΡƒΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ. Π‘ΡƒΠ΄Π΅Ρ‚ достаточно Π²Ρ‹ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Ρƒ ΠΏΡƒΠ»ΡŒ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это сдСлаСт ваш ΠΎΠΏΠΏΠΎΠ½Π΅Π½Ρ‚.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Π² ΠΈΠ³Ρ€Π΅ Rust Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ

НС Ρ‚Π°ΠΊ Π΄Π°Π²Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Rust Π²Π²Π΅Π»ΠΈ сущСствСнныС ограничСния ΠΏΠΎ использованию ΠΌΡ‹ΡˆΠ΅ΠΊ Bloody, X7 ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ макросы Ρ‡Π΅Ρ€Π΅Π· встроСнноС ПО. Π’Π°ΠΊΠΈΠ΅ дСвайсы Π±Ρ‹Π»ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ Π·Π°ΠΉΡ‚ΠΈ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ сСрвСры, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² нСльзя! Π­Ρ‚ΠΎ сдСлано с Ρ†Π΅Π»ΡŒΡŽ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠ² ΠΎΡ‚ макросников. Из-Π·Π° этого появился вопрос β€” ΠΊΠ°ΠΊ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ с ΠΌΡ‹ΡˆΠΊΠΎΠΉ Π±Π»Π°Π΄ΠΈ Π² раст? Π•ΡΡ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π»Π΅Π³Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹ΡˆΠ½Ρ‹ для всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ: ΠΈ Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΊΠΎΠΉ, Π½ΠΎ макросы Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚, ΠΈ для Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π΅Π² сСрвСров (Π·Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ всС Π½Π° сСрвСр). Π£ нас Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ, Π³Π΄Π΅ ΠΌΡ‹ описали, ΠΊΠ°ΠΊ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ Π² rust с ΠΌΡ‹ΡˆΠΊΠΎΠΉ bloody. Π’Π°ΠΌ ΠΌΡ‹ рассказали ΠΏΡ€ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΌΡ‹ΡˆΠΊΠΈ bloody rust, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ΅ Π±Π»Π°Π΄ΠΈ Π² раст.

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

ПишСм API Π½Π° Rust с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… макросов

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ обоснованно ΠΏΠΎΠ±Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этим инструмСнтом, Π² основном ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π±ΠΎΡ€ синтаксичСского Π΄Π΅Ρ€Π΅Π²Π° ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² макроса Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ прСвращаСтся Π² «Π·Π°ΠΊΠ°Ρ‚ солнца Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ», Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π°Π΄Π°Ρ‡Ρƒ приходится Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π½Π° ΠΎΡ‡Π΅Π½ΡŒ Π½ΠΈΠ·ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅.

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

ΠŸΡ€Π΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ макросов: ΠΌΡ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ абстрактный RPC API Π² Π²ΠΈΠ΄Π΅ Ρ‚Ρ€Π΅ΠΉΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ сСрвСрная Ρ‡Π°ΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΈ клиСнтская; Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Π΅ макросы, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ Π½Π°ΠΌ Π±Π΅Π· ΠΊΡƒΡ‡ΠΈ шаблонного ΠΊΠΎΠ΄Π°. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ нСсколько абстрактный API, Π·Π°Π΄Π°Ρ‡Π° Π½Π° самом Π΄Π΅Π»Π΅ довольно ТизнСнная, ΠΈ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для дСмонстрации возмоТностСй ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… макросов.

Π‘Π°ΠΌ API Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΠΏΠΎ ΠΎΡ‡Π΅Π½ΡŒ простому ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ: Π΅ΡΡ‚ΡŒ 4 Ρ‚ΠΈΠΏΠ° запросов:

Π’ΠΎ всСх случаях сСрвСр Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ JSON ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ.

Π’ ΠΈΠ΄Π΅Π°Π»Π΅ хочСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅:

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

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ макрос FromUrlQuery

Как ΠΌΠ½Π΅ каТСтся, самый ΠΈΠ΄ΠΈΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ написанию ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Ρ… макросов β€” это объявлСниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅ΠΉΡ‚Π°, Π° ΠΏΠΎΡ‚ΠΎΠΌ созданиС макроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π² Π΄Π΅Ρ€Π°ΠΉΠ²-макросах Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΊΠΎΠ΄, Π½ΠΎ использованиС ΠΈΡ… для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ нСдопониманию.

Π˜Ρ‚Π°ΠΊ, приступим. Для Π½Π°Ρ‡Π°Π»Π° объявим наш Ρ‚Ρ€Π΅ΠΉΡ‚ ΠΏΠΎ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ URL query. Π”Π°Π½Π½Ρ‹ΠΉ Ρ‚Ρ€Π΅ΠΉΡ‚ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈΠ· ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ строки структуру Π΄Π°Π½Π½Ρ‹Ρ…, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ этот Ρ‚Ρ€Π΅ΠΉΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½. Π’Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊ:

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ автоматичСски Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ этот Ρ‚Ρ€Π΅ΠΉΡ‚, Π½Π°ΠΌ потрСбуСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ макрос. Π”Π°Π½Π½Ρ‹ΠΉ макрос относится ΠΊ Ρ‚ΠΈΠΏΡƒ макросов derive макросов ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΊΠΎΠ΄ Ρ€Π°Π·Π±ΠΎΡ€Π° AST ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² макроса прСвращаСтся Π² ΠΊΠΎΡˆΠΌΠ°Ρ€, выглядящий ΠΊΠ°ΠΊ ΠΊΡƒΡ‡Π° Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… условий, ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΡ€Π°ΠΉΠ½Π΅ слоТно.

Π’ darling ‘Π΅ Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… макросов, Π½ΠΎ нас сСйчас интСрСсуСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСсколько ΠΈΠ· Π½ΠΈΡ….

Π₯ΠΎΡ‡Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ этом Ссли Π±Ρ‹ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π·Π½Π°Ρ‚ΡŒ, ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ΅ это ΠΏΠΎΠ»Π΅ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сигнатуру Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ:

И всС, Π½Π° этом наш парсСр Π³ΠΎΡ‚ΠΎΠ².

МоТно ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ ΠΊ написанию ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим, ΠΊΠ°ΠΊ ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ процСсс ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ FromUrlQuery :

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

ПишСм макрос http_api

Код объявлСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½Ρ‹Ρ… макросов нСсколько отличаСтся ΠΈ выглядит Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ компилятор Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ сущСствуСт, ΠΈ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΡƒΠ³Π°Ρ‚ΡŒΡΡ Π½Π° нСизвСстноС имя.

Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ интСрфСйсного Ρ‚Ρ€Π΅ΠΉΡ‚Π°

Для Π½Π°Ρ‡Π°Π»Π° напишСм ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ‚Ρ€Π΅ΠΉΡ‚Π° с интСрфСйсом, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² ΠΎΠ±Ρ‰Π΅ΠΌ случаС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Объявим Ρ‚ΠΈΠΏΡ‹ HTTP запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΡƒΠΌΠ΅Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ:

И объявим Π½Π°Π±ΠΎΡ€ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² для ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ сигнатуры. Как я ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π» Π²Ρ‹ΡˆΠ΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ
Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° β€” с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ Π±Π΅Π· ΠΎΠ½ΠΎΠ³ΠΎ:

Π Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌ интСрфСйсный Ρ‚Ρ€Π΅ΠΉΡ‚ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Ρ€Π°Π·Π±ΠΎΡ€Ρƒ Ρ‚Ρ€Π΅ΠΉΡ‚Π° с интСрфСйсом Π² Ρ†Π΅Π»ΠΎΠΌ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ½Ρ‹ΠΉ Ρ‚Ρ€Π΅ΠΉΡ‚ всСгда состоит ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ€Π°Π·Π±ΠΎΡ€ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ описали Π²Ρ‹ΡˆΠ΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ².
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π±Π΅Π· особых слоТностСй:

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ

НапримСр, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ просто Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° GET запрос Π±ΡƒΠ΄Π΅Ρ‚ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ JSON, Ρ‚ΠΎ ΠΌΡ‹ просто пишСм Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ стилС:

Для случая с GET запросами с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΌΡ‹ лишь Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ написали Π²Ρ‹ΡˆΠ΅, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π² Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ:

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² запросов ΠΏΠΈΡˆΡƒΡ‚ΡΡ схоТим ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Π‘ΠΎΠ±ΠΈΡ€Π°Π΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ‚ΠΎΡ€Π° or собираСм всС Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

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

ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ этой
ссылкС.

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

Rust: Π·Π°Ρ‡Π΅ΠΌ Π½ΡƒΠΆΠ½Ρ‹ макросы

Как-Ρ‚ΠΎ я сказал своСму ΠΊΠΎΠ»Π»Π΅Π³Π΅, Ρ‡Ρ‚ΠΎ Π² Rust ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ макросы, Π΅ΠΌΡƒ показалось, Ρ‡Ρ‚ΠΎ это ΠΏΠ»ΠΎΡ…ΠΎ. РаньшС Ρƒ мСня Π±Ρ‹Π»Π° такая ΠΆΠ΅ рСакция, Π½ΠΎ Rust ΠΏΠΎΠΊΠ°Π·Π°Π» ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ макросы Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ»ΠΎΡ…ΠΈ.

Π“Π΄Π΅ ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… умСстно ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ? Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΏΠΎΠ΄ ΠΊΠ°Ρ‚ΠΎΠΌ.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠΏΠ°ΡΠ°Ρ‚ΡŒΡΡ макросов

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠΎΠΉ мСтапрограммирования: ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ΠΎΠΌ. ΠœΠ΅Ρ‚Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎ ΠΏΠ»ΠΎΡ…ΡƒΡŽ Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΈΡ… использовании Π½Π΅Π»Π΅Π³ΠΊΠΎ ΡƒΠ±Π΅Ρ€Π΅Ρ‡ΡŒΡΡ ΠΎΡ‚ написания ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ слуТат #define Π² C, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΠΊΠΎΠ΄ΠΎΠΌ нСпрСдсказуСмым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΈΠ»ΠΈ eval Π² JavaScript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠ΄Π°.

О макросах Π² Rust

МногиС ΠΈΡ… этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½Ρ‹ ΠΏΡ€ΠΈ использовании Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… срСдств, макросы ΠΆΠ΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΈΠ΅ срСдства:

ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ имССтся Π΄Π²Π° Ρ‚ΠΈΠΏΠ° макросов являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходят для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡:

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ макросы

Π—Π°Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ макросы, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ? НуТно ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ макросы Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с функциями β€” ΠΎΠ½ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ…, макросы, Π±Ρ‹Π»ΠΎ Π»Π΅Π³Ρ‡Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ вопрос стоит Π½Π΅ Π² Ρ‚ΠΎΠΌ, Π»ΡƒΡ‡ΡˆΠ΅ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ макросов Ρ‡Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚, Π° Π² Ρ‚ΠΎΠΌ, Π½ΡƒΠΆΠ½Π° Π»ΠΈ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ΅Π½ΡΡ‚ΡŒ исходный ΠΊΠΎΠ΄.

ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ утвСрТдСния

Π”Π°Π½Π½ΠΎΠ΅ сообщСниС содСрТит Π² сСбС условиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ провСряСм. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, макрос создаСт сообщСниС ΠΎΠ± ошибкС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ основано Π½Π° исходном ΠΊΠΎΠ΄Π΅, ΠΌΡ‹ ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ сообщСниС ΠΎΠ± ошибкС, Π½Π΅ вставляя Π΅Π³ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

Π’ΠΈΠΏΠΎ-бСзопасная Ρ€Π°Π±ΠΎΡ‚Π° с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ строк

Π›Π΅Π³ΠΊΠΎΠ΅ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

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

Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ мСтапрограммирования Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ макросы file! ΠΈ line! ; Π”Π°Π½Π½Ρ‹Π΅ макросы Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ мСсто располоТСния Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ логирования Π² исходном ΠΊΠΎΠ΄Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π’Π°ΠΊ ΠΊΠ°ΠΊ log являСтся Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ΠΎΠΌ, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ бэкСнд, ΠΏΠ°ΠΊΠ΅Ρ‚ flexi_logger.

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚:

Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, наши Π»ΠΎΠ³ΠΈ содСрТат ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° строк.

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

Если ΠΌΡ‹ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π»ΠΎΠ³ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ макросы Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ file! ΠΈ line! :

А Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²Ρ‹Π²Π΅Π» Π±Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π½Ρ‹Π΅ макросы

Rust Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ΅Π½ для ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ ΠΊΠΎΠ΄Π°. НапримСр, функция тСстирования выглядит Ρ‚Π°ΠΊ:

Запуск cargo test запустит Π΄Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. АтрибутивныС макросы ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ «Ρ€ΠΎΠ΄Π½Ρ‹ΠΌ» Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ, Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ эффСкты. На Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ сущСствуСт Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅: Π² компиляторС ΠΈΠ· Π²Π΅Ρ‚ΠΊΠΈ stable Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ макросы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ derive, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Π½ΠΎΡ‡Π½Ρ‹Ρ… сборках. Рассмотрим Ρ€Π°Π·Π½ΠΈΡ†Ρƒ Π½ΠΈΠΆΠ΅.

Рассматривая прСимущСства, Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ макросами, цСлСсообразно ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходным ΠΊΠΎΠ΄ΠΎΠΌ, с Ρ‚Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ это Π΄Π΅Π»Π°Ρ‚ΡŒ.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (boilerplate)

Derive с прСимущСствами

derive являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… возмоТностСй Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ макросами, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ°ΠΆΠ΅ΠΉ. На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ это доступно Π² Π½ΠΎΡ‡Π½Ρ‹Ρ… сборках, Ρ‡Ρ‚ΠΎ, надСюсь, Π±ΡƒΠ΄Π΅Ρ‚ стабилизировано Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π³ΠΎΠ΄Ρƒ.

НаиболСС Π²Ρ‹Π΄Π°ΡŽΡ‰ΠΈΠΌΡΡ случаСм использования Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ являСтся Rocket β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для написания Π²Π΅Π±-сСрвСров. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ REST-endpoint’ΠΎΠ² Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ добавлСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ функция содСрТит всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запроса.

НСдостатки

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹, рассмотрим ΠΈΡ… Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нСдостатки:

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

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

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

ЧСрная магия мСтапрограммирования: ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ макросы Π² Rust 1.15

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ макросы Π² растС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ макросы Π² растС. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ макросы Π² растС. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ макросы Π² растС. Π€ΠΎΡ‚ΠΎ Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ макросы Π² растСВ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ познакомились с ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· самых интСрСсных возмоТностСй языка Rust β€” ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΌΠΈ макросами.

Как ΠΈ ΠΎΠ±Π΅Ρ‰Π°Π», сСгодня я расскаТу ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ макросы ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈ Π² Ρ‡Π΅ΠΌ ΠΈΡ… ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ΅Ρ‡Π°Π»ΡŒΠ½ΠΎ извСстных макросов прСпроцСссора Π² C/C++.

Но сначала пройдСмся ΠΏΠΎ Ρ€Π΅Π»ΠΈΠ·Ρƒ 1.15 ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠ½ΠΈ оказались Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ вострСбованы.

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ?

Π―Π·Ρ‹ΠΊ Rust развиваСтся ΠΎΡ‡Π΅Π½ΡŒ интСнсивно. Π˜Π·Π΄Π°Ρ‚Π΅Π»ΠΈ, Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½ΠΎ, Π½Π΅ ΡƒΡΠΏΠ΅Π²Π°ΡŽΡ‚ ΠΈ Π½Π΅ бСрутся Π²Ρ‹ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠ½ΠΈΠ³ΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΡƒΡΡ‚Π°Ρ€Π΅Π²Π°ΡŽΡ‚ Π΅Ρ‰Π΅ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π° страницах высохнСт краска.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ большая Ρ‡Π°ΡΡ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ прСдставлСна Π² элСктронном Π²ΠΈΠ΄Π΅. Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ источником ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ являСтся Книга, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² Π½Π° вопросы Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ². Для совсСм частых вопросов прСдусмотрСн Ρ€Π°Π·Π΄Π΅Π» FAQ.

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

Π›ΡŽΠ΄ΡΠΌ, Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ с C++, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсна ΠΊΠ½ΠΈΠ³Π°, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ porting guide, ΡΡ‚Π°Ρ€Π°ΡŽΡ‰Π°ΡΡΡ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π² сравнСнии с C++ ΠΈ Π΄Π΅Π»Π°ΡŽΡ‰Π°Ρ Π°ΠΊΡ†Π΅Π½Ρ‚ Π½Π° различиях языков ΠΈ Π½Π° Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Rust Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅.

Если вас интСрСсуСт история развития языка ΠΈ взгляд с Ρ‚ΠΎΠΉ стороны Π±Π°Ρ€Ρ€ΠΈΠΊΠ°Π΄, ΠΊΡ€Π°ΠΉΠ½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π±Π»ΠΎΠ³ΠΈ Aaron Turon ΠΈ Niko Matsakis. РСбята ΠΏΠΈΡˆΡƒΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΆΠΈΠ²Ρ‹ΠΌ языком ΠΈ Ρ€Π°ΡΡΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… языка ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ прСдполагаСтся ΠΈΡ… Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ. Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΠΈΠ· этих Π±Π»ΠΎΠ³ΠΎΠ² ΡƒΠ·Π½Π°Π΅ΡˆΡŒ ΠΊΡƒΠ΄Π° большС Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ‡Π΅ΠΌ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… источников.

НаконСц, Ссли Π²Ρ‹ Π½Π΅ Π±ΠΎΠΈΡ‚Π΅ΡΡŒ Π΄Ρ€Π°ΠΊΠΎΠ½ΠΎΠ² ΠΈ Ρ‚Π΅ΠΌΠ½Ρ‹Ρ… ΡƒΠ³Π»ΠΎΠ², Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Растономикон. Волько ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽ, послС прочтСния этой ΠΊΠ½ΠΈΠ³ΠΈ Π²Ρ‹ ΡƒΠΆΠ΅ Π½Π΅ смоТСтС ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Rust ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π’ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, я отвлСкся…

НовоС в Rust 1.15

Π‘ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° выпуска 1.14 ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΠΎΠΊΠΎΠ»ΠΎ 6 нСдСль. Π—Π° это врСмя Π² Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· успСли Π²ΠΎΠΉΡ‚ΠΈ 1443 ΠΏΠ°Ρ‚Ρ‡Π° (нСслабо, ΠΏΡ€Π°Π²Π΄Π°?) ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π±Π°Π³ΠΈ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Π΅ возмоТности. А Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ Π½Π° днях появился ΠΈ хотфикс 1.15.1, с нСбольшими, Π½ΠΎ Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ исправлСниями.

Π—Π° подробностями ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ страницС анонса ΠΈΠ»ΠΈ ΠΊ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌΡƒ описанию ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (changelog). Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΌΡ‹ сконцСнтрируСмся Π½Π° Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹Ρ… измСнСниях.

Cargo ΡƒΠΆΠ΅ взрослый

CистСма сборки компилятора ΠΈ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Rust Π±Ρ‹Π»Π° пСрСписана Π½Π° сам Rust с использованиСм Cargo β€” стандартного ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° ΠΈ систСмы сборки, принятой Π² экосистСмС Rust.

Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Cargo являСтся систСмой сборки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π­Ρ‚ΠΎ Π±Ρ‹Π» Π΄ΠΎΠ»Π³ΠΈΠΉ процСсс, Π½ΠΎ ΠΎΠ½ Π½Π°ΠΊΠΎΠ½Π΅Ρ†-Ρ‚ΠΎ принСс свои ΠΏΠ»ΠΎΠ΄Ρ‹. Авторы ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ новая систСма сборки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ с дСкабря ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π° Π² master Π²Π΅Ρ‚ΠΊΠ΅ рСпозитория ΠΈ ΠΏΠΎΠΊΠ° всС ΠΈΠ΄Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ.

Π£ΠΆΠ΅ Π΄Π°ΠΆΠ΅ Π·Π°Π²Π΅Π»ΠΈ ΡƒΠΆΠ΅ Π²ΠΌΠ΅Ρ€ΠΆΠΈΠ»ΠΈ pull request Π½Π° ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ всСх makefile; интСграция Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° Ρ€Π΅Π»ΠΈΠ· 1.17.

ВсС это Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ ΠΏΠΎΡ‡Π²Ρƒ ΠΊ прямому использованию ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈΠ· crates.io для сборки компилятора, ΠΊΠ°ΠΊ ΠΈ Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅. А Π΅Ρ‰Π΅ это нСплохая дСмонстрация возмоТностСй Cargo.

НовыС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ использования Rust Π² embedded ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ компилятора ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ сообщСство для выяснСния потрСбностСй этой ΠΏΠΎΠΊΠ° малочислСнной, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

БыстрСС! Π’Ρ‹ΡˆΠ΅! БильнСС!

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ стал быстрСС. А Π½Π΅Π΄Π°Π²Π½ΠΎ Π΅Ρ‰Π΅ ΠΈ объявили ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ систСма ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ компиляции ΠΏΠ΅Ρ€Π΅ΡˆΠ»Π° Π² Ρ„Π°Π·Ρƒ Π±Π΅Ρ‚Π°-тСстирования. На ΠΌΠΎΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… врСмя компиляции послС Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΠΎΡΡŒ с

4 сСкунд, хотя ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ° всС Π΅Ρ‰Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎΠ΅ врСмя. Пока ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ компиляция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π½ΠΎΡ‡Π½Ρ‹Ρ… сборках ΠΈ сильно зависит ΠΎΡ‚ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° зависимостСй, Π½ΠΎ прогрСсс Ρ€Π°Π΄ΡƒΠ΅Ρ‚.

Алгоритм slice::sort() Π±Ρ‹Π» пСрСписан ΠΈ стал Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ, Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС. Π’Π΅ΠΏΠ΅Ρ€ΡŒ это гибридная сортировка, рСализованная ΠΏΠΎΠ΄ влияниСм Timsort. РаньшС использовалась обычная сортировка слияниСм.

Π’ C++ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ шаблона для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ ограничСния Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для спСциализации этого шаблона. Π Π°Π±ΠΎΡ‚Ρ‹ Π² этом Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ вСдутся, Π½ΠΎ ΠΏΠΎΠΊΠ° всС ΠΎΡ‡Π΅Π½ΡŒ слоТно.

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

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° IDE

Π­Ρ‚ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅Ρ‚ Π² ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΌ Rust, Π½ΠΎ Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π½ΠΎΠ²ΠΎΡΡ‚ΡŒ слишком Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎ Π½Π΅ΠΉ ΡƒΠΌΠΎΠ»Ρ‡Π°Ρ‚ΡŒ. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Rust Language Server объявили ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π°Π»ΡŒΡ„Π°-вСрсии своСго Π΄Π΅Ρ‚ΠΈΡ‰Π°.

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

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ любой Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈΠ»ΠΈ IDE, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ LSP автоматичСски ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ всСх LSP-совмСстимых языков.

Π£ΠΆΠ΅ сСйчас ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ возмоТности Π½Π° совмСстимых Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°Ρ…, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π²Ρ‚ΠΎΡ€Ρ‹ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽΡ‚ остороТно ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ своим Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΈΠ±ΠΎ ΠΊΠΎΠ΄ Π΅Ρ‰Π΅ довольно сырой.

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ Π² Rust

ВСрнСмся ΠΊ нашим Π±Π°Ρ€Π°Π½Π°ΠΌ.

Π‘ самого Π½Π°Ρ‡Π°Π»Π° программисты Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ помСньшС, Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ побольшС. Π’ Ρ€Π°Π·Π½ΠΎΠ΅ врСмя ΠΏΠΎΠ΄ этим ΠΏΠΎΠ½ΠΈΠΌΠ°Π»ΠΈ Ρ€Π°Π·Π½Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ, Π½ΠΎ условно ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° сокращСния ΠΊΠΎΠ΄Π°:

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ большС соотвСтствуСт Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ: Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, классы ΠΈ Ρ‚. ΠΏ.

К Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ отнСсти макросы, ΠΈΠ½ΠΊΠ»ΡƒΠ΄Ρ‹ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠΉ прСпроцСссинг. Π’ языкС Rust для этого прСдусмотрСно Ρ‚Ρ€ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°:

ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ макросы (Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ macro by example) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° хочСтся ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ повторСния ΠΎΠ΄Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ, Π»ΠΈΠ±ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ vec! ΠΈΠ»ΠΈ println! ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ‚Π°ΠΊΠΈΡ… макросов. Π—Π°Π΄Π°ΡŽΡ‚ΡΡ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ сопоставлСния ΠΈ подстановки ΠΏΠΎ ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ. РСализация основана Π½Π° Π±Π°Π·Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ 1986-Π³ΠΎ Π³ΠΎΠ΄Π°, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ своС ΠΏΠΎΠ»Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.

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

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ макроса

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

ΠœΠ°ΠΊΡ€ΠΎ-вставки Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ практичСски Π²ΠΎ всСх мСстах ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ модуля:

ΠœΠ°ΠΊΡ€ΠΎΡΡ‹ довольно часто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…, ΠΊΠΎΠ³Π΄Π° приходится ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Π΅ конструкции, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΡΠ΅Ρ€ΠΈΡŽ impl для стандартных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

НапримСр, Π² стандартной Π±ΠΈΠ±ΠΈΠ»ΠΎΡ‚Π΅ΠΊΠ΅ Rust макросы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½ΠΎΠ³ΠΎ объявлСния Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ°ΠΆΠ° PartialEq для всСвозмоТных сочСтаний срСзов, массивов ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²:

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

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

Чистота ΠΈ порядок

ΠœΠ°ΠΊΡ€ΠΎΡ Π² Rust Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ написан Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ лСксичСски ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ всякий Π½Π°Π±ΠΎΡ€ символов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ макросом. Π­Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с использованиСм прСпроцСссора Π² C/C++.

Π’ Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π½ΠΎΠΌ с Π²ΠΈΠ΄Ρƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° ΠΌΡ‹ вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΠ»ΠΈ Π΄Π²Π°, вычислили Π½Π΅ Ρ‚ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ, Π° послСднСй строкой Π΅Ρ‰Π΅ ΠΈ спровоцировали Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. Π’Ρ€ΠΈ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… ошибки Π½Π° Π΄Π²Π΅ строки ΠΊΠΎΠ΄Π° β€” это ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠ²Π°Ρ‚ΠΎ.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ синтСтичСский, Π½ΠΎ ΠΌΡ‹ всС прСкрасно Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ постоянная смСна Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈ людСй Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π½Π΅ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄.

ΠšΠΎΡ€Π΅Π½ΡŒ Π·Π»Π° Π»Π΅ΠΆΠΈΡ‚ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ прСпроцСссор C/C++ ΠΎΡ€ΡƒΠ΄ΡƒΠ΅Ρ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ тСкста, Π° компилятору приходится Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΡ€Ρ‡Π΅Π½Π½ΡƒΡŽ прСпроцСссором ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Напротив, макросы Π² Rust Ρ€Π°Π·Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ самим компилятором ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ синтаксичСского Π΄Π΅Ρ€Π΅Π²Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ описанныС Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅.

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

Π—Π°Ρ‚ΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… макроса ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π½Π΅ пСрСсСкутся с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ. НапримСр, описанный Π²Ρ‹ΡˆΠ΅ макрос vec! ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ с использованиСм ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Для простоты рассмотрим Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚Π²ΡŒ:

послС подстановки макроса Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π²

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Π΅ макросы

Когда возмоТностСй ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… макросов нСдостаточно, Π² Π±ΠΎΠΉ ΠΈΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹Π΅.

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

Π’ качСствС ΠΏΠΎΠ΄ΠΎΠΏΡ‹Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΡ€ΠΎΠ»ΠΈΠΊΠ° возьмСм Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ автоматичСски Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ конструктора #[derive(new)] ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ использованиС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π’ΠΎ Π΅ΡΡ‚ΡŒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ #[derive(new)] ΠΌΡ‹ попросили компилятор ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ вывСсти… Π° Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ? ΠžΡ‚ΠΊΡƒΠ΄Π° компилятор ΠΏΠΎΠΉΠΌΠ΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ? Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ.

Для Π½Π°Ρ‡Π°Π»Π° заглянСм Π² исходный ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ ΠΎΠ½ Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ большой:

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎ косточкам ΠΈ попытаСмся ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ‚.

Π”Π°Π»Π΅Π΅ слСдуСт собствСнно функция, Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π°Ρ Π² Ρ€ΠΎΠ»ΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΉ макрос:

На Π²Ρ…ΠΎΠ΄ ΠΎΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΈΠ· компилятора, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ‚Π΅Π»ΠΎ макроса. На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ компилятор ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ примСнСния макроса. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, функция derive() Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ своСобразный Ρ„ΠΈΠ»ΡŒΡ‚Ρ€.

Если чСстно, я Ρ‚ΠΎΠΆΠ΅ Π½Π΅ понимаю, Π·Π°Ρ‡Π΅ΠΌ Ρ‚Π°ΡΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΡƒΠ΄Π°-сюда Ρ‡Π΅Ρ€Π΅Π· строки ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ нСльзя Π±Ρ‹Π»ΠΎ сразу ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ вмСняСмый интСрфСйс, Π½Ρƒ Π΄Π° Π»Π°Π΄Π½ΠΎ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ситуация измСнится.

Π˜Ρ‚Π°ΠΊ, Π½Π° Π²Ρ…ΠΎΠ΄ Π½Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ:

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΊΠΎΠ΄, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ подстановку для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ структуры. Π—Π΄Π΅ΡΡŒ ΠΊΠΎΠ΄ Π΄Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ ΡƒΠΆΠ΅ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ, поэтому я Π²ΡΡ‚Π°Π²Π»ΡŽ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ прямо Π² тСкст:

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

Π‘Π°ΠΌΠ° структура Π΅Ρ‰Π΅ Ρ€Π°Π·:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ примСнСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ³ΠΎ макроса:

Π’Π½Π΅Π·Π°ΠΏΠ½ΠΎ, всС становится Π½Π° свои мСста. ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, ΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ собствСнноручно сгСнСрировали impl Π±Π»ΠΎΠΊ для структуры, Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² Π½Π΅Π³ΠΎ Π°ΡΡΠΎΡ†ΠΈΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-конструктор new() с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ (!), двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ x ΠΈ y ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈ с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½Π°ΡˆΡƒ структуру, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ инициализируя Π΅Π΅ поля значСниями ΠΈΠ· своих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Rust ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈΠ· контСкста, Ρ‡Π΅ΠΌΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ x ΠΈ y Π΄ΠΎ ΠΈ послС двоСточия, всС компилируСтся ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

Π’ качСствС упраТнСния, ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π΄Π²Π΅ Π²Π΅Ρ‚Π²ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

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

НадСюсь, Ρ‡Ρ‚ΠΎ ΡΡ‚Π°Ρ‚ΡŒΡ оказалась Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ. А Ссли послС Π΅Π΅ прочтСния Π²Ρ‹ Π΅Ρ‰Π΅ ΠΈ Π·Π°Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с языком Rust, я Π±ΡƒΠ΄Ρƒ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ свою Π·Π°Π΄Π°Ρ‡Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ πŸ™‚

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ совмСстно с Π”Π°Ρ€ΡŒΠ΅ΠΉ Π©Π΅Ρ‚ΠΈΠ½ΠΈΠ½ΠΎΠΉ.

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

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

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