Random Rust Dev
365 subscribers
76 photos
41 videos
1 file
28 links
Разработка на языке Rust.
Пишу простыни со своими мыслями о Rust и проектах на нем.
Download Telegram
Rust Tip по оптимизации дебажного билда.

В Cargo.toml можно указать, что в dev профиле нужно оптимизировать определенные зависимости.

Такая запись заставит сборщик оптимизировать зависимость foo.

[profile.dev.package.foo]
opt-level = 3


А вот так можно оптимизировать все зависимости разом.

[profile.dev.package."*"]
opt-level = 2


А так будут оптимизировать билдскрипты и процедурные макросы.

[profile.dev.build-override]
opt-level = 3


Оптимизируя зависимости вы ускорите процесс дебега, если только вам не надо заходить внутрь функций зависимости. При необходимости уберите оптимизацию для нее.

Приятного вам дебага.
7👍2💯2
Занимался сегодня рефакторингом небольшого крейта gametime.
Сделал чистку всех предупреждений с clippy::pedantic и задокументировал всё, хоть и минимально.

В крейте функционал для работы со временем в играх.
И минимум сложностей.

Во первых TimeStamp - точка во времени с наносекундной точностью. Относительно чего-то. Обычно относительно того, откуда они берутся.

TimeSpan - промежуток между меньшим и большим TimeStampами. Почти как Duration, но лишь u64 наносекунд.

Clock - часы. Связывают монотонный таймер core::time::Instant и TimeStampы. Генерирует ClockStep, на каждый вызов Clock::step, где есть текущий TimeStamp и TimeSpan между текущим и предыдущим.
Предполагается использовать Clock в главном цикле, делать Clock::step в начале каждой итерации и раздавать ClockStep везде, где нужно знать время.

GlobalClock - как Clock, но используют единую для процесса точку отсчета. Требуется std и global_reference фича

ClockRate - часы со скоростью. Использует внешний источник TimeSpan, генерирует ClockStep с указанной относительной скоростью. Без накапливаемой потери точности.
Удобно для контроля времени в симуляции. Паузы, буллет таймы, перемотки. Просто вся симуляция должна использовать ClockStep из ClockRate, а не общего Clock.

FrequencyTicker - генератор тиков с заданной частотой. Использует внешний TimeSpan и возвращает итератор по ClockStep тиков, произошедших в течение этого времени. Без накапливаемой потери точности.

Ознакомиться с кодом можно здесь.
https://github.com/zakarumych/gametime
🔥9
3😁2💯1
Как объяснить картинкогенератору, что во время прямого удара ногой в живот подошву не видно?

Я сколько не уговаривал, все равно разворачивает ногу подошвой к зрителю.
😁7
😁2😐2
🔥16🫡31👏1
Для тех кто рос в 90е
🔥14😁7
Теперь можно на целый день убежать от семьи в свой "офис" :)
😁62
Класть разные замыкания во враппер без аллокаций это конечно круто.

Но еще круче, когда в сигнатурах могут быть лайфтаймы и и высокоранковые лайфтаймы.
🤯13👍4😱1
Кстати говоря,
бесцветные зеленые идеи спят яростно.

А я тем временем пробую chumsky для написания парсера моего игрушечного языка.
👍4
Попробовал Codex от OpenAI.

Плюсы:
Он нашел в одном месте баг, где я вместо min написал max. И добавил юнит тест на этот код.

Минусы:
Попросил его написать за меня парсер.
Он написал игрушечный нерабочий парсер, где Expr это просто SmolStr, а Operators ограничивается вариантом Add, и вообще все не то, как я описал синтаксис.
Попросил переделать - ответил, что ему слишком сложно.

Вывод:
Можно время от времени просить найти баги в репе. Найдет - хорошо. Не найдет - ну и ладно.
В обучающем датасете слишком много кода из туториалов.
👍6💯1
Как почувствовать себя хакером. Пошаговая инструкция:

1. Зайдите в кафе или заправку, где посетитель сам использует кофе-машину.

2. Получите сообщение об ошибке.

3. Нажмите на незаметную кнопочку на сенсорном экране, что бы открыть админское меню.

4. Угадайте пин с первого раза. Например 1111.

5. Перезагрузите кофе-машину.

6. Сделайте себе кофе.

7. Наслаждайся своим кофе, хакерман. (Или хакервуман. Но есть ли такие у меня в подписчиках, даже не знаю.)
7🔥2👨‍💻1😎1
Не могу понять прикола.

Работаю потихоньку над арканой, но как только надо делать импорт ассетов начинаю забивать.

Потом снова берусь делать что-то другое. И опять, сел делать ассеты, потупил 10 минут и переключился на поиграть.
9
Статическая типизация?
Динамическая типизация?
Галюцинатическая типизация!
😁182👍2🙈2🔥1🦄1
Немного юморов в... пустоту
3👍1
Немного ужасов С++ в ленту.

В std есть шаблон std::common_type<T...>, в который можно передать список типов, и в ассоциированном типе type взять общий из них.

Разумно предположить, что если в списке типов только 1 тип, то он и будет в type,
т.е. std::common_type<T>::type == T.
При условии, что нет перегрузки для списка из одного T.
😱3😭1
Мысли вслух:

Кощей не бессмертный, он просто глюканул и его хитбокс прилепился к игле, вместо его тела.
11😁1
Я иногда спрашиваю GPT всякую чушь.

Сегодня я спросил какое самое лучшее аниме всех времен и какое бы оно хотело "посмотреть" - в данных для обучения.

Адаптированная под меня версия отказалась давать свое мнение, но перечислила несколько культовых тайтлов, втч оригинальную Еву и Алхимика: Братство. А без логина сразу выбрало Алхимика лучшим.

Но "посмотреть" выбрало Еву в обоих случаях.