Random Rust Dev
445 subscribers
149 photos
52 videos
1 file
40 links
Разработка на языке Rust.
Пишу простыни со своими мыслями о Rust и проектах на нем.
Download Telegram
Media is too big
VIEW IN TELEGRAM
Собрал быстренько на коленке такой вот виджет-тостер для отображения нотификаций.
🔥31
В jkl уже сгромаздилось столько кода.

Кроме алгоритмов непосредственно для картинок, таких как алгоритмы блок-компрессии, обходы зигзагом, фильтры и конверторы разных цветовых схем.

Там образовались:
Векторы (те что из линала)
Враппер для io::Write, для записи бит, а не байт. Ну и враппер для io::Read, что бы эти биты читать.
Variable-length encoding для целочисленных. Три вида.
Алгоритмы компрессии общего назначения.

С трудом удерживаюсь что бы не вытащить всё по отдельным крейтам. У меня их и так слишком много 🫣

А начиналось то просто "ну чего тащить целый линал, если мне только Vec3 нужен..."
БАЦ! 2923 строки с кодом одних только векторов.

Или "хочу жать не байты, а значения"
БАЦ! lz77.rs, lz78.rs, lzw.rs, rle.rs, ans.rs

Или вот "в этом векторе чиселки то не такие уж огромные будут"
БАЦ! vle.rs, bits.rs

Остановите меня!
🔥102
Помните, я постил напечатанные миньки?

Вот, покрасил одну.
🔥103
Писал длинный пост со своим затыком.
Предугадывал ваши вопросы и отвечал на них.
Пока отвечал, нашел решение.
Всем спасибо.
🔥165👍2😁1
Придумал забавный способ передать список из разных типов в функцию.

trait List {
type Head;
type Tail: List;

fn split(self) -> (Self::Head, Option<Self::Tail>);
}


При этом трейт должен быть конкретный, для задачи, что бы в Head добавить нужный баунд.

В чем тут прикол, ведь так список как бы бесконечный получается, раз Head всегда есть?
В том то и дело, что с точки зрения типов - да, бесконечный.
Только в конце списка Tail = Void, а у Void уже оба Head = Void и Tail = Void.
Сам Void это очевидно enum Void {}, который реализует любые нужный трейты.
То есть это бесконечный список типов, бесконечный хвост которого - пустота.
А List::split просто вернет None хвост в "рантайме".

Функция, в которую передали такой список может продолжать делать split, пока хвост - Some(tail).
Ограничение этой конструкции в том, что функция не может делать split в цикле, там же разные типы. Так что она либо делает это рекурсивно, либо фиксированное максимальное количество раз в теле.

Ссылка на playground с демонстрацией идеи
https://play.rust-lang.org/?version=stable&mode=debug&edition=2024&gist=82105fbaa8d370dec34f00a5900793df
Вопросы, которыми я никогда раньше не задавался, но вот случилось:
Как упорядочит 3д вектора так, что бы разница между соседними элементами имела наименьшую энтропию?
Хайперы:
ИИ заменит разработчиков

ИИ:
😁11😱4❤‍🔥3💅2
В новой квартире в люстре спальни обнаружилась встроенная блютусная колонка.
Нашёл, случайно подключившись, а она пиликнула.

Вопрос: ЗАЧЕМ?
😁14
Я попросил ИИ реализовать алгоритм для задачи, для которой брут-форс имеет сложность O(N!), но точно даёт оптимальный результат.
ИИ превзошел все мои ожидания и сделал алгоритм сложностью O( (N^2)! )
😁22🔥63🤮1
Читал про японские числительные.
Там нашлась забавная сноска по произношению

"Хяку" превращается в "Бяку" из-за рэндаку
😁12