Criterion.rs - это прям топ штука для бенчмаркинга на Rust.
Он позволяет не только замерять скорость кода, но и прослеживать ускорения/замедления между тестами.
Да, я знаю что в Rust есть встроенные бенчмарки (через тесты).
Но во-первых они там в найтли.
Во вторых критерион круче и удобнее.
Он еще и графики кста умеет рисовать.
Крч топ штука 🔥
Он позволяет не только замерять скорость кода, но и прослеживать ускорения/замедления между тестами.
Да, я знаю что в Rust есть встроенные бенчмарки (через тесты).
Но во-первых они там в найтли.
Во вторых критерион круче и удобнее.
Он еще и графики кста умеет рисовать.
Крч топ штука 🔥
Поставил сегодня себе крейт pv_recorder для стриминга звука с микрофона.
Всё бы ничего, но официальный Rust SDK не работает.
Код из документации и из примеров завестись отказался.
И я конечно же, как честныйгражданин растовчанин открыл Issue в репо крейта.
Но решил не останавливаться и полез анализировать исходный код крейта.
Спустя минут 30 мне всё же удалось запустить нужный код путём простого анализа исходного кода крейта.
Вывод: Анализируйте код крейтов🦀
Всё бы ничего, но официальный Rust SDK не работает.
Код из документации и из примеров завестись отказался.
И я конечно же, как честный
Но решил не останавливаться и полез анализировать исходный код крейта.
Спустя минут 30 мне всё же удалось запустить нужный код путём простого анализа исходного кода крейта.
Вывод: Анализируйте код крейтов
Please open Telegram to view this post
VIEW IN TELEGRAM
Aquascope - это инструмент, позволяющий визуализировать как работает borrow-checker в Rust.
С его помощью можно смотреть, как происходят манипуляции с памятью.
Как она выделяется, как передается, где хранится и т.д.
Также визуально можно увидеть ошибки.
В общем полезная штука 🦀
Демка доступна прямо онлайн.
С его помощью можно смотреть, как происходят манипуляции с памятью.
Как она выделяется, как передается, где хранится и т.д.
Также визуально можно увидеть ошибки.
В общем полезная штука 🦀
Демка доступна прямо онлайн.
Кстати, зацените результат вот такого кода в Aquascope.
Казалось бы, владение перешло в переменную
На деле же, borrow-checker в Rust работает исключительно на compile-time.
А в рантайме по факту
Вернее сказать, копируется указатель, а не значение.
Т.к. Box не реализует трейт Copy.
Такие пироги 🦀
Казалось бы, владение перешло в переменную
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 🦀
Полный стек: 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, - крабика Ферриса 🦀.
Поэтому вот вам видос как я рисую логотип языка Rust, - крабика Ферриса 🦀.
Там крч Microsoft решили официально включить Rust в свой продакшн.
Они уже переписали на нём часть библиотек и в скором времени загрузка Windows частично будет осуществляться при помощи Rust.
По словам ведущего программиста по разработке ОС <забыл-его-имя-сами-найдете>:
Крч Rust теперь не только в Linux, но и в Microsoft.
Времена меняются, а старина Билл всё тот же ...
Хе хе 🦀
Они уже переписали на нём часть библиотек и в скором времени загрузка Windows частично будет осуществляться при помощи Rust.
По словам ведущего программиста по разработке ОС <забыл-его-имя-сами-найдете>:
Rust не только решает проблему с утечкой памяти, даёт писать memory-safe code, но и также показывает производительность на 5-15% выше существующих решений на C/C++
.Крч Rust теперь не только в Linux, но и в Microsoft.
Времена меняются, а старина Билл всё тот же ...
Хе хе 🦀
Самая большая проблема языка программирования Rust - это хренова игра Rust 🌚
Когда гуглишь уроки, выходят гайды как сделать рейды на базы ...
Когда гуглишь уроки, выходят гайды как сделать рейды на базы ...
Полезная цитата из книги Rust Book касательно копирования/перемещения переменных:
«В сумме, если значение не владеет данными в куче, тогда оно может быть скопировано без перемещения».
Примеры:
— Тип
— Тип
— Тип
Единственное исключение из правил, - это уникальные ссылки.
Например, тип
Так как это может создать прецедент для неопределенного поведения.
К тому же Rust запрещает иметь более одной уникальной ссылки на переменную.
«В сумме, если значение не владеет данными в куче, тогда оно может быть скопировано без перемещения».
Примеры:
— Тип
i32
не владеет данными в куче, поэтому он может быть скопирован без перемещения.— Тип
String
владеет данными в куче, поэтому он не может быть скопирован без перемещения.— Тип
&String
не владеет данными в куче, поэтому он может быть скопирован без перемещения.Единственное исключение из правил, - это уникальные ссылки.
Например, тип
&mut i32
не может быть скопирован.Так как это может создать прецедент для неопределенного поведения.
Данная программа ❌ не скомпилируется, хотя по факту она не имеет никаких ошибок и не создает неопределенное поведение.
Как вы думаете, - почему так? 🤔
Как вы думаете, - почему так? 🤔
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%
Никакой, все сниппеты ведут к неопределенному поведению.
Какой тип данных занимает больше места в памяти: &String или &str?
Anonymous Quiz
39%
&String занимает больше места в памяти
12%
&str занимает больше в памяти
49%
Никакой, они оба занимают 8 байт в памяти.