TG Telegram Group Link
Channel: Rust
Back to Bottom
πŸš€ 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
This media is not supported in your browser
VIEW IN TELEGRAM
πŸ–₯ Simon β€” лСгковСсный Π²Π΅Π±-ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ для систСм с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Docker ΠΈ отслСТиваниСм рСсурсов.

ОсновноС: ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ 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
πŸ’₯ 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, асинхронная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°) ΠΈ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, сортировки ΠΈ экспорта Π΄Π°Π½Π½Ρ‹Ρ….

Установка:
cargo install urx

πŸ”— Github

@rust_code

#security #bugbounty
🎢 Glicol β€” это ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ срСда для live-ΠΊΠΎΠ΄ΠΈΠ½Π³Π°, Π³Π΄Π΅ Π·Π²ΡƒΠΊΠΈ Ρ€ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΈΠ· соСдинСния ΡƒΠ·Π»ΠΎΠ², ΠΊΠ°ΠΊ Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΌ синтСзаторС.

Написанный Π½Π° 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, Π½ΠΎ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‰ΡƒΠΏΠ°Ρ‚ΡŒ πŸš€
πŸ‘£ garde β€” это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Rust πŸ¦€, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, Ρ‡Ρ‚ΠΎ структура ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, "email Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π½Ρ‹ΠΌ", "возраст большС 18", "строка Π½Π΅ пустая" ΠΈ Ρ‚.Π΄.).

🧠 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
πŸ–₯ Python Π½Π° скорости Rust

Новый 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 A
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 ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ€Π°Π·ΠΌΠ΅Ρ€, удобство сопровоТдСния, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ вашСго ΠΊΠΎΠ΄Π°.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ нСсколько Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²Π°ΠΌ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅: https://betterprogramming.pub/compile-time-feature-flags-in-rust-why-how-when-129aada7d1b3

#rust

@rust_code
πŸ” Вопрос: Ρ‡Ρ‚ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ этот ΠΊΠΎΠ΄ Π½Π° Rust?

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

Π£ вас Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» /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 β€” для ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Ρ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²


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

πŸ“Œ
ΠžΡ‚Π²Π΅Ρ‚:
ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚: 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
πŸ‘£ Tessa-Rust-T1-7B-Q8_0-GGUF β€” компактная 8-битная вСрсия Rust-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Tessa-Rust-T1 Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ GGUF для llama.cpp.

Π‘ΠΎΠ·Π΄Π°Π½Π° для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ автодополнСния ΠΊΠΎΠ΄Π° Π½Π° 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
πŸ‘£ Π—Π°Π΄Π°Ρ‡Π°: "БСзопасная многопоточная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ Π² Rust"

πŸ“Œ УсловиС:

Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ структуру Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π°ΠΌΠΈ (`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
HTML Embed Code:
2025/06/29 18:33:04
Back to Top