Rust - Советы, библиотеки, гайды
2.42K subscribers
85 photos
2 videos
34 links
Привет! 🦀
У нас тут всё проржавело, но думаю ты найдешь кое-что интересное для себя ✌️

use {Готовый код, советы, лайфхаки, годные библиотеки, уроки и многое другое};

let 😎 Наша предложка - @hhsharebot;
let 🤟 Автор - Абрахам (@priler);
Download Telegram
Уффф красивое 🔥😍
Rust сила, Go могила 🔥
Criterion.rs - это прям топ штука для бенчмаркинга на Rust.
Он позволяет не только замерять скорость кода, но и прослеживать ускорения/замедления между тестами.

Да, я знаю что в Rust есть встроенные бенчмарки (через тесты).
Но во-первых они там в найтли.
Во вторых критерион круче и удобнее.

Он еще и графики кста умеет рисовать.
Крч топ штука 🔥
Мне срочно это нужно.
Поставил сегодня себе крейт pv_recorder для стриминга звука с микрофона.
Всё бы ничего, но официальный Rust SDK не работает.
Код из документации и из примеров завестись отказался.

И я конечно же, как честный гражданин растовчанин открыл Issue в репо крейта.
Но решил не останавливаться и полез анализировать исходный код крейта.

Спустя минут 30 мне всё же удалось запустить нужный код путём простого анализа исходного кода крейта.

Вывод: Анализируйте код крейтов 🦀
Please open Telegram to view this post
VIEW IN TELEGRAM
Aquascope - это инструмент, позволяющий визуализировать как работает borrow-checker в Rust.

С его помощью можно смотреть, как происходят манипуляции с памятью.
Как она выделяется, как передается, где хранится и т.д.
Также визуально можно увидеть ошибки.

В общем полезная штука 🦀
Демка доступна прямо онлайн.
Кстати, зацените результат вот такого кода в Aquascope.
Казалось бы, владение перешло в переменную b, и a больше не существует.

На деле же, borrow-checker в Rust работает исключительно на compile-time.
А в рантайме по факту b является копией переменной a.
Вернее сказать, копируется указатель, а не значение.
Т.к. Box не реализует трейт Copy.

Такие пироги 🦀
Есть метод fn move_a_box(b: Box<i32>) {}. Ниже представлены 4 сниппета кода, которые не будут скомпилированы в Rust. Но, представьте что он разрешит их компиляцию. Какой из сниппетов НЕ ПРИВЕДЕТ к неопределённому поведению?
Anonymous Quiz
19%
let b = Box::new(0); move_a_box(b); let b2 = b;
30%
let b = Box::new(0); move_a_box(b); println!("{}", b);
34%
let b = Box::new(0); let b2 = b; println!("{}", b); move_a_box(b2);
17%
let b = Box::new(0); let b2 = b; move_a_box(b);
This media is not supported in your browser
VIEW IN TELEGRAM
Крч пилю сейчас вот такую программу на Rust 🦀 Tauri.

Полный стек: Rust + Tauri + TypeScript + Vite + Svelte.
Текущий размер программы после компиляции, - ~8мб.
При работе жрёт 3-4мб. сама программа + 50-70мб. жрёт WebView2.

Весь UI вшивается в исполняемый файл.
Общение фронта и бэка идёт через IPC (паттерн Brownfield).
Часть функций вынесено в потоки.

Крч топ 🔥
In Rust we trust 🦀
This media is not supported in your browser
VIEW IN TELEGRAM
Мне лень делать посты.
Поэтому вот вам видос как я рисую логотип языка Rust, - крабика Ферриса 🦀.
Там крч Microsoft решили официально включить Rust в свой продакшн.
Они уже переписали на нём часть библиотек и в скором времени загрузка Windows частично будет осуществляться при помощи Rust.

По словам ведущего программиста по разработке ОС <забыл-его-имя-сами-найдете>:
Rust не только решает проблему с утечкой памяти, даёт писать memory-safe code, но и также показывает производительность на 5-15% выше существующих решений на C/C++.

Крч Rust теперь не только в Linux, но и в Microsoft.
Времена меняются, а старина Билл всё тот же ...

Хе хе 🦀
Самая большая проблема языка программирования Rust - это хренова игра Rust 🌚

Когда гуглишь уроки, выходят гайды как сделать рейды на базы ...
Называется открыл средних размеров проект на Rust в PyCharm 🌚
Полезная цитата из книги Rust Book касательно копирования/перемещения переменных:
«В сумме, если значение не владеет данными в куче, тогда оно может быть скопировано без перемещения».

Примеры:
— Тип i32 не владеет данными в куче, поэтому он может быть скопирован без перемещения.
— Тип String владеет данными в куче, поэтому он не может быть скопирован без перемещения.
— Тип &String не владеет данными в куче, поэтому он может быть скопирован без перемещения.

Единственное исключение из правил, - это уникальные ссылки.
Например, тип &mut i32 не может быть скопирован.
Так как это может создать прецедент для неопределенного поведения.
К тому же Rust запрещает иметь более одной уникальной ссылки на переменную.
Данная программа не скомпилируется, хотя по факту она не имеет никаких ошибок и не создает неопределенное поведение.

Как вы думаете, - почему так? 🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
Есть метод fn award_phd(name: &String) {let mut name = *name; name.push_str(", Ph.D.");}. Представьте, что Rust позволит скомпилировать этот код. Какой из 3х сниппетов кода ниже НЕ ПРИВЕДЕТ к неопределенному поведению?
Anonymous Quiz
18%
let name = String::from("Ferris"); award_phd(&name);
25%
let name = String::from("Ferris"); award_phd(&name); println!("{}", name);
24%
let name = String::from("Ferris"); let name_ref = &name; award_phd(&name); println!("{}", name_ref);
33%
Никакой, все сниппеты ведут к неопределенному поведению.