Rust Portal
1.83K subscribers
28 photos
4 videos
28 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Rust-разработчика

Связь: @stepikm
Download Telegram
Наткнулся на топовый видос про создание чата на Rust

В первой части показывают, как собрать многопользовательский TCP-сервер: неблокирующий ввод-вывод, потокобезопасная трансляция сообщений и эффективная обработка клиентов с использованием потоков

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

Всё максимально чётко и понятно, смотреть одно удовольствие.

👉 Код можно глянуть тут: https://github.com/dexter-xD/rust-chat-app

@RustPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥7❤‍🔥31
Реализация механизма обратного давления (Backpressure) в Rust для асинхронных систем 🦀

В асинхронных системах механизм обратного давления обеспечивает, чтобы производители данных не перегружали потребителей. Асинхронная экосистема Rust предоставляет инструменты для эффективного управления этим процессом.

Что такое обратное давление?
— Обратное давление — это механизм замедления производства данных, когда потребитель не успевает обрабатывать их с той же скоростью. В Rust это критически важно для поддержания производительности и предотвращения перегрузки асинхронных задач.

1️⃣Использование ограниченных каналов
— Ограниченные каналы из библиотек tokio или async-std ограничивают количество элементов в очереди, применяя обратное давление, когда лимит достигается.
— Производитель останавливается, если канал переполнен, и остается в этом состоянии до тех пор, пока потребитель не начнет обрабатывать данные.

2️⃣ Обратное давление с потоками
— Обратное давление критично для потоков данных, чтобы контролировать соотношение между производимыми и потребляемыми данными.
— ReceiverStream интегрируется с ограниченными каналами, чтобы естественным образом обрабатывать обратное давление.

3️⃣Пользовательское обратное давление с Future
— Вы можете создать пользовательские механизмы обратного давления, управляя выполнением задач напрямую.


Основные выводы:
🔸Используйте ограниченные каналы для автоматического применения обратного давления.
🔸Сочетайте потоки с ограниченными очередями для реактивных систем.
🔸Пишите собственную логику для более точного контроля синхронизации задач.

@RustPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍64🫡3
Этот совет вам понравится: когда-нибудь пробовали сравнивать два варианта перечисления (enum)?

Обычно для этого требуется каскад операторов match.

Однако, в такой ситуации можно использовать mem::discriminant. Это особенно полезно, когда перечисление (enum) не реализует (не имеет) трейт Eq.

@RustPortal
👍414🔥3
Forwarded from IT Portal
Rust исполнилось 10 лет 👌

Стабильный релиз 1.0 вышел 15 мая 2015 года. До этого шесть лет под крылом Mozilla, тестили на Servo — браузерном движке, который делали вместе с Samsung.

В 2020 Mozilla передала Servo в Linux Foundation и распустила команду. Rust выжил

В 2021 запустили Rust Foundation — Amazon, Google, Huawei, Microsoft и всё та же Mozilla в составе

Сейчас Rust уже в ядре Linux — на нём пилят драйвера

@IT_Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
45👍17🔥16
Сегодня узнал про атрибут #[cold] — его используют для функций, которые вызываются редко. Это помогает компилятору оптимизировать производительность кэша инструкций, сосредотачивая внимание на «горячих» функциях.

Атрибут #[cold] также можно применять к вариантам enum'ов, чтобы улучшить размещение в памяти.

@RustPortal
43👍20🔥73🕊3
В Rust 2024 edition можно использовать цепочку if let Some(). Наконец-то!

@RustPortal
35👍12👏4😁2👌1💯1
Глубокое погружение во взаимодействие памяти между Rust и C

Детальное исследование того, что происходит при конфликте аллокаторов памяти Rust и C, с разбором причин сбоев

Годное чтиво под горячий кофе

https://notashes.me/blog/part-1-memory-management/

@RustPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
24👍5🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
100 упражнений по Rust прямо в RustRover

Теперь весь курс Луки Пальмери, который помог тысячам разработчиков освоить язык, встроен прямо в IDE от JetBrains

Как это работает: короткий кусочек теории → сразу практическое задание. Всего 100 упражнений, от базовых конструкций (if, match, циклы) до трейтов, управления памятью, структур данных и конкурентности. В процессе вы собираете рабочую мини-систему управления проектами

RustRover полностью бесплатен для обучения, так что можно просто поставить и начать.

Тут подробнее: тык

@RustPortal
👍24🤮6👀42
Лучшие практики конструкторов в Rust

Шаблоны конструкторов, которыми должен владеть каждый уважающий себя растовик, чтобы не выглядеть новичком

https://blog.cuongle.dev/p/constructor-best-practices-in-rust

@RustPortal
19👍2
Rust станет обязательной частью Git 3.0. «В Git 3.0 без Rust ничего работать не будет, потому что он будет обязательным», — говорит разработчик Git Брайан Карлсон.

«Без Rust [сборка Git 3.0] просто упадёт и скажет, что это не поддерживается».

До настоящего времени Git в основном разрабатывался на C.

@RustPortal
👍35🔥115🌚3👎2
Ларс Бергстром (Google) объявил об инвестициях в Rust в размере $350k:

• $250k — в Rust Foundation на интероперабельность языка
• $100k — в инфраструктуру Crater

По его словам, Rust помог снизить число уязвимостей в Android. Приятно видеть продолжение корпоративных инвестиций

@RustPortal
🔥367😍2👌1
Rust 1.90.0 вышел

Основные изменения:


LLD по умолчанию на x86_64-unknown-linux-gnu
Заметное ускорение линковки, особенно для больших проектов и incremental builds. Откат через -C linker-features=-lld.

cargo publish --workspace
Публикация всех crates в workspace одной командой с правильным порядком зависимостей.

x86_64-apple-darwin → Tier 2
Понижение из-за прекращения GitHub macOS x86_64 runners и планов Apple. Билды пока доступны через rustup.

Стабилизированные API:
u{n}::checked_sub_signed, wrapping_sub_signed, saturating_sub_signed, overflowing_sub_signed
Copy и Hash для IntErrorKind
• const контекст: <[T]>::reverse(), математические функции для float
PartialEq между CStr/CString/Cow<CStr>

Изменения совместимости:
• Tier 3 musl targets линкуются динамически по умолчанию
• Небазовые extern "{abi}" формы теперь последовательно отвергаются

https://blog.rust-lang.org/2025/09/18/Rust-1.90.0
👍15❤‍🔥64
⚡️ Borrow Checker: друг, а не враг!

Многие новички в Rust сталкиваются с ошибками от borrow checker и думают, что язык «слишком строгий». На самом деле — это главный защитник вашего кода от утечек памяти и гонок данных. 🦀

🔑 Основные правила:

В любой момент у переменной может быть либо несколько неизменяемых ссылок, либо одна изменяемая.

Ссылка не может жить дольше, чем её владелец (owner).

Все проверки выполняются на этапе компиляции, поэтому ошибки ловятся ещё до запуска программы.

📌 Пример:

Правильно
let mut s = String::from("Hello");
let r1 = &s;
let r2 = &s;
println!("{}, {}", r1, r2); // работает


Неправильно
let mut s = String::from("Hello");
let r1 = &s;
let r2 = &s;
let r3 = &mut s; // ошибка: mutable borrow при активных immutable
println!("{}", r1);


💡 Зачем это нужно?

🔒 Rust предотвращает data race на уровне компилятора.

🛡 Исключает dangling references и утечки памяти.

⚡️ Позволяет писать эффективный и безопасный код без сборщика мусора (GC).
34👍1
# docs․rs: изменение целевых платформ по умолчанию

Сервис документации docs․rs обновил список платформ, для которых по умолчанию собирается документация Rust-библиотек.

Основные изменения:

macOS: aarch64-apple-darwin (Apple Silicon) заменил x86_64-apple-darwin (Intel). Это отражает переход Apple на собственные ARM-процессоры и изменение статуса платформ: ARM теперь Tier 1, x86_64 понижен до Tier 2.

Linux: aarch64-unknown-linux-gnu (ARM64) заменил i686-unknown-linux-gnu (32-bit). Крупные дистрибутивы Linux прекращают поддержку 32-битных систем.

Полный список платформ по умолчанию:
- x86_64-unknown-linux-gnu
- aarch64-apple-darwin
- x86_64-pc-windows-msvc
- aarch64-unknown-linux-gnu
- i686-pc-windows-msvc

Авторы библиотек могут явно указать нужные платформы через метаданные [package.metadata.docs.rs] в Cargo.toml. docs․rs продолжает поддерживать все доступные в Rust платформы.

📖 Подробнее в блоге Rust
👍17
🔧 Универсальный CLI с Clap

Clap — это самый популярный фреймворк для создания CLI приложений в Rust экосистеме. Он используется практически везде: от cargo и rustup до ripgrep и bat. Clap предоставляет декларативный и процедурный API для парсинга аргументов, автоматически генерирует help сообщения и поддерживает автодополнение для всех популярных shell'ов.

💡 Основные моменты:
- Derive макросы для определения CLI через структуры — минимум boilerplate кода
- Автоматическая генерация man страниц и shell completions
- Встроенная валидация аргументов и красивые сообщения об ошибках
- Поддержка субкоманд, флагов, позиционных аргументов и переменных окружения

📌 GitHub: https://github.com/clap-rs/clap
9👏3
🦀 Rust в CodeQL стал общедоступным

GitHub выпустил CodeQL 2.23.3 — и это важно для Rust-разработчиков.

Что нового:

Поддержка Rust теперь доступна всем пользователям GitHub code scanning. Больше не бета, можно использовать в продакшене для поиска уязвимостей.

Первый security query для Rust:
Добавлен rust/insecure-cookie — находит cookies без атрибута Secure, которые могут передаваться по незащищённым каналам.

Пример того, что теперь ловится:
//  Небезопасно
let cookie = Cookie::new("session", token);

// Безопасно
let cookie = Cookie::build("session", token)
.secure(true)
.finish();


Бонус для C/C++:
Режим build-mode: none теперь GA — можно сканировать проекты даже без полной сборки.

Что это значит?
Если используете GitHub Advanced Security — автоматический анализ Rust-кода уже работает. Для остальных — отличный повод попробовать CodeQL локально.

Полный changelog
🔥151