Rust
Open in Telegram
2 230
Subscribers
+324 hours
+37 days
+230 days
Posts Archive
2 230
Как я проектирую и разрабатываю расширения Python на Rust
Вы наверняка видели множество статей на тему "Python, Rust - производительность, бла-бла-бла... Вот, реализуем foo2plus2". Вся беда в том, что все эти статьи демонстрируют очень простые примеры уровня "hello-world". Напротив, в этой статье я хочу рассказать о том, как я проектирую комплексные расширения и почему я принимаю те или иные проектные решения.
https://habr.com/ru/articles/767254/
👉 @rust_lib
2 230
Microsoft активно развивает поддержку Windows-драйверов на языке Rust, предоставляя библиотеку windows-drivers-rs. Этот проект открывает новые возможности для создания надежных и безопасных драйверов с использованием преимуществ Rust, таких как управление памятью и предотвращение распространенных ошибок.
Основные возможности:
- Поддержка стандартных API Windows для разработки драйверов.
- Интеграция с инструментами Windows Driver Kit (WDK).
- Удобство разработки благодаря типобезопасным интерфейсам.
Проект продолжает активно развиваться, и сообщество приветствуется к участию. Отличная возможность попробовать Rust в системном программировании и внести вклад в развитие экосистемы Windows!
https://github.com/microsoft/windows-drivers-rs
👉 @rust_lib
2 230
Rust Programming
RUST Based Desktop on Linux - System76 chose this over C Programming!
RUST in the Linux Kernel - Coming sooner than you think!
Create your first RUST Program on LINUX | Rust Programming for Beginners
Use RUSTUP to create your first RUST Program on LINUX | Rust Programming for Beginners (EP1)
How to Create a Rust Project using Cargo on Linux (EP2)
How to Add a Crate/Dependency to Rust using Cargo (EP3)
RUST might be coming to UEFI BIOS Firmware on Linux
👉 @rust_lib
2 230
Rust Lang Уроки
Начало работы с языком программирования Rust & Visual Studio Code. Debugging & unit tests
Переменные и типы данных в Rust
Арифметические операции и операции сравнения. Язык Rust
Логические операции и конструкция if...else. Язык Rust
Почему Rust? ❤️ Конструкция match
Функции. Язык Rust
Структуры. Язык Rust. Анджелина и Бред вместе ❤️ благодаря структурам
Tuples | кортежи. Структуры-tuples. Язык Rust
Массивы. Язык программирования Rust.
Циклы loop | while | for. Язык Rust.
источник
👉 @rust_lib
2 230
Rust Programming Tutorial
#1 - Introduction To Rust Programming
#2 - Using Rust Tools (cargo, rustfmt)
#3 - Variables, Constants and Shadowing
#4 - Data Types
#5 - Console Input
#6 - Arithmetic and Type Casting
#7 - Conditions and Control Flow (if/else if/else)
#8 - Functions, Expressions & Statements
#9 - Memory Management, Heap & Stack
👉 @rust_lib
2 230
Учим Rust вместе
Hello World
Guessing Game
переменные и типы данных
функции и контроль выполнения программы
разбор задач
владение
заимствование и слайсы
структуры и методы
перечислимые типы
пакеты и модули
вектор
строки
HashMap
разбор задачи
обработка ошибок
дженерики
трейты
https://www.youtube.com/playlist?list=PLXhUgKrQD6UoggzaDTQ1luq3XMpYboMTM
👉 @rust_lib
2 230
Реализуем на Rust пул потоков с балансировкой нагрузки, пользуясь только стандартной библиотекой
Этот пост написан в основном под впечатлением от лекции Роба Пайка "Конкурентность – это не параллелизм".
Зачастую, пускаясь в решение задачи, полезно чётко видеть перед собой цель, которую хочешь достичь. Какая же цель стоит перед нами в данном случае? В простейшем смысле нам нужна система, которая позволяла бы:
🔹Распланировать некоторую работу так, чтобы ею занималось множество исполнителей
🔹Иметь возможность получать результаты работы, сделанной этими исполнителями
🔹Обеспечить, что исполнители достаточно загружены, но при этом не страдают от выгорания
Обратите внимание: система такого рода не привязана напрямую к компьютерам. Подобная модель вполне применима и к некоторому человеческому коллективу, которому требуется решить определённые задачи.
Как же нам смоделировать и решить эту проблему?
https://habr.com/ru/companies/timeweb/articles/761398/
👉 @rust_lib
2 230
Yazi — ⚡️ Молниеносно быстрый файловый менеджер для терминала
Это файловый менеджер для терминала, написанный на Rust, основанный на неблокирующем асинхронном вводе/выводе. Он ориентирован на предоставление эффективного, удобного и настраиваемого опыта управления файлами.
• Встроенная поддержка нескольких протоколов изображений
• Полная асинхронная поддержка: все операции ввода-вывода являются асинхронными, задачи ЦП распределяются по нескольким потокам, что позволяет максимально эффективно использовать доступные ресурсы.
• Встроенная подсветка кода
• Интеграция с fd, rg, fzf, zoxy
• Vim-подобное управление
• Поддержка нескольких вкладок, предварительный просмотр с возможностью прокрутки (для видео, PDF-файлов, архивов, каталогов, кода и т. д.)
• Система тем, пользовательские макеты, корзина для мусора
и многое другое...
Совместим с GNU/Linux, Windows, macOS
https://github.com/sxyazi/yazi
👉 @rust_lib
2 230
Fuzzer Development With Rust (Basic)
Каждый исследователь должен уметь разрабатывать собственные инструменты для fuzzing (фаззинга). По этой причине я начал обучать созданию таких инструментов с нуля в рамках этого проекта, чтобы исследователи могли использовать свои фаззеры для выявления уязвимостей в области безопасности в открытых инструментах, библиотеках и коде, которые компании разрабатывают для внутреннего использования.
В этом обучении мы объяснили все концепции с примерами на языке программирования Rust, чтобы обеспечить правильное понимание необходимых понятий.
https://github.com/raminfp/fuzzer-development-with-rust
👉 @rust_lib
2 230
Rust: рефакторинг для новичков
Недавно Нирадж Авинаш выложил свой код в группе по языку программирования Rust на LinkedIn. Его цель — изучить основы Rust, но я нашел его пример хорошей основой для своей статьи. Задача состоит в том, чтобы показать, как можно улучшать код на Rust поэтапно, и продемонстрировать, каких ошибок могут избегать новички, начиная с их кода. В целях упрощения, пожалуйста, не обращайте внимания на очевидные недостатки этой простой программы.
https://betterprogramming.pub/rust-refactoring-for-beginners-15a3270ce45d
👉 @rust_lib
2 230
Разбираем выравнивание данных и структуру памяти в Rust
Мне нравится оптимизировать код — определение и исправление неэффективных участков кода приносит некое особое чувство удовлетворения в отличие от закидывания проблемы железом. Ведь последнее — пустая трата ресурсов и выбросов углерода!
В процессе моей работы я много раз оптимизировал использование памяти датафреймов Python. Не учитывая различные особенности, зачастую наиболее быстрым решением является понижающее приведение — к примеру, конвертация столбца нулей и единиц из int в bool. И хотя это срабатывает, недавно к своему удивлению я узнал, что булевы числа не всегда отображаются в качестве одиночных битов. Так как же отображаются типы данных в памяти?
Подобно тому, как аккуратно организованные стеллажи книг в библиотеке помогают легко найти нужную информацию, отображение данных в памяти может сильно повлиять на производительность и эффективность использования памяти вашего приложения.
https://habr.com/ru/companies/beget/articles/856720/
👉 @rust_lib
2 230
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
2 230
Упрощенный пример на Rust обучения нейронной сети на основе Candle Framework от Hugging Face
Я недавно изучал примеры использования нейронных сетей из библиотеки Candle от Hugging Face и обратил внимание, что они довольно сложны для понимания людей, которые только начинают знакомство с нейросетями. Поэтому я решил написать максимально упрощенный пример кода на Rust, который демонстрирует обучение и использование простейшей нейросети.
https://habr.com/ru/articles/758658/
👉 @rust_lib
2 230
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
2 230
Идиоматический код на Rust для тех, кто перешел с других языков программирования
Привет, дорогие читатели! В предыдущей моей статье "Как легко перейти с Java на Rust" я делился с вами советами по переходу на Rust и уменьшению количества "потерянной крови" на этом пути. Но что делать дальше, когда вы уже перешли на Rust, и ваш код хотя бы компилируется и работает? Сегодня я хочу поделиться с вами некоторыми идеями о том, как писать идиоматический код на Rust, особенно если вы привыкли к другим языкам программирования.
https://habr.com/ru/articles/758566/
👉 @rust_lib
2 230
Pake
🤱🏻 Превратите любую веб-страницу в настольное приложение с помощью Rust.
Pake поддерживает Mac, Windows и Linux.
https://github.com/tw93/Pake
👉 @rust_lib
2 230
Попробуйте Tauri
Хочу рассказать про один из моих любимых Opensource проектов: Tauri. Это среда для создания десктопно-мобильных приложений на JavaScript, но быстрых и легковесных. С опциональными дополнениями на Rust, а через него и на всех других языках.
Достоинства
Поддерживается Линь, Вынь и Дрюнь и всякое Ябло. EXEшник HelloWorld весит 1 мегабайт ( ну 5, если не ужиматься в угол как сирота в барском доме ). В памяти занимает на Win 11 200 Мб. (Из них >90% приходится на системные компоненты, расшаренные с другими программами. Поэтому простые средства измерения покажут 5 Мб). Кто-то считает, что это много. Покажите меньше. Только HelloWorld у нас будет такой: в верхней половине окна играет видео с вэба со звуком, а под ним кнопка закрыть, которая при наведении мыши начинает вращаться, и оба эти компонента рендерятся на GPU.
https://habr.com/ru/articles/850192/
👉 @rust_lib
2 230
Шпаргалка по 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_lib2 230
Битовые поля в Rust
В этой статье мы рассмотрим использование битовых полей в Rust и их значимость для создания оптимизированных приложений, работающих с сетевыми протоколами. Битовые поля позволяют компактно представлять данные, минимизируя использование памяти и повышая производительность.
https://habr.com/ru/companies/otus/articles/845190/
👉 @rust_lib
2 230
Как я написал 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
