Media is too big
VIEW IN TELEGRAM
Видео о Rust Traits

0:00 - Introduction
0:39 - Visual Example
2:47 - Using Traits in Rust
4:56 - Using Traits with Functions
9:06 - Conditionally implement functions with trait bounds

источник

👉 @rust_lib
Пишем простой драйвер на Rust

Популярность Rust неуклонно растёт, а с ней и сопутствующая экосистема. И оно не удивительно, ведь это единственный современный язык, который обеспечивает безопасность памяти и многопоточной обработки на этапе компиляции, предоставляя мощную и богатую систему сборки (cargo), а также всё больше различных пакетов (крейтов).

В своей повседневной работе я по-прежнему придерживаюсь C++, так как основная её часть связана с низкоуровневым программированием систем и ядра, а из этого языка легко задействовать написанный на С Windows API и COM API.

Rust — это язык для системного программирования, то есть он может справляться с теми же задачами, что и C/C++. Основное неудобство при этом создаёт громоздкий синтаксис, необходимый для преобразования типов С в типы Rust. Но это неудобство можно преодолеть, используя подобающие обёртки и макросы.

Короче говоря, я решил попробовать написать простой и полезный драйвер WDM. Это будет Rust-версия драйвера «Booster», о котором я пишу в своей книге (Windows Kernel Programming), позволяющего изменять приоритет любого потока на любое значение.

https://habr.com/ru/companies/ruvds/articles/882474/

👉 @rust_lib
Использование OpenTelemetry в Rust

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

В статье показано, как интегрировать OpenTelemetry в приложение на Rust, используя библиотеку tracing и экспортировать данные в Jaeger. Приведены примеры кода, объясняющие настройку и использование трейсов для диагностики проблем и улучшения производительности.

Базовый конвейер с OpenTelemetry можно настроить с помощью opentelemetry_otlp. Затем создаётся слой tracing_opentelemetry, использующий этот конвейер, и добавляется в подписчик трассировки, который инициализируется.


// note that here, localhost:4318 is the default HTTP address
// for a local OpenTelemetry collector
let tracer = opentelemetry_otlp
::new_pipeline()
.tracing()
.with_exporter(opentelemetry_otlp::new_exporter().http().with_endpoint("localhost:4318"))
.install_batch(Tokio)
.unwrap();

// log level filtering here
let filter_layer = EnvFilter::try_from_default_env()
.or_else(|_| EnvFilter::try_new("info"))
.unwrap();

// fmt layer - printing out logs
let fmt_layer = fmt::layer().compact();

// turn our OTLP pipeline into a tracing layer
let otel_layer = tracing_opentelemetry::layer().with_tracer(tracer);

// initialise our subscriber
subscriber
.with(filter_layer)
.with(fmt_layer)
.with(otel_layer)
// The error layer needs to go after the otel_layer, because it needs access to the
// otel_data extension that is set on the span in the otel_layer.
.with(ErrorTracingLayer::new())
.init();


https://shuttle.rs/blog/2024/04/10/using-opentelemetry-rust

👉 @rust_lib
Dioxus

Это современный фреймворк для разработки UI на Rust, похожий на React, но с преимуществами производительности и безопасностью Rust. Он поддерживает рендеринг на Web, Desktop, Mobile и даже TUI.

https://github.com/DioxusLabs

👉 @rust_lib
5 алгоритмов на Rust, которые должен знать каждый разработчик

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

Писать код на Rust — это не просто бороться с borrow checker, но и делать его действительно эффективным. Ведь никакой язык не спасет от тормозов, если алгоритмы выбраны неудачно.

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

https://habr.com/ru/companies/beget/articles/887160/

👉 @rust_lib
Полный курс Rust от Google 🦀

Это учебный курс по языку программирования Rust, разработанный командой Android в Google.
Он изначально предназначался для внутреннего использования для обучения разработчиков Android, но теперь открыт для всех.

Курс охватывает:

- Основы языка Rust
- Работа с памятью и безопасностью
- Современные концепции (итераторы, async, crate-экосистема и т.д.)
- Использование Rust для Android и WebAssembly
- Конкретные упражнения и практические примеры

Можно использовать как в виде самостоятельного материала, так и для проведения обучающих семинаров.
Подходит для разработчиков, знакомых с системным программированием, например, на C/C++.

https://github.com/google/comprehensive-rust

👉 @rust_lib
📖 Неофициальное руководство по экосистеме Rust

https://blessed.rs/crates

https://github.com/nicoburns/blessed-rs

👉 @rust_lib
Список ресурсов для изучения Rust — Дорожная карта от новичка до продвинутого уровня.

https://github.com/ImplFerris/LearnRust

👉 @rust_lib
🧵 Почему .clone() в Rust — не всегда зло (и когда он действительно вреден)

Многие начинающие разработчики в Rust быстро усваивают: «.clone() — это плохо». И правда, если бросаться клонировать всё подряд, можно получить красивый, но тормозной код. Но важно понимать, почему .clone() вызывает проблемы, и когда его использование оправдано.


📌 Что делает .clone()?

Метод .clone() копирует данные, создавая новое значение в памяти. Это не просто копия указателя — это глубокое копирование. То есть:


let a = String::from("hello");
let b = a.clone(); // теперь у нас два разных `String`


Для простых типов (например, i32, bool, char) .clone() вообще не нужен — они Copy и дублируются автоматически.


🚩 Когда .clone() — сигнал тревоги

Если вы часто пишете .clone(), чтобы «заткнуть компилятор», скорее всего, у вас проблемы с пониманием владения и заимствования. Пример:


fn takes_ownership(s: String) { /* ... */ }

let s = String::from("data");
takes_ownership(s.clone()); // работает, но...
takes_ownership(s); // не работает без `.clone()`


Здесь правильнее задуматься: а нужно ли вообще передавать владение? Или лучше использовать ссылку:


fn takes_reference(s: &str) { /* ... */ }

let s = String::from("data");
takes_reference(&s);



Когда .clone() — нормально

- Вы действительно хотите получить копию, и это оправдано логикой программы.
- Тип дешёв в копировании (Arc, Rc, PathBuf — в разумных пределах).
- Профилировали — и увидели, что это не узкое место.
- Вы работаете с immutability в многопоточном контексте — там клоны часто оправданы.


🧠 Вывод

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

👉 @rust_lib
⚙️Уже работаете с Rust, но хотите эффективно интегрировать его с другими языками? Или интересуетесь, как устроен процесс сборки и линковки в этом языке?

🗓На открытом вебинаре 24 апреля в 20:00 мск мы подробно разберем, как собирать и линковать библиотеки в Rust, как использовать Rust-библиотеки в других языках, а также реализуем Си ABI (Application Binary Interface). Вы получите знания, которые помогут вам повысить производительность ваших проектов и интегрировать Rust в существующие решения.

👨‍💻Урок будет полезен всем, кто хочет углубить свои знания в Rust, повысить квалификацию и навыки работы с библиотеками и системами. Вы сможете применять полученные знания в реальных проектах.

👉Присоединяйтесь к открытому вебинару и получите скидку на большое обучение «Rust Developer. Professional»: https://vk.cc/cKVaG7

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
🦀 Zero-cost abstractions — миф или магия?

Одна из главных фишек Rust — zero-cost abstractions. Звучит круто, но что это на деле?

📦 Когда ты пишешь абстрактный код (дженерики, итераторы, трейты), ты обычно платишь ценой производительности. Но не в Rust.

🧠 Rust-компилятор (LLVM) на этапе компиляции мононизирует (специализирует) код — превращает обобщённые конструкции в конкретные, а ненужные — выкидывает. В итоге твои абстракции не тормозят, а код остаётся читаемым.

Пример:

fn square<T: Copy + std::ops::Mul<Output = T>>(x: T) -> T {
x * x
}


Такой код при компиляции становится обычной функцией для i32, f64, и так далее — без оверхеда.

⚡️ Rust даёт возможность писать выразительный код без страха потерять в перформансе. Именно поэтому он стал любимцем системных разработчиков, пишущих и под микроконтроллеры, и под веб.

🧩 А ты используешь zero-cost подходы в своём коде? Делись примерами в комментариях!

👉 @rust_lib
Blue Recorder - простой экранный рекордер, написанный на Rust на основе Green Recorder

Простое приложение для записи экрана на Linux. Построено с использованием GTK4 и ffmpeg.

Поддерживает запись аудио и видео практически на всех интерфейсах Linux с поддержкой сервера отображения Wayland в сессиях GNOME.

В данный момент поддерживаются следующие форматы: mkv, avi, mp4, wmv, gif и nut.
Вы можете легко остановить запись, щёлкнув правой кнопкой мыши по иконке в области уведомлений и выбрав "Остановить запись". Также можно кликнуть средней кнопкой мыши по иконке записи (но эта функция работает не на всех интерфейсах).
Можно выбрать источник аудиовхода из списка доступных устройств.

Также вы можете задать значения по умолчанию, просто изменив их в интерфейсе — программа сохранит их для следующего запуска.
Основано на Green Recorder, переписано на Rust с улучшениями.

https://github.com/xlmnxp/blue-recorder

👉 @rust_lib
💻 100 упражнений для изучения Rust

Репозиторий 100-exercises-to-learn-rust предлагает подборку из 100 задач для практики Rust. Упражнения покрывают широкий спектр тем: от базового синтаксиса и работы с переменными до более сложных тем вроде многопоточности и асинхронного программирования.

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

https://github.com/mainmatter/100-exercises-to-learn-rust

👉 @rust_lib
This media is not supported in your browser
VIEW IN TELEGRAM
Rustubble

Этот проект нацелен на предоставление набора компонентов, которые можно использовать в терминальных приложениях.

Компонент TextInput — это универсальное и настраиваемое текстовое поле ввода, предназначенное для терминальных приложений на языке Rust. Он поддерживает Unicode, динамическую обработку ввода и предлагает множество опций настройки для улучшения взаимодействия с пользователем.

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

* Поддержка Unicode: Без проблем обрабатывает ввод символов Unicode.
* Динамическая обработка ввода: Поддерживает ввод в реальном времени, включая вставку и удаление текста.
* Гибкая настройка: Возможность задавать отступы, плейсхолдер, начальный текст и вспомогательный текст.
* Управление курсором: Контролирует положение курсора и гарантирует его корректное размещение в зависимости от действий пользователя.

https://github.com/warpy-ai/rustubble

👉 @rust_lib
Выпуск Rust 1.87

В день празднования десятилетия с момента выпуска языка программирования Rust 1.0 (проект Rust был основан в 2006 году, выпуск 0.1 был сформирован в 2012 году, а первая стабильная версия предложена в 2015 году) опубликован релиз Rust 1.87. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).

Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.

Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.

https://www.opennet.ru/opennews/art.shtml?num=63242

👉 @rust_lib
Komorebi

Менеджер окон с тайлингом для Windows 🍉

Обзор
komorebi — это менеджер окон с тайлингом, работающий как расширение для Desktop Window Manager в Windows 10 и выше.

komorebi позволяет управлять оконными приложениями, виртуальными рабочими областями и мониторами через CLI. Его можно использовать вместе со сторонним софтом, таким как whkd и AutoHotKey, для настройки пользовательских сочетаний клавиш.

Цель komorebi — по умолчанию вносить как можно меньше изменений в операционную систему и окружение рабочего стола. Пользователи могут вносить нужные им правки в собственных конфигурационных файлах komorebi, но эти изменения останутся опциональными и отключёнными по умолчанию в обозримом будущем.

https://github.com/LGUG2Z/komorebi

👉 @rust_lib
🤖 Тест по Rust проверь свои знания, готов ли ты к обучению на курсе.

Ответишь — пройдешь на курс "Rust Developer. Professional" от OTUS по специальной цене + получишь доступ к записям открытых уроков курса

За 5 месяцев обучения ты разберёшь ключевые особенности Rust и сможешь не только разрабатывать сложные программные продукты, но и в целом лучше проектировать ПО.

➡️ ПРОЙТИ ТЕСТ

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
This media is not supported in your browser
VIEW IN TELEGRAM
Yazi — ⚡️ Молниеносно быстрый файловый менеджер для терминала

Это файловый менеджер для терминала, написанный на Rust, основанный на неблокирующем асинхронном вводе/выводе. Он ориентирован на предоставление эффективного, удобного и настраиваемого опыта управления файлами.

• Встроенная поддержка нескольких протоколов изображений
• Полная асинхронная поддержка: все операции ввода-вывода являются асинхронными, задачи ЦП распределяются по нескольким потокам, что позволяет максимально эффективно использовать доступные ресурсы.
• Встроенная подсветка кода
• Интеграция с fd, rg, fzf, zoxy
• Vim-подобное управление
• Поддержка нескольких вкладок, предварительный просмотр с возможностью прокрутки (для видео, PDF-файлов, архивов, каталогов, кода и т. д.)
• Система тем, пользовательские макеты, корзина для мусора
и многое другое...

Совместим с GNU/Linux, Windows, macOS

https://github.com/sxyazi/yazi

👉 @rust_lib
Helix gpui

Это простая графическая оболочка для редактора Helix. Большинство модальных редакторов работают в терминале; я хочу изменить это и реализовать качественный модальный GUI-редактор.

Темы
gui, rust-lang, helix-editor

https://github.com/polachok/helix-gpui

👉 @rust_lib
Один на один с Rust

Всем привет! Я Влад Лунин, занимаюсь анализом сложных угроз в экспертном центре безопасности Positive Technologies. В последнее время часто приходится сталкиваться с вредоносным ПО (ВПО), написанном на Rust, поэтому хочу поделиться своим опытом реверса исполняемых файлов, написанном на этом языке. ВПО бывает как очень простое, так и очень сложное в своей реализации, и чаще всего эта сложность обусловлена особенностями Rust. Расскажу, какие подходы применяю для успешного реверса, а также про сложности, с которыми сталкивался, и как их преодолевал.

https://habr.com/ru/companies/pt/articles/915192/

👉 @rust_lib
2025/06/14 07:39:26
Back to Top
HTML Embed Code: