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

Связь: @stepikm
Download Telegram
Реализация механизма обратного давления (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
🦀 Цели Rust на вторую половину 2025 года

Команда Rust опубликовала планы на оставшиеся 3 месяца 2025 года, сгруппировав их по 4 флагманским направлениям:

🔹 Beyond the &
— пользовательские смарт-поинтеры станут такими же удобными, как встроенные ссылки. Это откроет дорогу для более эргономичной интеграции с C++ и Python.

🔹 Unblocking dormant traits
— разблокировка возможностей системы трейтов:
• Polonius для новых паттернов заимствования
• Next-gen trait solver готов к стабилизации
• In-place initialization для async fn в dyn Trait

🔹 Faster compilation
— ускорение компиляции на 20-30% через параллелизацию фронтенда и production-ready Cranelift бэкенд. Стабилизация -Zbuild-std для embedded и Rust for Linux.

🔹 Higher-level Rust
— фокус на высокоуровневые сценарии:
• cargo script для однофайловых программ
• ergonomic ref-counting для удобной работы с Rc/Arc

Ежемесячные отчеты о прогрессе будут публиковаться до конца года.

🔗rustblog
👍285🔥1
Forwarded from Mentorix
На Mentorix вышли сразу два новых бесплатных курса — по Go и Rust. Два языка, на которых сегодня пишут самую требовательную инфраструктуру: от Docker и Kubernetes до браузерных движков и системных утилит.

Golang основы
Go — язык от Google с простым синтаксисом и строгой типизацией. Удобная точка входа в backend-разработку. В курсе: синтаксис, типы, структуры, интерфейсы, пакеты и работа с модулями.
Rust — основы языка программирования
Rust — язык для тех, кому важны производительность и надёжность без сборщика мусора. В курсе: установка и структура проекта, компиляция, Cargo, контроль потока выполнения и базовые конструкции языка.

Оба курса полностью бесплатные, проходить можно в своём темпе.

Go
Rust
8