Rust
2.04K subscribers
119 photos
85 videos
2 files
160 links
Полезный контент по программированию на Rust
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Halloy - IRC Client

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

https://github.com/squidowl/halloy

👉 @rust_lib
👍41👏1
Микросервисы Rust в серверном WebAssembly

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

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

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

👉 @rust_lib
3👍3🔥1
Криптография на Rust и немного FFI

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

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

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

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

👉 @rust_lib
👍52👏1
Реализуем Type inference на Rust — Часть #1: Unification

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

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

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

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

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

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

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

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

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

👉 @rust_lib
👍3🔥1🥰1
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
👍85🥰1🥱1
Рост производительности машинного обучения с 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
👍7🥰1👏1💩1
Понимание и реализация смарт-указателя 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
👍74🔥1
Полезные фичи в Rust

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

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

👉 @rust_lib
👍103🔥2
ytdlp-gui

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

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

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

👉 @rust_lib
👍7👏32
Просто спарсь что угодно с помощью языка 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
👍13😱3🔥2🤯2
Regex engine internals as a library [full]

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

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

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

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

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

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

👉 @rust_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍102🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
Huey

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

https://github.com/ahhhh6980/huey

👉 @rust_lib
👍41🔥1
Rust.for.Network.Programming.and.Automation.pdf
1.3 MB
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
👍93🥰2👾1
Как я написал 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
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103👏3
Битовые поля в Rust

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

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

👉 @rust_lib
👍8👎21🥰1
Шпаргалка по 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
👍256🔥4😁2👎1🥰1
Попробуйте Tauri

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

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

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

👉 @rust_lib
👍121🥰1
This media is not supported in your browser
VIEW IN TELEGRAM
Pake

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

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

https://github.com/tw93/Pake

👉 @rust_lib
👍143🥰1