TGViewer
Channel Public Channel
Rust

Rust

@rust_lib

Полезный контент по программированию на Rust
Subscribers
2.24K
Photos
173
Videos
109
Links
252

Showing posts older than #256 · Back to latest

Older Posts 20 shown
Post #255 1.93K
Компилируемый асинхронный ORM с динамическим SQL

Rbatis — это высокопроизводительный ORM-фреймворк для Rust, основанный на генерации кода во время компиляции. Он отлично сочетает в себе эффективность разработки, производительность и стабильность, выполняя роль как ORM, так и компилятора динамического SQL.

https://github.com/rbatis/rbatis

👉 @rust_lib
  • 👍 5
  • 🔥 4
  • ❤ 3
  • 🥰 1
  • 🤔 1
Post #253 2.24K
Youki — контейнерный рантайм на Rust

Это реализация OCI-совместимого контейнерного рантайма, написанная на Rust. Проект нацелен на то, чтобы быть быстрым, безопасным и простым для сопровождения.

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

- Полная совместимость с OCI Runtime Specification
- Использование Rust для повышения безопасности за счёт управления памятью без использования unsafe (по возможности).
- Модульная архитектура, что упрощает расширение и поддержку.
- Возможность заменить runc в таких инструментах, как Docker или Kubernetes.

https://github.com/youki-dev/youki

👉 @rust_lib
  • 👍 13
  • ❤ 1
  • 🥰 1
Post #252 2.27K
✨ Книга Rust Embedded Drivers (RED)

- Научитесь писать простые драйверы для аппаратных устройств, работающие в экосистеме встраиваемого Rust.
- Драйвер для датчика DHT для считывания влажности и температуры.
- Освойте использование embedded-hal-mock для тестирования.

https://red.implrust.com/

👉 @rust_lib
  • 👍 21
  • ❤ 5
  • 🔥 2
  • 🥰 1
  • 💊 1
Post #251 2.26K
«Почему компилятор Rust такой медленный?»

Я потратил месяц на создание веб-сайта в Docker и теперь готов поделиться ужасными историями.

У меня есть проблема.

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

Собрать новую статически компонуемую библиотеку (с --target=x86_64-unknown-linux-musl)

1. Скопировать её на сервер
2. Перезапустить веб-сайт

Ситуация, мягко говоря, неидеальная.

Поэтому мне бы хотелось перейти к развёртыванию веб-сайта при помощи контейнеров (будь то Docker, Kubernetes или что-то иное), в духе подавляющего большинства ПО, разворачиваемого в последний десяток лет.

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

https://habr.com/ru/articles/922534/

original https://sharnoff.io/blog/why-rust-compiler-slow

👉 @rust_lib
  • 👍 6
  • ❤ 3
  • 🥰 1
Post #250 1.98K
Lapce — это современный и быстрый текстовый редактор, написанный на Rust, с пользовательским интерфейсом на базе Flutter. Он задуман как альтернатива таким редакторам, как VS Code, с акцентом на производительность и расширяемость. Lapce использует архитектуру плагинов, поддерживает LSP (Language Server Protocol), имеет поддержку Vim-модального редактирования и обеспечивает отзывчивый интерфейс даже при работе с большими проектами.

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

* Полностью написан на Rust
* Интерфейс на Flutter, который компилируется в нативный код
* Поддержка LSP, автодополнения, подсветки синтаксиса
* Расширяемость через плагины
* Встроенная поддержка Vim-режима
* Высокая производительность и низкое потребление ресурсов

Проект активно развивается и открыт для контрибьюции. Lapce отлично подойдёт тем, кто ищет быстрый и настраиваемый редактор с современными технологиями под капотом.

https://github.com/lapce/lapce

👉 @rust_lib
  • 👍 16
  • ❤ 4
  • 🔥 1
  • 🥰 1
Post #248 2.1K
«Zero To Production In Rust»

Это субъективное введение в разработку backend-приложений на Rust.

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

https://github.com/LukeMathWalker/zero-to-production

👉 @rust_lib
  • 👍 14
  • ❤ 5
  • 🥰 1
Post #247 2.29K
toydb — это распределённая SQL-база данных, реализованная на Rust с нуля, включая журнал предзаписи (write-ahead log), хранилище на основе B-деревьев, транзакции с сериализуемой изоляцией, согласование с помощью Raft и SQL-парсер/исполнитель.

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

* Полная реализация Raft с поддержкой снапшотов
* SQL-парсер и исполнитель, поддерживающий выборку, фильтрацию, агрегацию, соединения, подзапросы и т.д.
* Хранилище ключ-значение на основе B-деревьев с журналом предзаписи
* Механизм MVCC с сериализуемой изоляцией и детекцией конфликтов
* Планировщик транзакций с дедлок-детекцией
* Управление схемой SQL (таблицы, индексы, и т.д.)

Цель проекта — изучение реализации распределённых баз данных с нуля. Он не предназначен для использования в продакшене.

https://github.com/erikgrinaker/toydb

👉 @rust_lib
  • 👍 18
  • ❤ 4
  • 🔥 1
  • 🥰 1
Post #246 2.48K
🔧 Библиотека Rustworkx - это высокопроизводительное средство для работы с графами на Python, написанное на Rust.

Она была разработана как альтернатива NetworkX, но с упором на производительность: реализация на Rust даёт значительный прирост скорости при сохранении удобного Python-интерфейса через PyO3. Поддерживаются как направленные, так и ненаправленные графы, деревья, DAG-и, и всё это — с кастомными атрибутами узлов и рёбер.

rustworkx предоставляет большое количество алгоритмов: обходы в глубину/ширину, кратчайшие пути (Dijkstra, A*), топологическую сортировку, поиск мостов, минимальные остовные деревья, изоморфизм графов, и многое другое.

Особенно полезна для задач, где критична производительность графовых операций: квантовые вычисления, биоинформатика, планировщики, оптимизация.

Установка:


pip install rustworkx


https://github.com/Qiskit/rustworkx

👉 @rust_lib
  • 👍 9
  • ❤ 3
  • 👎 1
  • 🥰 1
  • 🤔 1
Post #245 2.39K
Один на один с Rust

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

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

👉 @rust_lib
  • 👍 16
Post #244 2.24K
Helix gpui

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

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

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

👉 @rust_lib
  • 👍 8
  • ❤ 2
  • 🤡 2
  • 💊 2
  • 🥰 1
Post #242 2.51K
Yazi — ⚡️ Молниеносно быстрый файловый менеджер для терминала

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

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

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

https://github.com/sxyazi/yazi

👉 @rust_lib
  • 👍 33
  • ❤ 3
  • 🔥 1
  • 🥰 1
Post #240 2.23K
Komorebi

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

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

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

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

https://github.com/LGUG2Z/komorebi

👉 @rust_lib
  • 👍 8
  • ❤ 2
  • 🔥 1
  • 🥰 1
Post #239 2.43K
Выпуск 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
  • 👍 14
  • ❤ 3
  • 🥰 2
Post #237 2.47K
Rustubble

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

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

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

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

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

👉 @rust_lib
  • 👍 11
  • ❤ 3
  • 🥰 1
Post #236 3.08K
💻 100 упражнений для изучения Rust

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

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

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

👉 @rust_lib
  • 🔥 16
  • 👍 5
  • ❤ 4
  • 🥰 1
Post #235 2.49K
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
  • 👍 16
  • ❤ 4
  • 🔥 4
  • 🥰 1
Post #234 2.27K
🦀 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
  • 👍 17
  • 🥰 3
  • ❤ 2
  • 🔥 1
  • 😁 1
  • 💩 1
Post #232 1.9K
🧵 Почему .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
  • 👍 15
  • ❤ 4
  • ⚡ 1
  • 🥰 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →