Channel: Rust
π Gatehouse β ΡΡΠΎ Π³ΠΈΠ±ΠΊΠ°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠΎΠ² Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π² ΡΠ΅Π±Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ°: RBAC (role-based), ABAC (attribute-based) ΠΈ ReBAC (relationship-based).
ΠΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π½Π° Rust ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Gatehouse:
βͺ ΠΠ½ΠΎΠ³ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ: Gatehouse ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ°, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
βͺ ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ: ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² (AND, OR, NOT) Π΄Π°Π΅Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΏΡΠ°Π²ΠΈΠ» Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ.
βͺ ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΡΡΠ΅ΡΡ ΠΎΠ± ΠΎΡΠ΅Π½ΠΊΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ, ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΈ Π°ΡΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.
βͺ Fluent Builder API: Π£Π΄ΠΎΠ±Π½ΡΠΉ ΠΈ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ API ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠΎ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅.
βͺ Π’ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° async: ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Gatehouse Π»Π΅Π³ΠΊΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΡΡΡ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Gatehouse Π½Π°Π΄ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² Π΅Π³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ: Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π°Π΄Π°ΠΏΡΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΡΠ±ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Gatehouse ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΡΡ ΠΈ Π½Π°Π΄ΡΠΆΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° Π² ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°Ρ .
π Github
@rust_code
ΠΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ Π½Π° Rust ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ»ΠΎΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Gatehouse:
βͺ ΠΠ½ΠΎΠ³ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ: Gatehouse ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ°, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΠΎΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
βͺ ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ: ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² (AND, OR, NOT) Π΄Π°Π΅Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΏΡΠ°Π²ΠΈΠ» Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ.
βͺ ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π΅ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΡΡΠ΅ΡΡ ΠΎΠ± ΠΎΡΠ΅Π½ΠΊΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ, ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΎΡΠ»Π°Π΄ΠΊΡ ΠΈ Π°ΡΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.
βͺ Fluent Builder API: Π£Π΄ΠΎΠ±Π½ΡΠΉ ΠΈ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ API ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π±ΡΡΡΡΠΎ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΡ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅.
βͺ Π’ΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° async: ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Gatehouse Π»Π΅Π³ΠΊΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΡΡΡ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Gatehouse Π½Π°Π΄ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² Π΅Π³ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ: Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π°Π΄Π°ΠΏΡΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΡΠ±ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Gatehouse ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΡΡ ΠΈ Π½Π°Π΄ΡΠΆΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° Π² ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°Ρ .
π Github
@rust_code
This media is not supported in your browser
VIEW IN TELEGRAM
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅: ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ CPU, ΠΏΠ°ΠΌΡΡΠΈ, Π΄ΠΈΡΠΊΠ° ΠΈ ΡΠ΅ΡΠΈ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π°Π΄Π°ΠΏΡΠΈΠ²Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΎΠΏΠΎΠ²Π΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΏΡΠ΅Π²ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠ³ΠΎΠ², Π΅Π΄ΠΈΠ½ΡΠΉ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ Π±Π΅Π· Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
ΠΡΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· bcrypt ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ Ρ Π²Π΅Π±Ρ ΡΠΊΠ°ΠΌΠΈ Π΄Π»Ρ Discord, Slack ΠΈ Π΄Ρ.
π Github
Please open Telegram to view this post
VIEW IN TELEGRAM
π ΠΡΠΏΡΡΠΊ Rust 1.86. ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ·ΡΠΊΠ° Rust
ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΡΠ΅Π»ΠΈΠ· ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ Rust 1.86, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Mozilla, Π½ΠΎ Π½ΡΠ½Π΅ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ ΠΏΠΎΠΊΡΠΎΠ²ΠΈΡΠ΅Π»ΡΡΡΠ²ΠΎΠΌ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ Π½Π΅ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Rust Foundation. Π―Π·ΡΠΊ ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°Π½ Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠ°ΠΌΡΡΡΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ±Ρ ΠΎΠ΄ΡΡΡ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ±ΠΎΡΡΠΈΠΊΠ° ΠΌΡΡΠΎΡΠ° ΠΈ runtime (runtime ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ).
ΠΠ΅ΡΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ Π² Rust ΠΈΠ·Π±Π°Π²Π»ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΎΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ Π·Π°ΡΠΈΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠ»Π΅ Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡΠ»Π΅Π²ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, Π²ΡΡ ΠΎΠ΄ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ Π±ΡΡΠ΅ΡΠ° ΠΈ Ρ.ΠΏ. ΠΠ»Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Cargo. ΠΠ»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ crates.io.
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΠΌΡΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π² Rust Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΡΠ»ΠΎΠΊ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΡΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ) ΠΈ ΠΎΡΠ΅Π½ΠΊΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. Rust ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ, ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π»ΡΡΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡΠΈ (immutable) ΡΡΡΠ»ΠΎΠΊ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠΈΠ»ΡΠ½ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
π ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ΡΡΠ²Π°
πΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ΅Π»ΠΈΠ·Π°
@rust_code
ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΡΠ΅Π»ΠΈΠ· ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ Rust 1.86, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Mozilla, Π½ΠΎ Π½ΡΠ½Π΅ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ΄ ΠΏΠΎΠΊΡΠΎΠ²ΠΈΡΠ΅Π»ΡΡΡΠ²ΠΎΠΌ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠΉ Π½Π΅ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Rust Foundation. Π―Π·ΡΠΊ ΡΡΠΎΠΊΡΡΠΈΡΠΎΠ²Π°Π½ Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠ°ΠΌΡΡΡΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Π½ΠΈΠΉ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ±Ρ ΠΎΠ΄ΡΡΡ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ±ΠΎΡΡΠΈΠΊΠ° ΠΌΡΡΠΎΡΠ° ΠΈ runtime (runtime ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ).
ΠΠ΅ΡΠΎΠ΄Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ Π² Rust ΠΈΠ·Π±Π°Π²Π»ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΎΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ ΠΈ Π·Π°ΡΠΈΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΡ ΠΈΠ·-Π·Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ°ΠΌΡΡΡΡ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΡΠ»Π΅ Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΡΠ»Π΅Π²ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, Π²ΡΡ ΠΎΠ΄ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ Π±ΡΡΠ΅ΡΠ° ΠΈ Ρ.ΠΏ. ΠΠ»Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ Cargo. ΠΠ»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ crates.io.
ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΠΌΡΡΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π² Rust Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΡΠ»ΠΎΠΊ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π²Π»Π°Π΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, ΡΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ) ΠΈ ΠΎΡΠ΅Π½ΠΊΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. Rust ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΎΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ, ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π»ΡΡΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡΠΈ (immutable) ΡΡΡΠ»ΠΎΠΊ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠΈΠ»ΡΠ½ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ.
π ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π½ΠΎΠ²ΡΠ΅ΡΡΠ²Π°
πΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ΅Π»ΠΈΠ·Π°
@rust_code
π₯ Urx (ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ "Extracts URLs") β ΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π½Π° Π±Π°Π·Π΅ Rust, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΠΎΠ·Π΄Π°Π» Π΄Π»Ρ ΡΠ±ΠΎΡΠ° URL ΠΈΠ· ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
OSINT Π°ΡΡ
ΠΈΠ²ΠΎΠ².
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ² ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΎΠ±ΡΠΈΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ URLβΠ°Π΄ΡΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡΡ , ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Urx:
βͺ ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ URLβΠ°Π΄ΡΠ΅ΡΠΎΠ² ΡΡΠ°Π·Ρ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² (Wayback Machine, Common Crawl, OTX)
βͺ ΠΠΈΠ±ΠΊΠ°Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌ, ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ ΠΈΠ»ΠΈ Π·Π°ΡΠ°Π½Π΅Π΅ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠ΅ΡΠ΅ΡΠ°ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Β«noβimageΒ» Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ)
βͺ ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ² Π²ΡΠ²ΠΎΠ΄Π° (plain text, JSON, CSV)
βͺ ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ, ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ (ΡΠ΅ΡΠ΅Π· stdin Π΄Π»Ρ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ²)
βͺ ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° URLβΠ°Π΄ΡΠ΅ΡΠΎΠ² ΠΏΠΎ ΡΡΠ°ΡΡΡβΠΊΠΎΠ΄Π°ΠΌ ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°ΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΡΠ»ΠΎΠΊ ΠΈΠ· ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡ
Urx Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° URL, ΡΠΎΡΠ΅ΡΠ°Ρ Π²ΡΡΠΎΠΊΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ (Rust, Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°) ΠΈ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ, ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΡΠΊΡΠΏΠΎΡΡΠ° Π΄Π°Π½Π½ΡΡ .
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°:
π Github
@rust_code
#security #bugbounty
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ² ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΠΎΠ±ΡΠΈΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ URLβΠ°Π΄ΡΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡΡ , ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Urx:
βͺ ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ URLβΠ°Π΄ΡΠ΅ΡΠΎΠ² ΡΡΠ°Π·Ρ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² (Wayback Machine, Common Crawl, OTX)
βͺ ΠΠΈΠ±ΠΊΠ°Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌ, ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌ ΠΈΠ»ΠΈ Π·Π°ΡΠ°Π½Π΅Π΅ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠ΅ΡΠ΅ΡΠ°ΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Β«noβimageΒ» Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ)
βͺ ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ² Π²ΡΠ²ΠΎΠ΄Π° (plain text, JSON, CSV)
βͺ ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ, ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ (ΡΠ΅ΡΠ΅Π· stdin Π΄Π»Ρ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ²)
βͺ ΠΠ°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° URLβΠ°Π΄ΡΠ΅ΡΠΎΠ² ΠΏΠΎ ΡΡΠ°ΡΡΡβΠΊΠΎΠ΄Π°ΠΌ ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°ΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΡΠ»ΠΎΠΊ ΠΈΠ· ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ ΡΡΡΠ°Π½ΠΈΡ
Urx Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠ° ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° URL, ΡΠΎΡΠ΅ΡΠ°Ρ Π²ΡΡΠΎΠΊΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ (Rust, Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°) ΠΈ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΠΈ, ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈ ΡΠΊΡΠΏΠΎΡΡΠ° Π΄Π°Π½Π½ΡΡ .
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°:
cargo install urx
π Github
@rust_code
#security #bugbounty
πΆ Glicol β ΡΡΠΎ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ΅Π΄Π° Π΄Π»Ρ live-ΠΊΠΎΠ΄ΠΈΠ½Π³Π°, Π³Π΄Π΅ Π·Π²ΡΠΊΠΈ ΡΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΈΠ· ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ·Π»ΠΎΠ², ΠΊΠ°ΠΊ Π² ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠΌ ΡΠΈΠ½ΡΠ΅Π·Π°ΡΠΎΡΠ΅.
ΠΠ°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Rust, ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π³Π΄Π΅ ΡΠ³ΠΎΠ΄Π½ΠΎ: Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, ΠΊΠ°ΠΊ VST-ΠΏΠ»Π°Π³ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° Π°ΠΏΠΏΠ°ΡΠ°ΡΡΡΠ΅ Π²ΡΠΎΠ΄Π΅ Bela.
ΠΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ Ρ ΠΏΡΠΎΡΡΡΡ Π±ΠΈΡΠΎΠ², Π° ΠΏΠΎΡΠΎΠΌ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² ΡΡΠΌΠΏΠ»Π΅ΡΠ½ΡΠ΅ ΡΠΎΡΠ½ΡΠ΅ ΡΠΈΠ½ΡΠ΅Π·Ρ β Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ. ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ Glicol β Π² Π΅Π³ΠΎ Π½ΠΈΠ·ΠΊΠΎΠΌ ΠΏΠΎΡΠΎΠ³Π΅ Π²Ρ ΠΎΠ΄Π°, Π½ΠΎ ΠΈ Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΠΎΠ².
π€ GitHub
@rust_code
ΠΠ°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Rust, ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π³Π΄Π΅ ΡΠ³ΠΎΠ΄Π½ΠΎ: Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, ΠΊΠ°ΠΊ VST-ΠΏΠ»Π°Π³ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° Π°ΠΏΠΏΠ°ΡΠ°ΡΡΡΠ΅ Π²ΡΠΎΠ΄Π΅ Bela.
ΠΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ Ρ ΠΏΡΠΎΡΡΡΡ Π±ΠΈΡΠΎΠ², Π° ΠΏΠΎΡΠΎΠΌ ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² ΡΡΠΌΠΏΠ»Π΅ΡΠ½ΡΠ΅ ΡΠΎΡΠ½ΡΠ΅ ΡΠΈΠ½ΡΠ΅Π·Ρ β Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ. ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ Glicol β Π² Π΅Π³ΠΎ Π½ΠΈΠ·ΠΊΠΎΠΌ ΠΏΠΎΡΠΎΠ³Π΅ Π²Ρ ΠΎΠ΄Π°, Π½ΠΎ ΠΈ Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΠΎΠ².
π€ GitHub
@rust_code
β¨ Machine Learning na Rust β¨
π ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΠΈΠ· ΡΡΠ°ΡΡΠΈ The Beginnerβs Guide to Machine Learning with Rust:
βͺ Rust β Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΈ Π±ΡΡΡΡΡΠΉ: ΠΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π΄Π°Π΅Ρ ΡΠΊΠΎΡΠΎΡΡΡ C/C++
βͺ ndarray β Π°Π½Π°Π»ΠΎΠ³ NumPy
βͺ tch-rs β ΠΎΠ±Π΅ΡΡΠΊΠ° Π½Π°Π΄ PyTorch
βͺ linfa β Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΠ Π½Π° Rust
βͺ Cargo β Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ
π Rust Π΅ΡΠ΅ ΡΠ°Π½ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡΡ Python, Π½ΠΎ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΡΠΎ ΠΏΠΎΡΡΠΏΠ°ΡΡ π
π ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΠΈΠ· ΡΡΠ°ΡΡΠΈ The Beginnerβs Guide to Machine Learning with Rust:
βͺ Rust β Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΈ Π±ΡΡΡΡΡΠΉ: ΠΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π΄Π°Π΅Ρ ΡΠΊΠΎΡΠΎΡΡΡ C/C++
βͺ ndarray β Π°Π½Π°Π»ΠΎΠ³ NumPy
βͺ tch-rs β ΠΎΠ±Π΅ΡΡΠΊΠ° Π½Π°Π΄ PyTorch
βͺ linfa β Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΠ Π½Π° Rust
βͺ Cargo β Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ
π Rust Π΅ΡΠ΅ ΡΠ°Π½ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡΡ Python, Π½ΠΎ ΡΠΆΠ΅ Π΅ΡΡΡ ΡΡΠΎ ΠΏΠΎΡΡΠΏΠ°ΡΡ π
π§ garde ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ:
β ΠΠ΅Π³ΠΊΠΎ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΠΏΡΡΠΌΠΎ Π²Π½ΡΡΡΠΈ ΡΡΡΡΠΊΡΡΡ (ΡΠ΅ΡΠ΅Π· Π°ΡΡΠΈΠ±ΡΡΡ).
π Π Π°Π±ΠΎΡΠ°ΡΡ Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ (inner types).
π§ ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ newtypes β ΠΎΠ±ΡΡΡΠΊΠΈ Π½Π°Π΄ ΡΠΈΠΏΠ°ΠΌΠΈ.
π οΈ ΠΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠ΅ Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡΡ.
β‘ ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π½ΠΎ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΡΠ°ΡΡΡ ΡΠΈΠΏΠ°.
π¦ ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
rust
use garde::Validate;
#[derive(Validate)]
struct User {
#[garde(length(min = 3))]
username: String,
#[garde(email)]
email: String,
}
Π’ΡΡ username Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈΠ· 3 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π° email β Π²Π°Π»ΠΈΠ΄Π½ΡΠΉ Π°Π΄ΡΠ΅Ρ.
β GitHub: https://github.com/jprochazk/garde
#rustlang #type #validation #programming #library #opensource
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Python/ django
This media is not supported in your browser
VIEW IN TELEGRAM
ΠΠΎΠ²ΡΠΉ Function (fxn) β ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Python-ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ, ΡΡΠ°Π²Π½ΠΈΠΌΠΎΠΉ Ρ Rust.
π§ ΠΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ?
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° CPython Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΡΡΠ½ΠΊΡΠΈΠΉ
- ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (IR)
- Π’ΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ IR Π² C++ ΠΈΠ»ΠΈ Rust, Π° Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Π² Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ: Linux, Android, WebAssembly ΠΈ Π΄Ρ.
π¦ ΠΡΠΈΠΌΠ΅Ρ:
@compile
def fma(x: float, y: float, z: float) -> float:
return x * y + z
ΠΠΎΡΠ»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠΉ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π±Π΅Π· ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Python.
π ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅
π Github
@pythonl
#Python #Rust #fxn #Compiler #Performance #AI #ML #Wasm
Please open Telegram to view this post
VIEW IN TELEGRAM
ΠΠ°ΠΊΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π±ΡΠ΄ΡΡ Π²ΡΠ²Π΅Π΄Π΅Π½Ρ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ? ΠΡΠΈΠ²Π΅Π΄ΠΈΡΠ΅ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
use std::mem;
struct Tracer(&'static str);
impl Drop for Tracer {
fn drop(&mut self) {
println!("Dropping {}", self.0);
}
}
struct Container {
tracer: Tracer,
}
fn make_tracer(name: &'static str) -> Tracer {
println!("Creating {}", name);
Tracer(name)
}
fn main() {
let a = make_tracer("a");
let b = make_tracer("b");
{
let temp = make_tracer("temp");
println!("Inside block");
// temp ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² c
let c = temp;
println!("Exiting block");
} // <- Π·Π΄Π΅ΡΡ c (ΡΠΎ Π΅ΡΡΡ Β«tempΒ») ΡΠΌΠΈΡΠ°Π΅Ρ
let mut container = Container {
tracer: make_tracer("container1"),
};
// Π·Π°ΠΌΠ΅Π½Π° ΠΏΠΎΠ»Ρ: ΡΡΠ°ΡΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ1 Π±ΡΠ΄Π΅Ρ ΡΠ±ΡΠΎΡΠ΅Π½
container.tracer = make_tracer("container2");
println!("Before dropping b explicitly");
mem::drop(b);
println!("End of main");
} // <- Π·Π΄Π΅ΡΡ ΡΠΌΠΈΡΠ°ΡΡ: container.tracer ("container2"), Π·Π°ΡΠ΅ΠΌ a
```bash
Creating a
Creating b
Creating temp
Inside block
Exiting block
Dropping temp
Creating container1
Creating container2
Dropping container1
Before dropping b explicitly
Dropping b
End of main
Dropping container2
Dropping a```
ΠΠΎΡΡΠ½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠ°Π³Π°ΠΌ:
let a = make_tracer("a");
Π‘Π½Π°ΡΠ°Π»Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ make_tracer("a"), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ
Creating a
ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Tracer("a").
let b = make_tracer("b");
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ:
Creating b
ΠΠ»ΠΎΠΊ { β¦ }:
let temp = make_tracer("temp"); β Creating temp
println!("Inside block"); β Inside block
let c = temp; β ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, Π±Π΅Π· Π½ΠΎΠ²ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π°.
println!("Exiting block"); β Exiting block
Π ΠΊΠΎΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠ° Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ c (ΠΎΠ½ ΠΆΠ΅ temp), ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Drop β Dropping temp
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ container:
rust
let mut container = Container {
tracer: make_tracer("container1"),
};
β Creating container1
ΠΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΠ»Ρ tracer:
```rust
container.tracer = make_tracer("container2");
Π‘Π½Π°ΡΠ°Π»Π° Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΏΡΠ°Π²Π°Ρ ΡΠ°ΡΡΡ β Creating container2.
ΠΠ°ΡΠ΅ΠΌ ΡΡΠ°ΡΡΠΉ container.tracer (ΡΠΎ Π΅ΡΡΡ container1) ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ β Dropping container1.```
Π―Π²Π½ΠΎΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ b:
```rust
println!("Before dropping b explicitly");
mem::drop(b);
β Before dropping b explicitly
ΠΠ°ΡΠ΅ΠΌ drop(b) Π²ΡΠ·ΡΠ²Π°Π΅Ρ Drop Π΄Π»Ρ b β Dropping b```
ΠΡΡ ΠΎΠ΄ ΠΈΠ· main:
```rust
println!("End of main");
β End of main```
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ Rust ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ (LIFO):
Π‘Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠ»Π΅ container.tracer (ΡΠΆΠ΅ βcontainer2β) β Dropping container2
ΠΠ°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ a β Dropping a
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
Please open Telegram to view this post
VIEW IN TELEGRAM
use std::mem;
struct Tracer(&'static str);
impl Tracer {
fn new(name: &'static str) -> Tracer {
println!("Creating {}", name);
Tracer(name)
}
}
impl Drop for Tracer {
fn drop(&mut self) {
println!("Dropping {}", self.0);
}
}
struct Test {
a: Tracer,
b: Tracer,
}
fn main() {
let mut t = Test {
a: Tracer::new("A"),
b: Tracer::new("B"),
};
mem::replace(&mut t.a, Tracer::new("X"));
println!("Midpoint");
}
β ΠΠ’ΠΠΠ’:
Creating B
Creating X
Dropping A
Midpoint
Dropping B
Dropping X
```
1. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅:
Tracer::new("A") β Creating A
2. mem::replace(...):
Creating X
Dropping A
3.
println!("Midpoint")
Midpoint
4. Drop ΠΏΠΎΠ»Ρ:
B
X
ΠΡΠΎΡ ΠΊΠΎΠ΄ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Drop ΠΏΡΠΈ Π·Π°ΠΌΠ΅Π½Π΅ ΠΏΠΎΠ»Π΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ Π² Rust ΡΠ΅ΡΠ΅Π· std::mem::replace.
@rust_code
Please open Telegram to view this post
VIEW IN TELEGRAM
π¦ less_slow.rs β ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΉ Rust
ΠΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° Rust.
Π¦Π΅Π»Ρ β ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈ Π³Π»ΡΠ±ΠΆΠ΅ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Rust-ΠΊΠΎΠ΄.
π Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅:
β’ Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ async ΠΈ sync ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ²
β’ Π Π°Π±ΠΎΡΠ° Ρ ΠΊΠ΅Ρ-ΡΡΠ΅Π½Π΄Π»ΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ ΠΈ layout-ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ
β’ SIMD-ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ
β’ Π Π°Π·Π±ΠΎΡ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΌΠΈΠΊΡΠΎΠ±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈ
β’ ΠΡΠΈΠΌΠ΅ΡΡ Π±ΡΡΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³Π° (JSON, Arrow, Parquet)
β’ Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠΎΠ»ΡΠΌΠΈ struct, layout, memory alignment
π¦ ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
rayon, tokio, simd, polars, serde, simd-json, tracing, mimalloc
π‘ Must-read, Π΅ΡΠ»ΠΈ ΡΡ Ρ ΠΎΡΠ΅ΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΈΡΠ°ΡΡ Π½Π° Rust, Π° ΠΏΠΈΡΠ°ΡΡ Π±ΡΡΡΡΡΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Rust-ΠΊΠΎΠ΄.
π§ ΠΡΠ΅ Π² ΡΠ΅ΡΠΈΠΈ:
π§ less_slow.cpp β C++ Π±Π΅Π· ΡΠΎΡΠΌΠΎΠ·ΠΎΠ²: Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ, ΠΊΠ΅ΡΠΈ, SIMD, Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΈ, ΠΏΠ°ΡΡΠΈΠ½Π³ JSON ΠΈ ΡΡΡΠΊΠΈ Ρ ΠΏΠ°ΠΌΡΡΡΡ
π github.com/ashvardanian/less_slow.cpp
π less_slow.py β Python Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΠΊΠ°Ρ : pandas vs polars, Cython, PyO3, Numba, Parquet, zero-copy
π ΠΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ, ΠΌΠΈΠΊΡΠΎΠ±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌΠΈ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΡΠΌΠΈ.
π Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ:
github.com/ashvardanian/less_slow.rs
@rust_code
ΠΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° Rust.
Π¦Π΅Π»Ρ β ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈ Π³Π»ΡΠ±ΠΆΠ΅ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Rust-ΠΊΠΎΠ΄.
π Π ΠΏΡΠΎΠ΅ΠΊΡΠ΅:
β’ Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ async ΠΈ sync ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ²
β’ Π Π°Π±ΠΎΡΠ° Ρ ΠΊΠ΅Ρ-ΡΡΠ΅Π½Π΄Π»ΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ ΠΈ layout-ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠΌΠΈ
β’ SIMD-ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ
β’ Π Π°Π·Π±ΠΎΡ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΌΠΈΠΊΡΠΎΠ±Π΅Π½ΡΠΌΠ°ΡΠΊΠΈ
β’ ΠΡΠΈΠΌΠ΅ΡΡ Π±ΡΡΡΡΠΎΠΉ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³Π° (JSON, Arrow, Parquet)
β’ Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠΎΠ»ΡΠΌΠΈ struct, layout, memory alignment
π¦ ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
rayon, tokio, simd, polars, serde, simd-json, tracing, mimalloc
π‘ Must-read, Π΅ΡΠ»ΠΈ ΡΡ Ρ ΠΎΡΠ΅ΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΈΡΠ°ΡΡ Π½Π° Rust, Π° ΠΏΠΈΡΠ°ΡΡ Π±ΡΡΡΡΡΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Rust-ΠΊΠΎΠ΄.
π§ ΠΡΠ΅ Π² ΡΠ΅ΡΠΈΠΈ:
π§ less_slow.cpp β C++ Π±Π΅Π· ΡΠΎΡΠΌΠΎΠ·ΠΎΠ²: Π°ΡΡΠ΅ΠΌΠ±Π»Π΅Ρ, ΠΊΠ΅ΡΠΈ, SIMD, Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΈ, ΠΏΠ°ΡΡΠΈΠ½Π³ JSON ΠΈ ΡΡΡΠΊΠΈ Ρ ΠΏΠ°ΠΌΡΡΡΡ
π github.com/ashvardanian/less_slow.cpp
π less_slow.py β Python Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΠΊΠ°Ρ : pandas vs polars, Cython, PyO3, Numba, Parquet, zero-copy
π ΠΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ, ΠΌΠΈΠΊΡΠΎΠ±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌΠΈ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΡΠΌΠΈ.
π Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ:
github.com/ashvardanian/less_slow.rs
@rust_code
ΠΡΠΎΡΠΈΠ»ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² Rust: Π·Π°ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΊΠΎΠ³Π΄Π°
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΠΈΠ»Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² Rust ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠ°Π·ΠΌΠ΅Ρ, ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΏΠΎΠ»ΡΠ·Ρ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅: https://betterprogramming.pub/compile-time-feature-flags-in-rust-why-how-when-129aada7d1b3
#rust
@rust_code
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΠΈΠ»Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π² Rust ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ²ΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΡΠ°Π·ΠΌΠ΅Ρ, ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΏΠΎΠ»ΡΠ·Ρ ΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅: https://betterprogramming.pub/compile-time-feature-flags-in-rust-why-how-when-129aada7d1b3
#rust
@rust_code
π ΠΠΎΠΏΡΠΎΡ: ΡΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π½Π° Rust?
---
βοΈ ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ: ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
---
π§ Π Π°Π·Π±ΠΎΡ:
-
-
Rust Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΡΡΠΎ: Π½Π΅Π»ΡΠ·Ρ ΠΈΠΌΠ΅ΡΡ ΠΈ ΠΈΠΌΠΌΡΡΠ°Π±Π΅Π»ΡΠ½ΡΡ ΡΡΡΠ»ΠΊΡ, ΠΈ ΠΌΡΡΠ°Π±Π΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ!
π Rust Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
π₯ ΠΠΎΠ΄Π²ΠΎΡ : Π² C++, Go ΠΈΠ»ΠΈ JS ΡΡΠΎ Π±Ρ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ.
Rust Π·Π°Π²Π΅ΡΠ½Π΅Ρ ΡΠ°ΠΊΠΎΠ΅ Π½Π° ΡΡΠ°Π΄ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ β
@rust_code
fn main() {
let mut v = vec![1, 2, 3];
let first = &v[0];
v.push(4);
println!("First: {}", first);
}
---
βοΈ ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ: ΠΡΠΈΠ±ΠΊΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ
---
π§ Π Π°Π·Π±ΠΎΡ:
-
let first = &v[0];
β ΠΈΠΌΠΌΡΡΠ°Π±Π΅Π»ΡΠ½Π°Ρ ΡΡΡΠ»ΠΊΠ°-
v.push(4);
β ΠΌΡΡΠ°Π±Π΅Π»ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡRust Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΡΡΠΎ: Π½Π΅Π»ΡΠ·Ρ ΠΈΠΌΠ΅ΡΡ ΠΈ ΠΈΠΌΠΌΡΡΠ°Π±Π΅Π»ΡΠ½ΡΡ ΡΡΡΠ»ΠΊΡ, ΠΈ ΠΌΡΡΠ°Π±Π΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ!
π Rust Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:
error[E0502]: cannot borrow
v as mutable because it is also borrowed as immutable
π₯ ΠΠΎΠ΄Π²ΠΎΡ : Π² C++, Go ΠΈΠ»ΠΈ JS ΡΡΠΎ Π±Ρ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ.
Rust Π·Π°Π²Π΅ΡΠ½Π΅Ρ ΡΠ°ΠΊΠΎΠ΅ Π½Π° ΡΡΠ°Π΄ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ β
@rust_code
π‘ ΠΠ°Π΄Π°ΡΠ° Linux: ΠΡΠΎΠΏΠ°ΠΆΠ° ΡΠ°ΠΉΠ»Π° ΠΏΠΎΡΠ»Π΅ echo
Π£ Π²Π°Ρ Π΅ΡΡΡ ΡΠ°ΠΉΠ»
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²Ρ Π·Π°ΠΌΠ΅ΡΠ°Π΅ΡΠ΅, ΡΡΠΎ Π²ΡΡ ΡΡΠ°ΡΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΈΡΡΠ΅Π·Π»ΠΎ ΠΈ ΠΎΡΡΠ°Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ° "
ΠΠΎΠΏΡΠΎΡ:
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ? ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΡ, Π½Π΅ ΠΏΠΎΡΠ΅ΡΡΠ² ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅?
β Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅:
π Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ >?
Π‘ΠΈΠΌΠ²ΠΎΠ» > Π² Bash β ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ (truncate) ΡΠ°ΠΉΠ»Π°. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅:
```bash
echo "Hello, world!" > /tmp/testfile```
ΠΡΠΎ Π·Π½Π°ΡΠΈΡ:
Shell ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π½Π° Π·Π°ΠΏΠΈΡΡ Ρ ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ΠΌ (truncate).
ΠΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ echo Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ.
ΠΠΎΡ ΠΏΠΎΠ΄Π²ΠΎΡ : Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ echo ΠΊΠ°ΠΆΠ΅ΡΡΡ Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, ΡΠ°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (>) Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° echo.
β ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ?
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΡ, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ >>, Π° Π½Π΅ >:
```bash
echo "Hello, world!" >> /tmp/testfile
```
>> ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ append, Π½Π΅ ΡΡΠΎΠ³Π°Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅.
β οΈ ΠΠΎΠ½ΡΡΠ½ΡΠΉ ΠΏΠΎΠ΄Π²ΠΎΡ (Π΄Π»Ρ ΠΏΡΠΎΡΠΈ)
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΡΠΎ:
```bash
cat /tmp/testfile > /tmp/testfile
```
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ» ΡΡΠ°Π½Π΅Ρ ΠΏΡΡΡΡΠΌ. ΠΠΎΡΠ΅ΠΌΡ?
β‘οΈ ΠΡΠ²Π΅Ρ: cat ΡΠΈΡΠ°Π΅Ρ ΠΈΠ· /tmp/testfile, Π½ΠΎ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ > Π΄Π΅Π»Π°Π΅Ρ truncate ΡΡΠ°Π·Ρ, Π΅ΡΠ΅ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° cat. Π’ΠΎ Π΅ΡΡΡ:
Π€Π°ΠΉΠ» ΠΎΠ±Π½ΡΠ»ΡΠ΅ΡΡΡ,
ΠΠΎΡΠΎΠΌ cat ΡΠΈΡΠ°Π΅Ρ Π΅Π³ΠΎβ¦ Π½ΠΎ ΠΎΠ½ ΡΠΆΠ΅ ΠΏΡΡΡΠΎΠΉ!
Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»:
```bash
cat /tmp/testfile > /tmp/tmpfile && mv /tmp/tmpfile /tmp/testfile```
Π£ Π²Π°Ρ Π΅ΡΡΡ ΡΠ°ΠΉΠ»
/tmp/testfile
Ρ Π²Π°ΠΆΠ½ΡΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ. ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² Π½Π΅Π³ΠΎ ΡΡΡΠΎΠΊΡ "Hello, world!
" Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
echo "Hello, world!" > /tmp/testfile
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²Ρ Π·Π°ΠΌΠ΅ΡΠ°Π΅ΡΠ΅, ΡΡΠΎ Π²ΡΡ ΡΡΠ°ΡΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΈΡΡΠ΅Π·Π»ΠΎ ΠΈ ΠΎΡΡΠ°Π»Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ° "
Hello, world!
".ΠΠΎΠΏΡΠΎΡ:
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ? ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΡ, Π½Π΅ ΠΏΠΎΡΠ΅ΡΡΠ² ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅?
β Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅:
Π‘ΠΈΠΌΠ²ΠΎΠ» > Π² Bash β ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΡ (truncate) ΡΠ°ΠΉΠ»Π°. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅:
```bash
echo "Hello, world!" > /tmp/testfile```
ΠΡΠΎ Π·Π½Π°ΡΠΈΡ:
Shell ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π½Π° Π·Π°ΠΏΠΈΡΡ Ρ ΠΎΠ±Π½ΡΠ»Π΅Π½ΠΈΠ΅ΠΌ (truncate).
ΠΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ echo Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ.
ΠΠΎΡ ΠΏΠΎΠ΄Π²ΠΎΡ : Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ echo ΠΊΠ°ΠΆΠ΅ΡΡΡ Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ, ΡΠ°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (>) Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° echo.
β ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ?
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΡ, Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ >>, Π° Π½Π΅ >:
```bash
echo "Hello, world!" >> /tmp/testfile
```
>> ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠ°ΠΉΠ» Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ append, Π½Π΅ ΡΡΠΎΠ³Π°Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅.
β οΈ ΠΠΎΠ½ΡΡΠ½ΡΠΉ ΠΏΠΎΠ΄Π²ΠΎΡ (Π΄Π»Ρ ΠΏΡΠΎΡΠΈ)
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΡΠΎ:
```bash
cat /tmp/testfile > /tmp/testfile
```
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ» ΡΡΠ°Π½Π΅Ρ ΠΏΡΡΡΡΠΌ. ΠΠΎΡΠ΅ΠΌΡ?
β‘οΈ ΠΡΠ²Π΅Ρ: cat ΡΠΈΡΠ°Π΅Ρ ΠΈΠ· /tmp/testfile, Π½ΠΎ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ > Π΄Π΅Π»Π°Π΅Ρ truncate ΡΡΠ°Π·Ρ, Π΅ΡΠ΅ Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° cat. Π’ΠΎ Π΅ΡΡΡ:
Π€Π°ΠΉΠ» ΠΎΠ±Π½ΡΠ»ΡΠ΅ΡΡΡ,
ΠΠΎΡΠΎΠΌ cat ΡΠΈΡΠ°Π΅Ρ Π΅Π³ΠΎβ¦ Π½ΠΎ ΠΎΠ½ ΡΠΆΠ΅ ΠΏΡΡΡΠΎΠΉ!
Π§ΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ°ΠΉΠ»:
```bash
cat /tmp/testfile > /tmp/tmpfile && mv /tmp/tmpfile /tmp/testfile```
π§ ΠΠ°Π΄Π°ΡΠ° Π½Π° Rust β Π΄Π»Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΡ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²
Π§ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΠΊΠΎΠ΄?
A.
a: 2
c: 2
B.
a: 1
c: 2
C.
Panic at runtime due to unwrap failure β
D.
Compilation error due to ownership rules
π ΠΡΠ²Π΅Ρ:
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ: C β Panic at runtime due to unwrap failure
ΠΠΎΡΠ΅ΠΌΡ:
ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ a ΠΊΠ°ΠΊ Rc<RefCell<i32>>, ΠΈΠ· Π½Π΅Π³ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ b = a.clone() β ΡΠ΅ΠΏΠ΅ΡΡ Ρ Rc Π΄Π²Π° Π²Π»Π°Π΄Π΅Π»ΡΡΠ°.
ΠΡ ΠΌΡΡΠΈΡΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· b.borrow_mut(), ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π½Π° 1.
ΠΠ°ΡΠ΅ΠΌ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Rc::try_unwrap(b).
β οΈ Rc::try_unwrap ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Rc Π±ΡΠ» Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ. ΠΠΎ Ρ Π½Π°Ρ Π²ΡΡ Π΅ΡΡ Π΅ΡΡΡ a, ΡΠΎ Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° ΠΎΡΡΠ°ΡΡΡΡ β unwrap Π½Π΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΈ unwrap() Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠ°Π½ΠΈΠΊ Π½Π° runtime.
@rust_code
use std::cell::RefCell;
use std::rc::Rc;
fn main() {
let a = Rc::new(RefCell::new(1));
let b = a.clone();
let c = {
let mut val = b.borrow_mut();
*val += 1;
Rc::try_unwrap(b).ok().unwrap().into_inner()
};
println!("a: {}", a.borrow());
println!("c: {}", c);
}
Π§ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΠΊΠΎΠ΄?
A.
a: 2
c: 2
B.
a: 1
c: 2
C.
Panic at runtime due to unwrap failure β
D.
Compilation error due to ownership rules
π ΠΡΠ²Π΅Ρ:
ΠΠΎΡΠ΅ΠΌΡ:
ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ a ΠΊΠ°ΠΊ Rc<RefCell<i32>>, ΠΈΠ· Π½Π΅Π³ΠΎ Π΄Π΅Π»Π°Π΅ΠΌ b = a.clone() β ΡΠ΅ΠΏΠ΅ΡΡ Ρ Rc Π΄Π²Π° Π²Π»Π°Π΄Π΅Π»ΡΡΠ°.
ΠΡ ΠΌΡΡΠΈΡΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· b.borrow_mut(), ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π΅Π³ΠΎ Π½Π° 1.
ΠΠ°ΡΠ΅ΠΌ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Rc::try_unwrap(b).
β οΈ Rc::try_unwrap ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Rc Π±ΡΠ» Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ Π²Π»Π°Π΄Π΅Π»ΡΡΠ΅ΠΌ. ΠΠΎ Ρ Π½Π°Ρ Π²ΡΡ Π΅ΡΡ Π΅ΡΡΡ a, ΡΠΎ Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° ΠΎΡΡΠ°ΡΡΡΡ β unwrap Π½Π΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΈ unwrap() Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠ°Π½ΠΈΠΊ Π½Π° runtime.
@rust_code
Π‘ΠΎΠ·Π΄Π°Π½Π° Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΈ Π°Π²ΡΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° Rust Ρ ΡΡΡΡΠΎΠΌ Π»ΡΡΡΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΠΊ ΡΠ·ΡΠΊΠ°.
Hugging Face
π ΠΠ±Π·ΠΎΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°: ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ΅Ρ Π½Π° Π±Π°Π·Π΅ Qwen2.5-Coder-7B-Instruct, Π΄ΠΎΠΎΠ±ΡΡΠ΅Π½Π½ΡΠΉ Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Rust-Π΄Π°ΡΠ°cΠ΅ΡΠ΅ ΠΎΡ Tesslate.
Π¦Π΅Π»Ρ: Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½Π°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΈΠ΄ΠΈΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΠ³ΠΎ Rust-ΠΊΠΎΠ΄Π° β ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΡΡΠΊΡΡΡΡ, ΡΡΠ΅ΠΉΡΡ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ; ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² AI-Π°Π³Π΅Π½ΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ backend-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ CLI-ΡΡΠΈΠ»ΠΈΡ.
Hugging Face
Π Π°Π·ΠΌΠ΅Ρ: ~7.62 B ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (ΠΏΠΎΡΠ»Π΅ ΠΊΠ²Π°Π½ΡΠΎΠ²Π°Π½ΠΈΡ Q8_0) β ΡΠ°ΠΉΠ» ~8.1 GB Π² ΡΠΎΡΠΌΠ°ΡΠ΅ GGUF.
βοΈ ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ
ΠΠ»ΡΠ±ΠΎΠΊΠΎΠ΅ Rust-ΠΌΡΡΠ»Π΅Π½ΠΈΠ΅: ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Β«think-ΡΠ΅Π³ΠΎΠ²Β» Π² ΠΏΡΠΎΠΌΠΏΡ Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ, ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠ΄Π°ΡΠ΅ΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎ-ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ: ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (crates), lifetimes ΠΈ ΠΈΠ΄ΠΈΠΎΠΌΡ Rust, ΡΡΠΎ ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΠΎΡΠ»Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ.
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π°Π³Π΅Π½ΡΠ°ΠΌΠΈ: ΠΌΠΎΠ΄Π΅Π»Ρ Π³ΠΎΡΠΎΠ²Π° Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π°Π²ΡΠΎΠ½ΠΎΠΌΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π±ΡΡΡΡΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ backend-Π»ΠΎΠ³ΠΈΠΊΠΈ, ΡΠ΅ΡΡΠΎΠ² ΠΈ CLI-ΡΡΠΈΠ»ΠΈΡ.
https://huggingface.co/Tesslate/Tessa-Rust-T1-7B-Q8_0-GGUF
@rust_code
Please open Telegram to view this post
VIEW IN TELEGRAM
β‘οΈΠΠ΅Π³ΠΊΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ²Π΅ΠΆΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΡΡΠ΅Π½Π΄Π°ΠΌΠΈ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π½Π° Π²Π°ΡΠ΅ΠΌ ΡΠ·ΡΠΊΠ΅. ΠΠ°Ρ
ΠΎΠ΄ΠΈΡΠ΅ ΡΠ²ΠΎΠΉ ΡΡΠ΅ΠΊ ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΠΉΡΠ΅ΡΡ:
Python: hottg.com/pythonl
Linux: hottg.com/linuxacademiya
Π‘ΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡ DS: hottg.com/machinelearning_interview
ΠΠ΅ΡΠΉΡΠΎΡΠ΅ΡΠΈ hottg.com/ai_machinelearning_big_data
C++ hottg.com/cpluspluc
Docker: hottg.com/DevopsDocker
Π₯Π°ΠΊΠΈΠ½Π³: hottg.com/linuxkalii
Devops: hottg.com/DevOPSitsec
Data Science: hottg.com/data_analysis_ml
Javascript: hottg.com/javascriptv
C#: hottg.com/csharp_ci
Java: hottg.com/javatg
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ : hottg.com/sqlhub
Python ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡ: hottg.com/python_job_interview
ΠΠΎΠ±ΠΈΠ»ΡΠ½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°: hottg.com/mobdevelop
Golang: hottg.com/Golang_google
React: hottg.com/react_tg
Rust: hottg.com/rust_code
ΠΠ: hottg.com/vistehno
PHP: hottg.com/phpshka
Android: hottg.com/android_its
Frontend: hottg.com/front
Big Data: hottg.com/bigdatai
ΠΠΠ’ΠΠΠΠ’ΠΠΠ: hottg.com/data_math
Kubernets: hottg.com/kubernetc
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ³Ρ: https://hottg.com/gamedev
Haskell: hottg.com/haskell_tg
Π€ΠΈΠ·ΠΈΠΊΠ°: hottg.com/fizmat
πΌ ΠΠ°ΠΏΠΊΠ° Ρ Π²Π°ΠΊΠ°Π½ΡΠΈΡΠΌΠΈ: hottg.com/addlist/_zyy_jQ_QUsyM2Vi
ΠΠ°ΠΏΠΊΠ° Go ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°: hottg.com/addlist/MUtJEeJSxeY2YTFi
ΠΠ°ΠΏΠΊΠ° Python ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°: hottg.com/addlist/eEPya-HF6mkxMGIy
ΠΠ°ΠΏΠΊΠ° ML: https://hottg.com/addlist/2Ls-snqEeytkMDgy
ΠΠ°ΠΏΠΊΠ° FRONTEND: https://hottg.com/addlist/mzMMG3RPZhY2M2Iy
πΠΠ’-ΠΠ΅ΠΌΡ: hottg.com/memes_prog
π¬π§ΠΠ½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ: hottg.com/english_forprogrammers
π§ ΠΠ: hottg.com/vistehno
π954ΠΠ ΠΠΠΠΠ‘ΠΠ Π‘ ΠΠ£Π Π‘ΠΠ: @courses
πΠΡ-ΠΊΠ½ΠΈΠ³ΠΈ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ: https://hottg.com/addlist/BkskQciUW_FhNjEy
Python: hottg.com/pythonl
Linux: hottg.com/linuxacademiya
Π‘ΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡ DS: hottg.com/machinelearning_interview
ΠΠ΅ΡΠΉΡΠΎΡΠ΅ΡΠΈ hottg.com/ai_machinelearning_big_data
C++ hottg.com/cpluspluc
Docker: hottg.com/DevopsDocker
Π₯Π°ΠΊΠΈΠ½Π³: hottg.com/linuxkalii
Devops: hottg.com/DevOPSitsec
Data Science: hottg.com/data_analysis_ml
Javascript: hottg.com/javascriptv
C#: hottg.com/csharp_ci
Java: hottg.com/javatg
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ : hottg.com/sqlhub
Python ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΡ: hottg.com/python_job_interview
ΠΠΎΠ±ΠΈΠ»ΡΠ½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°: hottg.com/mobdevelop
Golang: hottg.com/Golang_google
React: hottg.com/react_tg
Rust: hottg.com/rust_code
ΠΠ: hottg.com/vistehno
PHP: hottg.com/phpshka
Android: hottg.com/android_its
Frontend: hottg.com/front
Big Data: hottg.com/bigdatai
ΠΠΠ’ΠΠΠΠ’ΠΠΠ: hottg.com/data_math
Kubernets: hottg.com/kubernetc
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ³Ρ: https://hottg.com/gamedev
Haskell: hottg.com/haskell_tg
Π€ΠΈΠ·ΠΈΠΊΠ°: hottg.com/fizmat
πΌ ΠΠ°ΠΏΠΊΠ° Ρ Π²Π°ΠΊΠ°Π½ΡΠΈΡΠΌΠΈ: hottg.com/addlist/_zyy_jQ_QUsyM2Vi
ΠΠ°ΠΏΠΊΠ° Go ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°: hottg.com/addlist/MUtJEeJSxeY2YTFi
ΠΠ°ΠΏΠΊΠ° Python ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°: hottg.com/addlist/eEPya-HF6mkxMGIy
ΠΠ°ΠΏΠΊΠ° ML: https://hottg.com/addlist/2Ls-snqEeytkMDgy
ΠΠ°ΠΏΠΊΠ° FRONTEND: https://hottg.com/addlist/mzMMG3RPZhY2M2Iy
πΠΠ’-ΠΠ΅ΠΌΡ: hottg.com/memes_prog
π¬π§ΠΠ½Π³Π»ΠΈΠΉΡΠΊΠΈΠΉ: hottg.com/english_forprogrammers
π§ ΠΠ: hottg.com/vistehno
π954ΠΠ ΠΠΠΠΠ‘ΠΠ Π‘ ΠΠ£Π Π‘ΠΠ: @courses
πΠΡ-ΠΊΠ½ΠΈΠ³ΠΈ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ: https://hottg.com/addlist/BkskQciUW_FhNjEy
π Π£ΡΠ»ΠΎΠ²ΠΈΠ΅:
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ β ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°ΠΌΠΈ (`PriorityQueue`), ΠΊΠΎΡΠΎΡΠ°Ρ:
- ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ ΡΠ΅ΡΠ΅Π·
push(value: T, priority: u32)
.- ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°Π±ΠΈΡΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ Π½Π°ΠΈΠ²ΡΡΡΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ ΡΠ΅ΡΠ΅Π·
pop() -> Option<T>
.- ΠΠ°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ:
- ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ Π½Π° Π΄ΠΎΠ»Π³ΠΈΠ΅ ΠΏΠ΅ΡΠΈΠΎΠ΄Ρ (ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π· ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π»ΠΎΠΊΠΈ ΠΈΠ»ΠΈ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ).
- ΠΡΠ΄Π°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠ±ΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°.
- ΠΡΡΠΎΠΊΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈ ΠΌΠ°ΡΡΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ .
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ:
- ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Rust (`std::sync`, `std::collections`).
- ΠΠ΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠΎΠ΄Π΅
tokio
, crossbeam
, rayon
ΠΈ Π΄Ρ.- Π‘ΡΡΡΠΊΡΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠΉ (`Generic`), Ρ.Π΅. ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π»ΡΠ±ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ .
---
βͺοΈ ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ:
- ΠΠ»Ρ Π²Π½ΡΡΡΠ΅Π½Π½Π΅Π³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
BinaryHeap
ΠΈΠ· std::collections
.- ΠΠ»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
Arc<Mutex<...>>
.- Π§ΡΠΎΠ±Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΎ:
- Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΊΡΡΠΈ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠ΄ΠΎΠ² (`sharding`),
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠ½ΠΊΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
---
βͺοΈ Π§ΡΠΎ ΠΎΡΠ΅Π½ΠΈΠ²Π°Π΅ΡΡΡ:
- Π£ΠΌΠ΅Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ΠΌ (`ownership`) ΠΈ Π·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (`borrowing`) Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅.
- ΠΠΊΠΊΡΡΠ°ΡΠ½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°ΠΌΠΈ (`Mutex`, `RwLock`).
- ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΠ΄ Π²ΡΡΠΎΠΊΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ (ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ).
- Π§ΠΈΡΡΠΎΡΠ° ΠΈ ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ΄Π°.
- Π‘ΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ (`PoisonError` ΠΏΡΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠ°).
---
βͺοΈ Π Π°Π·Π±ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ:
ΠΠ΄Π΅Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ:
- ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° β
Arc<Mutex<BinaryHeap<...>>>
.- ΠΠ°ΠΆΠ΄ΡΠΉ
push
ΠΈ pop
Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ Π½Π° ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅ Π²ΡΠ΅ΠΌΡ (Π·Π°Ρ
Π²Π°ΡΡΠ²Π°Π΅Ρ Π»ΠΎΠΊ Π½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅).- ΠΡΠΈ
push(value, priority)
:- ΠΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΡΡΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ
Ord
ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π±ΡΠ» Π³Π»Π°Π²Π½ΡΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΠ΅ΠΌ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ.- ΠΡΠΈ
pop()
:- ΠΡΠΎΡΡΠΎ
pop()
ΠΈΠ· BinaryHeap
.- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ:
- ΠΡΠΈ ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΌΡΡΡΠ΅ΠΊΡΠ° (`PoisonError`) Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π²ΡΡΠ΅.
---
βͺοΈ ΠΠΈΠ½ΠΈ-ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ:
use std::collections::BinaryHeap;
use std::sync::{Arc, Mutex};
#[derive(Eq, PartialEq)]
struct Item<T> {
priority: u32,
value: T,
}
impl<T> Ord for Item<T> {
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
other.priority.cmp(&self.priority) // ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄Π»Ρ max-heap
}
}
impl<T> PartialOrd for Item<T> {
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
Some(self.cmp(other))
}
}
pub struct PriorityQueue<T> {
heap: Arc<Mutex<BinaryHeap<Item<T>>>>,
}
impl<T> PriorityQueue<T> {
pub fn new() -> Self {
PriorityQueue {
heap: Arc::new(Mutex::new(BinaryHeap::new())),
}
}
pub fn push(&self, value: T, priority: u32) {
let mut heap = self.heap.lock().unwrap();
heap.push(Item { priority, value });
}
pub fn pop(&self) -> Option<T> {
let mut heap = self.heap.lock().unwrap();
heap.pop().map(|item| item.value)
}
}
---
βͺοΈ ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ:
- β ΠΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ
PoisonError
β Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ ΠΏΠ°Π½ΠΈΠΊΡΠ΅Ρ ΠΏΡΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ΅, Π²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π±ΡΠ΄Π΅Ρ "ΡΠ»ΠΎΠΌΠ°Π½Π°".- β ΠΠΎΠ»Π³Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π²Π½ΡΡΡΠΈ
push
ΠΈΠ»ΠΈ pop
, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΈΡ
ΠΎΠ±ΡΠ΅ΠΌΠ°Ρ
Π΄Π°Π½Π½ΡΡ
.- β ΠΠΎΠ·ΠΌΠΎΠΆΠ½Π°Ρ Π³ΠΎΠ½ΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π²ΡΡΡΠ½ΡΡ ΠΎΠ±ΠΎΠΉΡΠΈ
Mutex
ΡΠ΅ΡΠ΅Π· Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ (`unsafe`).---
βͺοΈ ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ Π½Π° ΡΠΎΠ±Π΅ΡΠ΅Π΄ΠΎΠ²Π°Π½ΠΈΠΈ:
- ΠΠ°ΠΊ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠ°ΠΉΠΌ-Π°ΡΡΠΎΠ² Π½Π°
pop()
(Π΅ΡΠ»ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΡΡΡΠ° β ΠΆΠ΄Π°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ N ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄)?- ΠΠ°ΠΊ Π±Ρ Π²Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ "ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠ΄ΠΎΠ²" Π΄Π»Ρ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ²?
- ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΡΡ Π²Π΅ΡΡΠΈΡ ΡΠ΅ΡΠ΅Π·
Atomic
ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ?---
@rust_code
Please open Telegram to view this post
VIEW IN TELEGRAM
π¦ ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ System76 ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»Π° ΡΠ΅Π΄ΡΠΌΡΡ Π°Π»ΡΡΠ°-Π²Π΅ΡΡΠΈΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ΅Π²ΠΎΠ»ΡΡΠΈΠΎΠ½Π½ΠΎΠΉ DE COSMIC β ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° Rust Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ GNOME. ΠΠΎΠ²ΡΠΉ Π²ΡΠΏΡΡΠΊ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»Π΅Π½ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ Wayland-ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΎΡΠΎΠΌ, Π½ΠΎ ΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠ΅ΠΆΠΈΠΌΠ°ΠΌΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠΊΠ½Π°ΠΌΠΈ: Π³ΠΈΠ±ΡΠΈΠ΄Π½ΠΎΠΉ ΠΌΠΎΠ·Π°ΠΈΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΎΠΉ ΠΈ Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΠΌ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΠΊΠ»Π°Π΄ΠΎΠΊ.
Π‘ΡΠ΅Π΄ΠΈ ΡΠ²Π΅ΠΆΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ β ΡΠ»ΡΡΡΠ΅Π½Π½Π°Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΡΡΠΎΠ»Π°ΠΌΠΈ, ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ XWayland ΠΈ ΡΠΎΠ½ΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π²ΡΠΊΠ°. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡ ΠΎΡΡΠ°ΡΡΡΡ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠΌ: ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ Fedora, Arch, NixOS ΠΈ Π΄Π°ΠΆΠ΅ Π½ΠΈΡΠ΅Π²ΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ² Π²ΡΠΎΠ΄Π΅ Redox.
π Π‘ΡΡΠ»ΠΊΠ° - *ΠΊΠ»ΠΈΠΊ*
@rust_code
Π‘ΡΠ΅Π΄ΠΈ ΡΠ²Π΅ΠΆΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ β ΡΠ»ΡΡΡΠ΅Π½Π½Π°Ρ Π½Π°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΡΡΠΎΠ»Π°ΠΌΠΈ, ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ XWayland ΠΈ ΡΠΎΠ½ΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π²ΡΠΊΠ°. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡ ΠΎΡΡΠ°ΡΡΡΡ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠΌ: ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠΆΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ Fedora, Arch, NixOS ΠΈ Π΄Π°ΠΆΠ΅ Π½ΠΈΡΠ΅Π²ΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ² Π²ΡΠΎΠ΄Π΅ Redox.
π Π‘ΡΡΠ»ΠΊΠ° - *ΠΊΠ»ΠΈΠΊ*
@rust_code
HTML Embed Code: