TG Telegram Group Link
Channel: Rust
Back to Bottom
🦀 Задача на Rust: "Найди пропавшее число"

Условие
У тебя есть Vec<String>, в котором находятся строки от "1" до "100", но одно число отсутствует.
Найди его без использования sort, HashMap, iter().sum() и т. д.
Можно использовать parse::<u32>().

Формат функции:


fn find_missing_number(data: &Vec<String>) -> u32


Решение через XOR:


fn find_missing_number(data: &Vec<String>) -> u32 {
let mut xor_full = 0;
let mut xor_data = 0;

for i in 1..=100 {
xor_full ^= i;
}

for s in data {
if let Ok(n) = s.parse::<u32>() {
xor_data ^= n;
}
}

xor_full ^ xor_data
}


Пример использования:


fn main() {
let mut data: Vec<String> = (1..=100)
.filter(|&x| x != 42)
.map(|x| x.to_string())
.collect();

use rand::seq::SliceRandom;
let mut rng = rand::thread_rng();
data.shuffle(&mut rng);

let missing = find_missing_number(&data);
println!("Пропущено: {}", missing); // Ожидается 42
}


Зависимости в `Cargo.toml`:


[dependencies]
rand = "0.8"


Объяснение:
XOR всех чисел от 1 до 100 ⊕ XOR из входных данных → пропущенное число.
Работает, потому что a ^ a = 0, 0 ^ b = b.
⚡️Почему Rust — один из самых любимых языков среди разработчиков? Почему он всё чаще выбирается вместо C++ и других языков для разработки высокопроизводительных приложений?

На открытом вебинаре 22 мая в 20:00 мск мы расскажем, почему Rust привлекает так много разработчиков по всему миру. Вы узнаете, какие проблемы решает этот язык, почему его производительность и безопасность привлекают специалистов, а также как Rust занимает свою нишу в программировании.

Если вы хотите перейти на Rust или улучшить свои навыки, вы получите ответы на все вопросы. Мы обсудим его ключевые особенности, нововведения и возможности для использования в реальных проектах.

👉Запишитесь на открытый урок и получите скидку на большое обучение «Rust Developer. Basic»: https://otus.pw/GPhS/

Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ", ИНН: 9705100963
🦀 Как упростить изучение Rust: советы от Corrode

Rust — мощный и надёжный язык, но его обучение часто вызывает трудности даже у опытных разработчиков. В свежем блоге [Corrode Rust Consulting](https://corrode.dev/blog/flattening-rusts-learning-curve/) делятся рекомендациями, как сгладить кривую обучения Rust без боли и выгорания.

🔑 Основные советы:

- Примите особенности языка
Не сопротивляйтесь системам владения и заимствования — воспринимайте их как инструменты безопасности, а не ограничения.

- Начинайте с "грязных" решений
Используйте clone(), unwrap(), expect() на старте — позже замените на идиоматичный и безопасный код.

- Учитесь постепенно
Разбивайте обучение на этапы, пишите много маленьких программ в [Rust Playground](https://play.rust-lang.org/).

- Читайте ошибки компилятора вдумчиво
В Rust компилятор — это не враг, а учитель. Он подсказывает, как мыслить «по-растовски».

- Пишите вручную, не полагайтесь на IDE
Автокомплит мешает усвоению синтаксиса — набирайте код вручную, чтобы лучше понять структуру.

- Проектируйте через типы
Rust даёт мощную систему типов — используйте её как инструмент проектирования, а не просто проверки.

📖 Полный текст: https://corrode.dev/blog/flattening-rusts-learning-curve/

Хороший Rust-разработчик — не тот, кто никогда не ошибается, а тот, кто умеет читать сообщения компилятора и не сдаваться.
This media is not supported in your browser
VIEW IN TELEGRAM
RustScan – Инструмент для быстрого сканирования портов

Данный проект может похвастаться высокой скоростью работы(Сканирует все 65 тыс. портов за 3 секунды), гибкой расширяемостью и адаптивным методом работы.

https://github.com/bee-san/RustScan
🦀 Rust и магия динамики: как создать Python‑подобный API с помощью Serde

В новой статье *Ohad Dravid* демонстрирует, как в языке Rust можно добиться удобства динамического доступа к данным — в духе Python — но без потери строгой типизации и производительности. Всё это — с помощью мощной библиотеки serde.

📌 Статья: *“A Rust API Inspired by Python, Powered by Serde”*
🔗 [ohadravid.github.io/posts/2025-05-serde-reflect](https://ohadravid.github.io/posts/2025-05-serde-reflect/)

🔍 Проблема

Python позволяет обращаться к произвольным полям объектов, например при работе с WMI:


for fan in c.Win32_Fan():
print(fan.Name, fan.DesiredSpeed)


А вот Rust требует ручной работы: если вы хотите получить поле объекта по имени — нужно писать get_attr, делать match, проверять типы и всё это каждый раз.

🙄 Это:
- многословно,
- подвержено ошибкам,
- неудобно для пользователя API.

🎯 Цель

Сделать API на Rust, который позволял бы:

1. Писать простой, декларативный код
2. Избегать ручной сериализации и проверки типов
3. Получать строго типизированные структуры из «сырых» данных

И всё это — без хаков и макросов, а с помощью serde и аккуратной архитектуры.

⚙️ Как это реализовано

Охад реализует три версии API:

🛠 1. raw_api.rs — примитивный уровень


pub enum Value { Bool(bool), I1(i8), UI8(u64), String(String), Object(Object) }

impl Object {
pub fn get_attr(&self, name: &str) -> Value { /* ... */ }
}


Каждый вызов требует ручного match, приведения типов, извлечения значений.

2. v1_api.rs — пользователь сам описывает структуру + ручная десериализация

Пользователь описывает struct, и сам реализует для него трейт, чтобы распаковать поля.

🚀 3. v2_api.rs — Serde‑магию включено

Теперь query() возвращает Vec<T>:


#[derive(Debug, Deserialize)]
#[serde(rename_all = "PascalCase")]
pub struct Fan {
name: String,
active_cooling: bool,
desired_speed: u64,
}

let res: Vec<Fan> = query();
for fan in res {
if fan.active_cooling {
println!("Fan `{}` is running at {} RPM", fan.name, fan.desired_speed);
}
}


Теперь:
- никакой ручной сериализации
- никаких match
- всё строго типизировано и работает с минимальными затратами

🧠 Как это работает под капотом

Проект использует:

serde::Deserialize
• внутренний модуль meta.rs, который:
- извлекает названия полей и их типы
- генерирует SQL‑подобный запрос под структуру
- использует эти поля для сопоставления данных

API получается универсальным: любую структуру, которая реализует Deserialize, можно использовать как результат запроса.

📈 Почему это важно

Приближает Rust к удобству Python, сохраняя безопасность
Минимизирует дублирование кода
Даёт мощный, типобезопасный интерфейс над динамическими структурами
Применимо к WMI, COM, JSON API, SQL‑слоям и множеству других задач

🔭 Возможности расширения

- Генерация запросов по структурам (`SELECT ... FROM ... WHERE ...`)
- Интеграция с внешними API (WMI, COM)
- Расширение в сторону serde-reflection для полного introspection
- Создание DSL поверх API для ещё более лаконичного запроса данных

📚 Заключение

Rust и serde — это не только про производительность и безопасность, но и про удобный API, если правильно подойти к задаче. Этот проект показывает, как можно сделать гибкий, декларативный, типобезопасный интерфейс для работы с данными — без костылей и магии рантайма.

Если ты когда-либо хотел писать на Rust как на Python — но без ущерба для надёжности — это один из лучших паттернов, который стоит изучить.

🔗 Читай подробнее: [ohadravid.github.io/posts/2025-05-serde-reflect](https://ohadravid.github.io/posts/2025-05-serde-reflect/)\
⚡️ Pydantic Core — Rust-ядро для валидации данных в Python. Этот низкоуровневый валидатор демонстрирует впечатляющую скорость: до 17x быстрее оригинальной реализации на чистом Python.

Хотя напрямую с ним обычно не работают (используя вместо этого основной пакет pydantic), проект интересен как пример интеграции Rust в Python-экосистему. Валидация описывается через JSON-схемы, поддерживая сложные условия вроде ge: 18 для чисел или вложенных структур. Сборка требует Rust toolchain, но результат стоит того: например, валидация списка из 10к элементов занимает миллисекунды.

🤖 GitHub
🦀 Rust понижает поддержку 32-битной сборки для Windows (i686-pc-windows-gnu)

26 мая 2025 года команда Rust официально объявила: начиная с версии Rust 1.88.0, цель i686-pc-windows-gnu (32-битная сборка под Windows с GNU toolchain) больше не будет Tier 1. Её статус понижен до Tier 2 с поддержкой хост-инструментов.

🔧 Что изменится:
• Бинарники и стандартная библиотека по-прежнему будут доступны через rustup
• Однако автоматическое тестирование на CI сокращается
• Возможны баги и сниженная стабильность без гарантий быстрой починки

📉 Почему так:
• Нет активных мейнтейнеров для *-windows-gnu целей
• Сложно отлаживать ошибки без специалистов
• 32-битная сборка почти не используется в сравнении с x86_64-pc-windows-gnu

📌 Что дальше:
Если ситуация не изменится, возможен полный отказ от поддержки этой цели. Сообщество Rust призывает желающих подключиться к поддержке *-windows-gnu.

📖 Подробнее:
https://rust-lang.github.io/rfcs/3771-demote-i686-pc-windows-gnu.html

@rust_code
🦀 Победа для всего Rust-сообщества: состоялся релиз Linux 6.15 — и он действительно важный

Новый релиз ядра Linux 6.15 — не просто очередное обновление. Это первая версия, где Rust-код стал частью реального продакшн-функционала ядра, а не просто экспериментом.

🔥 Что нового:
• Поддержка Rust в драйверах и подсистемах (в том числе networking)
• Начало перехода некоторых компонентов с C на memory-safe Rust
• Улучшена совместимость с архитектурами RISC-V и ARM
• Обновления в системах безопасности, файловых системах и планировщике задач

💬 Линус Торвальдс уже заявил, что Rust — это будущее для многих чувствительных компонентов ядра, особенно в мире, где безопасность становится ключевым фактором.

📌 Rust в ядре — это не просто «новый язык». Это переход к более безопасной, надёжной и современной экосистеме Linux.

🔗 Подробнее:
https://www.zdnet.com/article/the-linux-6-15-kernel-arrives-and-its-big-a-victory-for-rust-fans/

@rust_code
🔥 From C# to Rust: 42-дневный челлендж от Chris Woody Woodruff

Chris Woodruff, экспериментающий .NET-разработчик, объявил старт своего 42-дневного пути погружения в Rust — язык системного программирования, совмещающий производительность, безопасность и отсутствие null:contentReference[oaicite:0]{index=0}.

🎯 Цели проекта
- Жить и дышать Rust — по одному уроку в день.
- Противостоять строгому borrow checker.
- Осознанно учиться и делиться выводами от лица C#-разработчика.

🛠 Что ожидается изучить
- Владение памятью, шаблоны, трейты, времена жизни (`lifetimes`).
- Яркие сравнения Rust и C#: синтаксис, ownership vs GC, ошибки компилятора:contentReference[oaicite:2]{index=2}.
- Краткие ежедневные отражения из .NET-мира.

📅 Примерный план на 42 дня
1. День 1–7: Почему Rust? Установка, cargo new vs dotnet new, "Hello, World!", переменные, функции:contentReference[oaicite:4]{index=4}.
2. День 8–14: Неделя владения — темы: ownership, borrowing, borrow checker:contentReference[oaicite:5]{index=5}.
3. День 15–42: Структуры, перечисления (`enum`), match, Option<T>, Result<T, E>, модули, ошибки, трейты, дженерики, лямбды и многое другое.

💬 Голос из сообщества
> «What happens when a C# dev swaps null for Option, garbage collection for ownership… You get 42 days of brain‑bending, compiler‑fighting…»

Подытожим
- Проект идёт с апреля 2025 года, уже опубликованы десятки дневных эссе.
- Каждая запись по мотивам реального опыта: «why won’t this compile?!», сравнения с привычным C#.
- В финале — обзор полученного опыта, личные инсайты и примеры рабочего CLI‑приложения на Rust:contentReference[oaicite:8]{index=8}.

🚀 Готовы бросить вызов себе и глубже понять Rust?

Следите за дневником Woody и за входом в мир безопасных без‑GC систем прямо с .NET-опытов!

🔗 Подробнее: From C# to Rust: A 42-Day Developer Challenge

https://woodruff.dev/from-c-to-rust-a-42-day-developer-challenge/
🎯 Задача на владение (ownership) и ссылки в Rust

Напиши функцию longest_word<'a>(a: &'a str, b: &'a str) -> &'a str,
которая возвращает слово с наибольшей длиной из двух строк.

Но есть ограничение: ты не можешь копировать строки — только возвращать ссылку.

📌 Пример:


fn main() {
let s1 = String::from("pirate");
let s2 = String::from("gold");

let result = longest_word(&s1, &s2);
println!("Longest: {}", result); // 👉 "pirate"
}


🔍 Подсказка:

- Тебе нужно указать время жизни `'a` для всех аргументов и возвращаемого значения.
- Если ты не укажешь
'a, компилятор не поймёт, какая ссылка может жить дольше.
- Возвращать
String нельзя — только &str (ссылка на строку).

🚫 Нельзя:

return a.to_string(); // копирование строки


Можно:

return a; // ссылка

@rust_code
Forwarded from Machinelearning
⚡️ Илон Маск придумал телеграм анонсировал новый XChat.

Новый XChat теперь доступен с шифрованием, самоуничтожением сообщений, возможностью отправки любых типов файлов и поддержкой аудио- и видеозвонков.

Приложение создано на Rust и использует шифрование (как в Биткойн) и новую архитектуру.

А еще можно звонить без номера телефона.

@ai_machinelearning_big_data


#elonmusk #ai #news #ml #grok
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
PurrCrypt — шифратор на Rust, который маскирует серьёзную криптографию под мурлыканье котиков.

Под забавным интерфейсом — настоящая эллиптическая криптография, как у биткоина.
И да, есть режим с собаками 🐶.

https://github.com/vxfemboy/purrcrypt
🦊 Chain-Fox — кроссплатформенный блокчейн-кошелёк с открытым исходным кодом

Chain-Fox — это лёгкий, но функциональный десктопный кошелёк для работы с блокчейнами, разработанный на Rust с использованием Tauri и React. Проект ориентирован на безопасность, прозрачность и максимальную простоту.

🔐 Ключевые возможности:
• Работа без необходимости запускать узел (light wallet)
• Поддержка нескольких кошельков и аккаунтов
• Отображение баланса и истории транзакций
• Генерация новых адресов и экспорт ключей
• Кроссплатформенность: работает на Windows, macOS и Linux

🛠️ Стек технологий:
- Ядро написано на Rust
- Интерфейс — на React + Tauri
- Криптография через secp256k1
- Хранение данных — sled

💡 Отлично подходит для:
- Изучения разработки блокчейн-кошельков
- Создания кастомных криптографических интерфейсов
- Прототипирования криптосервисов на основе Tauri

👉 https://github.com/Chain-Fox/Chain-Fox

Открытый код — разбирай, форкай, дорабатывай. Это хороший пример, как Rust + React дают мощный и лёгкий кошелёк.

@rust_code
💎 Quadratic — электронные таблицы нового поколения с кодом и ИИ. Проект предоставляет гибридную среду, где формулы, Python и SQL работают бок о бок, позволяя анализировать миллионы строк прямо в браузере без потерь производительности.

Особенность инструмента — технологичный стек (Rust, WebAssembly, WebGL). Интерфейс с поддержкой 60 FPS и масштабированием как в Figma делает работу с большими данными неожиданно плавной.

🤖 GitHub

@pythonl
Senior Rust Developer в BlockSniper
Удалёнка | full-time | 400–700K ₽ + премии
Мы лидеры в снайпинге токенов на Solana. Пишем трейдинг-ботов и высокоскоростные стратегии. Уже 4 года в деле, 50 человек в команде, работаем без бюрократии — только результат. Премии от прибыли: топы получают +300K к зп.

💻 Что важно:
— Опыт в Rust от 3 лет и обязательно Solana (Anchor, CLI, деплой)
— Понимание RPC/DApps/PoS
— Опыт с HFT, трейдингом или ботами будет преимуществом

🧩 Ищем тех, кто не боится челленджей:
у нас нужно разбираться, предлагать, выстраивать. Самостоятельность — must-have. Взамен даём максимум свободы, зп и роста.

🎁 Можете быть уверены в:
— Конкурентной зп + доход от прибыли команды
— Полной удаленке, оплачиваемом отпуске и больничном
— Том, что мы вкладываемся в рост: обсуждаем бенефиты, помогаем развиваться

Напиши нашему HR Маргарите 👉 @m_dereviakina, если ищешь место, где можно развиваться, расти и хорошо зарабатывать.
This media is not supported in your browser
VIEW IN TELEGRAM
Athena Crisis — это современная реализация тактической стратегии в духе Advance Wars с использованием движка Bevy.

Особенности:

* Сражения в стиле пошаговой стратегии
* Кампания с диалогами и кат-сценами
* Пользовательские карты и редактор уровней
* ИИ-противники
* Полностью кроссплатформенный: работает в браузере, на ПК и мобильных устройствах
* Сохраняемые игры

Проект в активной разработке. Вы можете попробовать демо прямо сейчас в браузере: Играть в демо

https://github.com/nkzw-tech/athena-crisis

@rust_code
Forwarded from Python/ django
🖥 Вышел Git 2.50

Вот основные обновления:
1. Новый уровень работы с cruft packs
- Git хранит неиспользуемые (невидимые) объекты в специальных “cruft packs”.
- Раньше управлять ими было сложно: чтобы добавить или объединить объекты, нужно было всё перепаковывать, что занимало много времени и места.
- Теперь появился флаг --combine-cruft-below-size: можно легко объединять мелкие cruft packs в один, постепенно “чистить” репозиторий.
- Исправлена важная ошибка: раньше такие объекты могли случайно удаляться раньше времени — теперь это под контролем.

2. Быстрее для больших репозиториев — многослойные битмапы
- В больших проектах Git создаёт специальные “карты” (bitmaps), чтобы быстро понимать, какие объекты нужны для определённых коммитов.
- Новая версия поддерживает “инкрементальные” битмапы для multi-pack index — можно добавлять новые данные быстро, не пересоздавая всю структуру.

3. Новый движок слияния ORT
- Старый движок recursive полностью удалён: теперь слияния (`merge`) обрабатывает только быстрый и надёжный ORT.
- Это упростит разработку, повысит скорость merge и уменьшит количество ошибок.

4. Улучшения в утилитах и команде cat-file
- Теперь можно фильтровать объекты по типу, например, быстро получить только “деревья” (tree) с помощью --filter='object:type=tree'.
- Команда для удаления reflog стала интуитивной: вместо сложных параметров просто пишем git reflog delete <branch>.

5. Больше контроля над сетевыми соединениями
- Добавлены настройки для TCP Keepalive, теперь можно гибко управлять поведением Git в нестабильных сетях.

6. Меньше Perl — проще тестировать и собирать
- Git ещё больше избавился от зависимостей на Perl: тесты и документация теперь проще и стабильнее, особенно на системах без Perl.

7. Работа с разреженными (sparse) репозиториями стала удобнее
- Команды вроде git add -p теперь не требуют полной загрузки содержимого — удобно при работе с огромными проектами.

8. Косметические улучшения
- При ребейзе (rebase -i) названия коммитов теперь оформляются как комментарии — так ясно, что это просто для ориентира.

9. Быстрее клонируем через bundle-uri
- Git стал лучше справляться с ускоренным клонированием через *.bundle: теперь клиент правильно учитывает все ссылки, ускоряя загрузку репозитория.

Git 2.50 — это не просто исправление багов, а реальное ускорение и упрощение работы для всех, кто ведёт большие проекты, часто сливает ветки и заботится о “чистоте” репозитория. Новые команды делают жизнь проще, а старые баги — ушли в прошлое.

➡️ Почитать про все обновления

@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
🎮 PartyDeck‑RS — мультиплеерный лаунчер с разделённым экраном для Linux/SteamOS

partydeck‑rs — это лаунчер, написанный на Rust, который позволяет запускать до 4 копий одной игры одновременно — с автопозиционированием окон, разграничением контроллеров и сохранений.

🚀 Основные возможности

- Запуск до 4 экземпляров игры с автоматическим размещением окон на одном экране
- Поддержка как Linux-игр, так и Windows-версий через Proton
- Эмуляция Steam Multiplayer API для запуска нескольких копий локально
- Контроллеры без конфликтов — каждый экземпляр видит только свой контроллер благодаря bubblewrap
- Профили игроков: отдельные сохранения и настройки
- Поддерживает SteamOS (без дополнительной настройки)

🛠 Установка и использование

1. Скачать [релиз](#) (например, `partydeck-rs-0.3.2`) и распаковать.
2. На SteamOS (версия 3.7+): запустить partydeck-rs или добавить PartyDeckKWinLaunch.sh как non‑Steam игру — и отключить Steam Input в настройках
3. На Desktop Linux с KDE Plasma:
- Убедиться, что установлены Gamescope и bubblewrap
- Запустить partydeck-rs из терминала

При первом запуске автоматически скачиваются UMU Launcher и Goldberg Steam Emu

📦 Последние версии

- v0.3.2 "Laying Low" (3 июня 2025):
- Исправлено создание папки AppData/LocalLow для Proton-игр
- Встроен новый handler для Luma Island
- v0.3.1 "Dual‑Sensed" (2 июня 2025):
- Улучшена поддержка PS4/PS5 контроллеров через ProtonGE {index=6}
- v0.3.0 "Steamed Hams" (2 июня 2025):
- Автоматический поиск Steam-установок
- Проверка обновлений и начало работы над автообновлением
- Обновлён формат handler’ов (имена полей Steam API)
- Включён шаблон handler’а для упрощённого создания

⚠️ Ограничения и планы

- Не поддерживает AppImage/Flatpak — только исполняемые файлы
- Пока работает только на одном экране; мульти‑монитор и мышь/клавиатура — в планах- UI простое, без прогресс‑баров — заморозка интерфейса возможна
- Желание улучшить контроллер‑ориентированный UI, но пока нет планов

📚 Архитектура

Используются:

- KWin-session для управления окнами
- Gamescope для каждого экземпляра и обработки контроллеров
- Bubblewrap — разграничение устройств и директорий
- Steam Runhottg.com/Proton — для совместимости Windows-игр
- Goldberg Steam Emu — для эмуляции Steam‑сети в мультиплеере
💡 Зачем это нужно

Это удобное решение для локального кооператива на ПК, особенно на одном экране. Игры, изначально не поддерживающие split-screen, теперь можно запускать вместе с друзьями.

https://github.com/wunnr/partydeck-rs
🦀 Новый SQL-клиент на Rust — rsql
Лёгкий, быстрый и мощный инструмент для работы с файлами и базами данных из терминала.

📌 Что умеет

● Поддержка множества форматов: CSV, JSON, Parquet, Excel, XML, YAML, Avro и др.
● Подключение к SQLite, PostgreSQL, MySQL, SQL Server, DuckDB, Snowflake, CrateDB и даже DynamoDB
● Работа с архивами: Gzip, Zstd, Brotli, LZ4, Bzip2 и др.
● Удобная CLI: автодополнение, подсветка, история, интерактивный REPL
● Вывод в разных форматах: Markdown, HTML, JSON, CSV, plaintext
● 100 % безопасный Rust-код — #![forbid(unsafe_code)]
● Кастомизация: Vi/Emacs режимы, локализации, собственные темы вывода

📥 Установка

curl -LsSf https://raw.githubusercontent.com/theseus-rs/rsql/main/install.sh | sh


🧪 Пример использования

# Одноразовый запрос к SQLite
rsql --url "sqlite://file.db" -- "SELECT * FROM users LIMIT 5;"

# Интерактивная сессия с PostgreSQL
rsql --url "postgres://user:pass@localhost/db"


🆕 Что нового в v0.19.0

Добавлены драйверы CrateDB и FlightSQL

Появился metadata-catalog для удобной навигации по источникам данных

Улучшены примеры, обновлены зависимости, повышена стабильность

🔗 GitHub: https://github.com/theseus-rs/rsql

rsql — универсальный инструмент, который понравится аналитикам, разработчикам и data-инженерам, нуждающимся в максимально быстром и простом SQL-клиенте.

@sqlhub
🦀 Rust-задача: неожиданный вывод из-за владения и `for`


fn main() {
let data = vec!["rust", "go", "zig"];

for item in data {
println!("{item}");
}

println!("{:?}", data);
}


Что произойдёт при компиляции и запуске?

• a) Выведет rust, go, zig, затем ["rust", "go", "zig"]
• b) Ошибка компиляции: data уже перемещён
• c) Всё выведет корректно, потому что &str копируются
• d) Программа скомпилируется, но упадёт во время выполнения

💡 Разбор

for item in data в Rust перемещает `data`, потому что Vec<T> по умолчанию потребляется в IntoIterator. Это значит, что после цикла data больше не принадлежит функции main.

Попытка использовать data в println! после этого приведёт к ошибке компиляции: value borrowed after move.

**Правильный ответ: b) Ошибка компиляции: `data` уже перемещён**

🧠 **Вывод:** в Rust `for item in collection` по умолчанию вызывает `.into_iter()`, а не `.iter()`, и это **может забрать владение** коллекцией.

🔧 **Как избежать:**

Если нужно сохранить `data`, итерация должна быть по ссылке:


for item in &data {
println!("{item}");
}

println!("{:?}", data);


Теперь `data` не перемещается, и всё работает корректно.
HTML Embed Code:
2025/06/30 17:14:13
Back to Top