Этот совет вам понравится: когда-нибудь пробовали сравнивать два варианта перечисления (enum)?
Обычно для этого требуется каскад операторов
Однако, в такой ситуации можно использовать
@RustPortal
Обычно для этого требуется каскад операторов
match.Однако, в такой ситуации можно использовать
mem::discriminant. Это особенно полезно, когда перечисление (enum) не реализует (не имеет) трейт Eq.@RustPortal
👍41❤4🔥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
Стабильный релиз 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
Сегодня узнал про атрибут
Атрибут
@RustPortal
#[cold] — его используют для функций, которые вызываются редко. Это помогает компилятору оптимизировать производительность кэша инструкций, сосредотачивая внимание на «горячих» функциях. Атрибут
#[cold] также можно применять к вариантам enum'ов, чтобы улучшить размещение в памяти.@RustPortal
❤43👍20🔥7☃3🕊3
Глубокое погружение во взаимодействие памяти между Rust и C
Детальное исследование того, что происходит при конфликте аллокаторов памяти Rust и C, с разбором причин сбоев
Годное чтиво под горячий кофе☕
https://notashes.me/blog/part-1-memory-management/
@RustPortal
Детальное исследование того, что происходит при конфликте аллокаторов памяти 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
Теперь весь курс Луки Пальмери, который помог тысячам разработчиков освоить язык, встроен прямо в IDE от JetBrains
Как это работает: короткий кусочек теории → сразу практическое задание. Всего 100 упражнений, от базовых конструкций (if, match, циклы) до трейтов, управления памятью, структур данных и конкурентности. В процессе вы собираете рабочую мини-систему управления проектами
RustRover полностью бесплатен для обучения, так что можно просто поставить и начать.
Тут подробнее: тык
@RustPortal
👍24🤮6👀4❤2
Лучшие практики конструкторов в Rust
Шаблоны конструкторов, которыми должен владеть каждый уважающий себя растовик, чтобы не выглядеть новичком
https://blog.cuongle.dev/p/constructor-best-practices-in-rust
@RustPortal
Шаблоны конструкторов, которыми должен владеть каждый уважающий себя растовик, чтобы не выглядеть новичком
https://blog.cuongle.dev/p/constructor-best-practices-in-rust
@RustPortal
❤19👍2
Пишем свою SQLite
Годная серия статей "Пишем свою SQLite на Rust"
- Часть 1: Вывод списка таблиц
- Часть 2: Сканирование больших таблиц
- Часть 3: Основы парсинга SQL
- Часть 4: Чтение метаданных таблиц
- Часть 5: Выполнение запросов
- Часть 6: Страницы переполнения
@RustPortal
Годная серия статей "Пишем свою SQLite на Rust"
- Часть 1: Вывод списка таблиц
- Часть 2: Сканирование больших таблиц
- Часть 3: Основы парсинга SQL
- Часть 4: Чтение метаданных таблиц
- Часть 5: Выполнение запросов
- Часть 6: Страницы переполнения
@RustPortal
❤23🔥8🤩4😁3👍1🐳1
Rust станет обязательной частью Git 3.0. «В Git 3.0 без Rust ничего работать не будет, потому что он будет обязательным», — говорит разработчик Git Брайан Карлсон.
«Без Rust [сборка Git 3.0] просто упадёт и скажет, что это не поддерживается».
До настоящего времени Git в основном разрабатывался на C.
@RustPortal
«Без Rust [сборка Git 3.0] просто упадёт и скажет, что это не поддерживается».
До настоящего времени Git в основном разрабатывался на C.
@RustPortal
👍35🔥11❤5🌚3👎2
Ларс Бергстром (Google) объявил об инвестициях в Rust в размере $350k:
• $250k — в Rust Foundation на интероперабельность языка
• $100k — в инфраструктуру Crater
По его словам, Rust помог снизить число уязвимостей в Android. Приятно видеть продолжение корпоративных инвестиций
@RustPortal
• $250k — в Rust Foundation на интероперабельность языка
• $100k — в инфраструктуру Crater
По его словам, Rust помог снизить число уязвимостей в Android. Приятно видеть продолжение корпоративных инвестиций
@RustPortal
🔥36❤7😍2👌1
Rust 1.90.0 вышел
Основные изменения:
LLD по умолчанию на x86_64-unknown-linux-gnu
Заметное ускорение линковки, особенно для больших проектов и incremental builds. Откат через
cargo publish --workspace
Публикация всех crates в workspace одной командой с правильным порядком зависимостей.
x86_64-apple-darwin → Tier 2
Понижение из-за прекращения GitHub macOS x86_64 runners и планов Apple. Билды пока доступны через rustup.
Стабилизированные API:
•
•
• const контекст:
•
Изменения совместимости:
• Tier 3 musl targets линкуются динамически по умолчанию
• Небазовые extern "{abi}" формы теперь последовательно отвергаются
https://blog.rust-lang.org/2025/09/18/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❤🔥6❤4
⚡️ Borrow Checker: друг, а не враг!
Многие новички в Rust сталкиваются с ошибками от borrow checker и думают, что язык «слишком строгий». На самом деле — это главный защитник вашего кода от утечек памяти и гонок данных. 🦀
🔑 Основные правила:
✅ В любой момент у переменной может быть либо несколько неизменяемых ссылок, либо одна изменяемая.
✅ Ссылка не может жить дольше, чем её владелец (owner).
✅ Все проверки выполняются на этапе компиляции, поэтому ошибки ловятся ещё до запуска программы.
📌 Пример:
Правильно ✅
Неправильно ❌
💡 Зачем это нужно?
🔒 Rust предотвращает data race на уровне компилятора.
🛡 Исключает dangling references и утечки памяти.
⚡️ Позволяет писать эффективный и безопасный код без сборщика мусора (GC).
Многие новички в 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:
• Linux:
Полный список платформ по умолчанию:
- x86_64-unknown-linux-gnu
- aarch64-apple-darwin
- x86_64-pc-windows-msvc
- aarch64-unknown-linux-gnu
- i686-pc-windows-msvc
Авторы библиотек могут явно указать нужные платформы через метаданные
📖 Подробнее в блоге Rust
Сервис документации 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
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:
Добавлен
Пример того, что теперь ловится:
Бонус для C/C++:
Режим
Что это значит?
Если используете GitHub Advanced Security — автоматический анализ Rust-кода уже работает. Для остальных — отличный повод попробовать CodeQL локально.
Полный changelog
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
🔥15❤1
🦀 Цели 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
Команда 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
👍28❤5🔥1
Forwarded from Mentorix
На Mentorix вышли сразу два новых бесплатных курса — по Go и Rust. Два языка, на которых сегодня пишут самую требовательную инфраструктуру: от Docker и Kubernetes до браузерных движков и системных утилит.
Golang основы
Go — язык от Google с простым синтаксисом и строгой типизацией. Удобная точка входа в backend-разработку. В курсе: синтаксис, типы, структуры, интерфейсы, пакеты и работа с модулями.
Rust — основы языка программирования
Rust — язык для тех, кому важны производительность и надёжность без сборщика мусора. В курсе: установка и структура проекта, компиляция, Cargo, контроль потока выполнения и базовые конструкции языка.
Оба курса полностью бесплатные, проходить можно в своём темпе.
Go
Rust
Golang основы
Go — язык от Google с простым синтаксисом и строгой типизацией. Удобная точка входа в backend-разработку. В курсе: синтаксис, типы, структуры, интерфейсы, пакеты и работа с модулями.
Rust — основы языка программирования
Rust — язык для тех, кому важны производительность и надёжность без сборщика мусора. В курсе: установка и структура проекта, компиляция, Cargo, контроль потока выполнения и базовые конструкции языка.
Оба курса полностью бесплатные, проходить можно в своём темпе.
Go
Rust
❤8
🦀 Rust 1.95 — `if let` guards в match-выражениях
16 апреля состоялся релиз Rust 1.95. Ключевое нововведение — поддержка
Ранее для подобной логики требовались вложенные конструкции
Вторым заметным дополнением стал макрос
Помимо этого, в релизе стабилизированы новые методы атомарного обновления, а также оптимизирована работа
📎 blog.rust-lang.org/2026/04/16/Rust-1.95.0
16 апреля состоялся релиз Rust 1.95. Ключевое нововведение — поддержка
if let guards в арках match, которая развивает концепцию let chains из версии 1.88.Ранее для подобной логики требовались вложенные конструкции
if let внутри тела арки:// До 1.95
match msg {
Msg::Data(bytes) => {
if let Ok(text) = str::from_utf8(bytes) {
process(text);
}
}
_ => {}
}
// Начиная с 1.95
match msg {
Msg::Data(bytes) if let Ok(text) = str::from_utf8(bytes) => {
process(text);
}
_ => {}
}
Вторым заметным дополнением стал макрос
cfg_select! — компиляционный аналог match по cfg-предикатам. По функциональности он соответствует популярному крейту cfg-if, но теперь доступен из стандартной библиотеки, что позволяет исключить внешнюю зависимость:cfg_select! {
unix => { fn platform() -> &'static str { "unix" } }
windows => { fn platform() -> &'static str { "windows" } }
_ => { fn platform() -> &'static str { "other" } }
}Помимо этого, в релизе стабилизированы новые методы атомарного обновления, а также оптимизирована работа
str::contains на архитектуре aarch64 за счёт использования NEON.📎 blog.rust-lang.org/2026/04/16/Rust-1.95.0
blog.rust-lang.org
Announcing Rust 1.95.0 | Rust Blog
Empowering everyone to build reliable and efficient software.
🔥16👍5❤1
🦀 RustFS — альтернатива MinIO на Rust
В трендах GitHub держится RustFS — S3-совместимое объектное хранилище на Rust. По заявленным бенчмаркам — в 2.3 раза быстрее MinIO на объектах 4 КБ.
Проект стал особенно актуален после того, как MinIO перевёл свой open-source репозиторий в maintenance-режим.
Главные отличия от MinIO:
— Лицензия Apache 2.0 вместо AGPLv3 — можно свободно встраивать в коммерческие продукты
— 100% совместимость с S3 API: существующие SDK и клиенты работают без изменений
Что стоит учитывать: проект пока в alpha/beta, в продакшен не рекомендуется. На больших последовательных чтениях MinIO всё ещё быстрее (~53 против ~23 Гбит/с), распределённый режим официально не зарелижен.
📎 github.com/rustfs/rustfs
В трендах GitHub держится RustFS — S3-совместимое объектное хранилище на Rust. По заявленным бенчмаркам — в 2.3 раза быстрее MinIO на объектах 4 КБ.
Проект стал особенно актуален после того, как MinIO перевёл свой open-source репозиторий в maintenance-режим.
Главные отличия от MinIO:
— Лицензия Apache 2.0 вместо AGPLv3 — можно свободно встраивать в коммерческие продукты
— 100% совместимость с S3 API: существующие SDK и клиенты работают без изменений
docker run -d -p 9000:9000 -p 9001:9001 \
-v $(pwd)/data:/data \
rustfs/rustfs:latest
Что стоит учитывать: проект пока в alpha/beta, в продакшен не рекомендуется. На больших последовательных чтениях MinIO всё ещё быстрее (~53 против ~23 Гбит/с), распределённый режим официально не зарелижен.
📎 github.com/rustfs/rustfs
GitHub
GitHub - rustfs/rustfs: 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance…
🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platfor...
👍10