Rust
6.62K subscribers
258 photos
28 videos
3 files
823 links
Rust programming language

По всем вопросам- @haarrp

@ai_machinelearning_big_data - машинное обучение

@programming_books_it - бесплатные it книги

@pythonl - 🐍

@ArtificialIntelligencedl - AI

@datascienceiot - ml 📚
Download Telegram
👍11🔥32
🎥 Rust: рефакторинг для новичков

📌 Отсутствие идиом Rust
Опытным программистам Rust режет глаз тот факт, что следующая функция возвращает кортеж, а не Result<>:

fn add_student() -> (Student, bool)

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

// Добавление студента на курс
let (st, err) = add_student();

// Проверка наличия ошибки. В случае ошибки продолжить цикл
if !err {
continue;
}


Получается 5 строк с комментариями, объясняющими код. Это считается плохой практикой, так же как и короткие имена переменных.

📌 Рефакторинг
Сначала проведем рефакторинг этих фрагментов. То, что было:

fn add_student() -> (Student, bool) {
// ...
let mut st = Student {
name: "".to_string(),
age: 0,
};
// ...
if student_name.len() < 3 {
// ...
return (st, false);
}
// ...
(st, true)
}


преобразуем в более идиоматический и читаемый вариант:

fn add_student() -> Result<Student, &'static str> {
// ...
if student_name.len() < 3 {
// ...
return Err("Student's name too short");
}
// ...
let age = age.parse.map_err(|_| "Cannot parse student's age")?;

Ok(Student {
name: student_name,
age
})
}


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

◾️Метод .map_err() позволяет преобразовать экземпляр типа, содержащийся в значении перечисления Err(e), в такой, который поддерживается функцией.

В этом случае объявленным типом является &'static str (эквивалент Rust для идиомы типа const char* в С), чем объясняется совпадение текстов в кавычках. Оператор ?  — одна из лучших функциональностей Rust. Он проверяет стоящий перед ним экземпляр Result<>. Если значение равно Err(e), возвращает результат, в противном случае продолжает работу. В старом коде встречался макрос try!().

В итоге проверка ожидаемого вывода функции выглядит так:

let student = if let Ok(student) = add_student() {
student
} else {
continue;
}

student_db.push(student.clone());


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

📌 Ошибка новичков: бесконечный цикл

Читать

@rust_code
Please open Telegram to view this post
VIEW IN TELEGRAM
👍174👎4
👣 Fuzzer Development With Rust (Basic)

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

Github

@rust_code
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥21
This media is not supported in your browser
VIEW IN TELEGRAM
Yazi — молниеносный терминальный файловый менеджер, написанный на Rust.

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

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

Github

@rust_code
22🔥95👍5
JetBrains представили новую интегрированную среду разработки RustRover, ориентированную на написание приложений на языке Rust.

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


RustRover базируется на существующем открытом плагине intellij-rust, добавляющем поддержу Rust в IDE CLion и IntelliJ IDEA.

https://www.jetbrains.com/rust/

@rust_code
👍214👎4
👣 microsoft/windows-drivers-rs

Платформа, позволяющая разрабатывать драйверы Windows на языке Rust. Разработана компанией Surface.

Github

@rust_code
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍63👎1
Rust против Go: практическое сравнение
https://habr.com/ru/articles/763990/
👍7🤡5❤‍🔥3😁1🌚1
👣 Eyra

Eyra - это пакет, поддерживающий создание программ на языке Rust, полностью реализованных на нем.

Он использует Origin для запуска и завершения программ и потоков, а также c-gull для ABI-совместимых реализаций функций libc.

Github

@rust_code
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤‍🔥3
Rust — лучший язык для инфраструктуры данных
https://habr.com/ru/articles/764542/
❤‍🔥14🤔6