Rust @rust_lib Channel on Telegram

Rust

@rust_lib


Полезный контент по программированию на Rust

Rust Library (Russian)

Вы обожаете программирование и хотите изучить новый язык? Тогда канал Rust Library идеально подойдет вам! Здесь вы найдете полезный контент по программированию на Rust, одном из самых популярных языков программирования с открытым исходным кодом. Rust обладает высокой производительностью и безопасностью, что делает его прекрасным выбором для разработки надежного и эффективного программного обеспечения. На канале Rust Library вы найдете обзоры, уроки, советы и многое другое, чтобы помочь вам освоить этот удивительный язык программирования. Присоединяйтесь к нам прямо сейчас и начните свое путешествие в мир Rust!

Rust

02 Dec, 15:34


Yazi — ⚡️ Молниеносно быстрый файловый менеджер для терминала

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

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

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

https://github.com/sxyazi/yazi

👉 @rust_lib

Rust

27 Nov, 20:09


Fuzzer Development With Rust (Basic)

Каждый исследователь должен уметь разрабатывать собственные инструменты для fuzzing (фаззинга). По этой причине я начал обучать созданию таких инструментов с нуля в рамках этого проекта, чтобы исследователи могли использовать свои фаззеры для выявления уязвимостей в области безопасности в открытых инструментах, библиотеках и коде, которые компании разрабатывают для внутреннего использования.

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

https://github.com/raminfp/fuzzer-development-with-rust

👉 @rust_lib

Rust

21 Nov, 08:41


Rust: рефакторинг для новичков

Недавно Нирадж Авинаш выложил свой код в группе по языку программирования Rust на LinkedIn. Его цель — изучить основы Rust, но я нашел его пример хорошей основой для своей статьи. Задача состоит в том, чтобы показать, как можно улучшать код на Rust поэтапно, и продемонстрировать, каких ошибок могут избегать новички, начиная с их кода. В целях упрощения, пожалуйста, не обращайте внимания на очевидные недостатки этой простой программы.

https://betterprogramming.pub/rust-refactoring-for-beginners-15a3270ce45d

👉 @rust_lib

Rust

13 Nov, 05:08


Разбираем выравнивание данных и структуру памяти в Rust

Мне нравится оптимизировать код — определение и исправление неэффективных участков кода приносит некое особое чувство удовлетворения в отличие от закидывания проблемы железом. Ведь последнее — пустая трата ресурсов и выбросов углерода!

В процессе моей работы я много раз оптимизировал использование памяти датафреймов Python. Не учитывая различные особенности, зачастую наиболее быстрым решением является понижающее приведение — к примеру, конвертация столбца нулей и единиц из int в bool. И хотя это срабатывает, недавно к своему удивлению я узнал, что булевы числа не всегда отображаются в качестве одиночных битов. Так как же отображаются типы данных в памяти?

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

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

👉 @rust_lib

Rust

11 Nov, 05:43


CBLT — безопасный, быстрый и минималистичный веб-сервер на языке программирования Rust

Для изучения нового языка программирования я использую следующий подход. Сначала я читаю учебник по этому языку программирования, в котором объясняются синтаксис, идиомы, философия и принципы работы языка. После этого я пишу небольшой пет-проект на этом языке программирования. На пет-проекте я немного практикуюсь с новым языком, с его стандартными библиотеками и популярными фреймворками.

Чтобы погрузиться сильнее в язык, вместо пет-проекта я начинаю писать свои библиотеки для работы с базами данных (ORM), JSON, акторами, MVC веб-фреймворком, логированием и т.д. Библиотеки, которые вряд ли будут кому-то нужны, но они помогут мне лучше понять язык программирования. На удивление, с языком Rust я добрался до написания своего веб-сервера. Раньше такого не было. Думаю, это из-за того, что Rust — это язык системного программирования и грех на нём не попробовать заняться оптимизацией перформанса.

В итоге я столкнулся с тем, что Rust не имеет аналогов Nginx, Lighttpd, Caddy, HAProxy, Apache, Tomcat, Jetty и т.д. Все эти веб-сервера написаны на C, Go, Java и т.д. Имеются только веб-фреймворки: Actix, Axum, Rocket, Hyper и т.д.

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

👉 @rust_lib

Rust

09 Nov, 18:39


Упрощенный пример на Rust обучения нейронной сети на основе Candle Framework от Hugging Face

Я недавно изучал примеры использования нейронных сетей из библиотеки Candle от Hugging Face и обратил внимание, что они довольно сложны для понимания людей, которые только начинают знакомство с нейросетями. Поэтому я решил написать максимально упрощенный пример кода на Rust, который демонстрирует обучение и использование простейшей нейросети.

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

👉 @rust_lib

Rust

06 Nov, 13:40


CloudFlare отказывается от Nginx в пользу in-house HTTP-прокси на Rust

Сегодня мы поговорим о Pingora, новом HTTP-прокси, который мы создали у себя внутри с помощью Rust. Прокси обслуживает более 1 триллиона запросов в день, форсирует производительность и предоставляет множество новых функций для клиентов Cloudflare, при этом требуя всего лишь треть ресурсов CPU и памяти нашей предыдущей прокси-инфраструктуры.

Rus https://habr.com/ru/articles/688634/

Eng https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/

👉 @rust_lib

Rust

26 Oct, 11:25


Идиоматический код на Rust для тех, кто перешел с других языков программирования

Привет, дорогие читатели! В предыдущей моей статье "Как легко перейти с Java на Rust" я делился с вами советами по переходу на Rust и уменьшению количества "потерянной крови" на этом пути. Но что делать дальше, когда вы уже перешли на Rust, и ваш код хотя бы компилируется и работает? Сегодня я хочу поделиться с вами некоторыми идеями о том, как писать идиоматический код на Rust, особенно если вы привыкли к другим языкам программирования.

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

👉 @rust_lib

Rust

20 Oct, 21:13


Pake

🤱🏻 Превратите любую веб-страницу в настольное приложение с помощью Rust.

Pake поддерживает Mac, Windows и Linux.

https://github.com/tw93/Pake

👉 @rust_lib

Rust

15 Oct, 21:38


Попробуйте Tauri

Хочу рассказать про один из моих любимых Opensource проектов: Tauri. Это среда для создания десктопно-мобильных приложений на JavaScript, но быстрых и легковесных. С опциональными дополнениями на Rust, а через него и на всех других языках.

Достоинства
Поддерживается Линь, Вынь и Дрюнь и всякое Ябло. EXEшник HelloWorld весит 1 мегабайт ( ну 5, если не ужиматься в угол как сирота в барском доме ). В памяти занимает на Win 11 200 Мб. (Из них >90% приходится на системные компоненты, расшаренные с другими программами. Поэтому простые средства измерения покажут 5 Мб). Кто-то считает, что это много. Покажите меньше. Только HelloWorld у нас будет такой: в верхней половине окна играет видео с вэба со звуком, а под ним кнопка закрыть, которая при наведении мыши начинает вращаться, и оба эти компонента рендерятся на GPU.

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

👉 @rust_lib

Rust

13 Oct, 21:08


Шпаргалка по Rust

Основные понятия

- Переменные и типы данных:
- По умолчанию переменные являются неизменяемыми. Для создания изменяемой переменной используйте mut.

let mut x = 5; // изменяемая переменная
x = 10; // корректно

- Основные типы данных:
- Целые числа: i32, u32, i64, u64, isize, usize.
- Числа с плавающей точкой: f32, f64.
- Логический тип: bool.
- Символ: char.
- Строки: String (изменяемая) и &str (неизменяемая).

- Функции:
- Определение функции:

fn имя_функции(параметры: Тип) -> Тип {
// тело функции
}

- Пример функции:

fn add(x: i32, y: i32) -> i32 {
x + y
}


- Управляющие конструкции:
- Условия:

if условие {
// код
} else if условие {
// код
} else {
// код
}

- Циклы:
- Цикл `loop`:

loop {
// бесконечный цикл
}

- Цикл `for`:

for элемент in коллекция {
// код
}

- Цикл `while`:

while условие {
// код
}


Структуры и перечисления

- Структуры:

struct ИмяСтруктуры {
поле1: Тип,
поле2: Тип,
}

Пример:

struct Point {
x: i32,
y: i32,
}


- Перечисления:

enum ИмяПеречисления {
Вариант1,
Вариант2,
}

Пример:

enum Direction {
Up,
Down,
Left,
Right,
}


Введение в владение и заимствование

- Владение: Каждый ресурс в Rust имеет единственного владельца.
- Заимствование:
- Неизменяемое заимствование:

let s = String::from("Hello");
let r = &s; // r — неизменяемая ссылка на s

- Изменяемое заимствование:

let mut s = String::from("Hello");
let r = &mut s; // r — изменяемая ссылка на s


Обработка ошибок

- Результат:

enum Result<T, E> {
Ok(T),
Err(E),
}

Пример функции с обработкой ошибок:

fn divide(x: i32, y: i32) -> Result<i32, String> {
if y == 0 {
Err(String::from("Деление на ноль"))
} else {
Ok(x / y)
}
}


- Паника:
- Используйте panic!() для критических ошибок, которые нельзя обработать.

Обобщения

- Обобщенные типы позволяют писать более универсальный код:

fn print_vector<T: std::fmt::Debug>(vec: Vec<T>) {
println!("{:?}", vec);
}


Работа с модулями

- Создание модуля:

mod имя_модуля {
pub fn функция() {
// код
}
}


- Импорт модуля:

use имя_модуля::функция;


Стандартные библиотеки

- Работа с коллекциями:
- Векторы:

let mut vec = Vec::new();
vec.push(1);
vec.push(2);


- Хэш-таблицы:

use std::collections::HashMap;

let mut map = HashMap::new();
map.insert("ключ", "значение");


Полезные команды

- Компиляция и выполнение:

cargo build # Компиляция проекта
cargo run # Запуск проекта


- Запуск тестов:

cargo test



👉 @rust_lib

Rust

06 Oct, 19:50


Битовые поля в Rust

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

https://habr.com/ru/companies/otus/articles/845190/

👉 @rust_lib

Rust

21 Sep, 08:30


Как я написал JVM на Rust

В последнее время я серьезно взялся за изучение языка Rust, и, как поступил бы на моем месте любой адекватный программист, после написания нескольких небольших программ я решил попробовать сделать что-то немного более амбициозное: я написал на Rust виртуальную машину Java. Не став сильно оригинальничать, я назвал ее просто rjvm. Вы можете найти ее код на GitHub.

Хочу подчеркнуть, что это лишь простенькая модель JVM, созданная в учебных целях, а не серьезная реализация. В частности, она не поддерживает:

⚫️дженерики
⚫️потоки
⚫️рефлексию
⚫️аннотации
⚫️I/O
⚫️just in time компилятор
⚫️интернирование строк

https://habr.com/ru/companies/otus/articles/755946/

original https://andreabergia.com/blog/2023/07/i-have-written-a-jvm-in-rust/

👉 @rust_lib

Rust

17 Sep, 06:30


Rust for Network Programming and Automation, 2nd Edition: Work around designing networks, TCP/IP protocol, packet analysis and performance monitoring using Rust 1.68
Автор: Gilbert Stew (2024)

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

👉 @rust_lib

Rust

16 Sep, 05:51


Huey

Генерирует гифку, которая циклически перебирает все оттенки!

https://github.com/ahhhh6980/huey

👉 @rust_lib

Rust

13 Sep, 09:15


Regex engine internals as a library [full]

Дисклеймер
Это полный перевод большой и сложной статьи по внутреннему устройству крейта regex свежей версии. Перевод большей частью выполнялся для себя, чтобы поднабить скилл в английском. По возможности постарался сохранить авторский стиль.

Если всегда было интересно, как оно там под капотом устроено, а в книге Фриддла или в книге дракона вы не нашли подробностей, то добро пожаловать - будет интересно и очень сложно.

Для понимания потребуются:

🟢Знания основ теории автоматов (знать и понимать отличия ДКА от НКА)
🟢Иметь базовое представление о том, что такое регулярные выражения
🟢Начальные знания по языку Rust
🟢Общие представления отличия различных структур данных друг от друга

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

original https://blog.burntsushi.net/regex-internals/

👉 @rust_lib

Rust

08 Sep, 09:26


Просто спарсь что угодно с помощью языка Rust (ну… или просто скачай файл)

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

В пример привожу функцию, которая парсит названия валют с сайта floatrates и выводит их (пожалуйста, напишите в комментариях, за сколько минут вы поняли эту строку):


// main.rs
use anyhow::anyhow;
use reqwest::blocking::get;
use scraper::{Html, Selector};

fn main() -> anyhow::Result<()> {
let body = get("http://www.floatrates.com/json-feeds.html")?.text()?;
let document = Html::parse_document(&body);
let selector = Selector::parse("div.bk-json-feeds>div.body>ul>li>a")
.map_err(|err| anyhow!("{err}"))?;

for element in document.select(&selector) {
println!("{}", element.inner_html());
}
Ok(())
}


В этой статье я хочу рассказать о своей новой библиотеке, значительно упрощающей парсинг на Rust. Приятного чтения!

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

👉 @rust_lib

Rust

03 Sep, 08:31


ytdlp-gui

Это графический интерфейс для yt-dlp, написанный на Rust

Его можно легко установить в GNU/Linux и Windows системах

https://github.com/BKSalman/ytdlp-gui

👉 @rust_lib

Rust

22 Aug, 08:49


Полезные фичи в Rust

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

https://habr.com/ru/companies/otus/articles/833498/

👉 @rust_lib

Rust

17 Aug, 09:38


Понимание и реализация смарт-указателя Arc и мьютекса на Rust

Rust  —  язык системного программирования с акцентом на безопасности, многопоточности, производительности. В этом руководстве рассмотрим два примитива многопоточности Rust: Arc и Mutex.

При написании многопоточного Rust рано или поздно встречаются типы Arc и Mutex. Mutex применяется во многих языках, а вот Arc вряд ли найдется где-то еще, кроме Rust. Нельзя полностью понять эти концепции, не связав их с моделью владения Rust. Эта статья  —  мой подход к пониманию Arc и Mutex в Rust.

https://towardsdev.com/understanding-and-implementing-rusts-arc-and-mutex-b54e8e3c1821

👉 @rust_lib

Rust

05 Aug, 12:02


Рост производительности машинного обучения с Rust

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

Для моего эксперимента у меня были следующие цели:

1 - Я хотел выяснить, приведет ли переход с Python + PyTorch на Rust + LibTorch (библиотеку C++, используемую в PyTorch) к ощутимому увеличению скорости, особенно в процессе обучения модели. Как мы знаем, модели машинного обучения становятся все больше и требуют все больше вычислительных ресурсов для обучения, что иногда недоступно для обычного человека. Один из способов уменьшить требования к аппаратному обеспечению — найти способ сделать алгоритмы более вычислительно эффективными. Зная, что в PyTorch Python является лишь верхним слоем над LibTorch, мой главный вопрос заключался в том, стоит ли заменять этот верхний слой Python на Rust. План заключался в том, чтобы использовать библиотеку Tch-rs Rust для работы с тензорами и функцией автоградента из DLL LibTorch, которая будет выступать в качестве "калькулятора градиентов", а затем разработать остальную часть с нуля на Rust.

2 - Я хотел, чтобы код был достаточно простым для четкого понимания всех выполняемых операций с линейной алгеброй и позволял легко расширять его при необходимости.

3 - Насколько это возможно, моя платформа должна позволять мне определять модели машинного обучения по структуре, аналогичной стандартной Python/PyTorch.


https://betterprogramming.pub/boosting-machine-learning-performance-with-rust-aab1f3ae1424

👉 @rust_lib

Rust

01 Aug, 12:31


The Power Of RUST: введение и глубокое погружение в продвинутые концепции: Ownership, References и Borrowing.

Rust используется многими крупными компаниями, такими как Mozilla, Microsoft и Dropbox, он применяется во многих случаях, для создания веб-серверов, интерфейсов командной строки, нативных настольных приложений, веб-приложений с помощью WebAssemblly, а также для операционных систем.

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

https://dev.to/this-is-learning/the-power-of-rust-introduction-and-deep-dive-in-advanced-concepts-ownership-references-and-borrowing-28dh

👉 @rust_lib

Rust

22 Jul, 09:07


Blaze: ускорение ZK для программируемой пользователем вентильной матрицы

Чтобы сделать ускорение ППВМ, или программируемой пользователем вентильной матрицы, и графического процессора одинаково удобным для разработчиков, в Ingonyama разрабатывают решения-ускорители ППВМ для типовых примитивов ZK.

С Blaze  —  библиотекой Rust для ускорения ZK на основе ППВМ компании Xilinx  —  ускорение ППВМ становится доступным для разработчиков ZK.

https://medium.com/@ingonyama/introducing-blaze-zk-acceleration-for-fpga-6f5f7cc50e1f

👉 @rust_lib

Rust

15 Jul, 09:22


Реализуем Type Inference на Rust — Часть #2: Простой Lambda Calculus

Если вы пишете свой язык программирования, то вы наверное слышали о type inference. В этом цикле статей, без лишней теории, мы наглядно разберем как это работает и реализуем свой на Rust.

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

👉 @rust_lib

Rust

15 Jul, 09:20


Реализуем Type inference на Rust — Часть #1: Unification

Если вы пишете свой язык программирования, то вы наверное слышали о type inference. В этом цикле статей, без лишней теории, мы наглядно разберем как это работает и реализуем свой на Rust.

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

👉 @rust_lib

Rust

08 Jul, 08:10


Криптография на Rust и немного FFI

Начнем с того, что эта статья как и большинство моих статей родилась в процессе разработки. В данном конкретном случае - разработки внешней крипто-библиотеки для генерации крипто-кошельков.

Да, определенно. Я считаю, что приставка "крипто" любому словосочетанию придает привкус гигантской яхты дрейфующей где-то в Майами.

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

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

👉 @rust_lib

Rust

01 Jul, 09:50


Микросервисы Rust в серверном WebAssembly

Язык программирования Rust за последние несколько лет значительно распространился. Он несколько лет подряд считается самым любимым языком программирования среди разработчиков и включён в состав ядра Linux. Rust позволяет разработчикам писать корректные программы, обеспечивающие безопасность при работе с памятью, а также такие же компактные и быстрые, как на языке C. Он идеально подходит для создания инфраструктурного программного обеспечения, включая серверные приложения, от которых требуется высокая надёжность и производительность.

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

https://habr.com/ru/companies/timeweb/articles/747582/

👉 @rust_lib

Rust

20 Jun, 15:19


Halloy - IRC Client

Halloy - это IRC-клиент с открытым исходным кодом, написанный на Rust с использованием библиотеки Iced GUI. Его цель - предоставить простой и быстрый клиент для платформ Mac, Windows и Linux.

https://github.com/squidowl/halloy

👉 @rust_lib

Rust

13 Jun, 09:11


Gabriel2 — Open Source асинхронная библиотека для модели Акторов на Rust с использованием Tokio

В целом мне очень нравится концепция Акторов в асинхронном программировании. Низкоуровневое программирование с использованием очередей сообщений и обработчиков сообщений не позволяет мыслить в терминах высокоуровневых абстракций. Акторы позволяют абстрагироваться от низкоуровневых деталей. Другими словами, Акторы посылают сообщения друг другу. А то, что Акторы на самом деле работают на очередях сообщений, нам не важно. Это скрыто 'под капотом'

Во время изучения Tokio, я решил написать свой проект для модели Акторов. Как раз низкоуровневая часть Tokio позволила это сделать. Так появилась библиотека Gabriel2.

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

👉 @rust_lib

1,604

subscribers

89

photos

46

videos