Rust Tip по оптимизации дебажного билда.
В Cargo.toml можно указать, что в
Такая запись заставит сборщик оптимизировать зависимость
А вот так можно оптимизировать все зависимости разом.
А так будут оптимизировать билдскрипты и процедурные макросы.
Оптимизируя зависимости вы ускорите процесс дебега, если только вам не надо заходить внутрь функций зависимости. При необходимости уберите оптимизацию для нее.
Приятного вам дебага.
В 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
Занимался сегодня рефакторингом небольшого крейта
Сделал чистку всех предупреждений с
В крейте функционал для работы со временем в играх.
И минимум сложностей.
Во первых
Предполагается использовать
Удобно для контроля времени в симуляции. Паузы, буллет таймы, перемотки. Просто вся симуляция должна использовать
Ознакомиться с кодом можно здесь.
https://github.com/zakarumych/gametime
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
GitHub
GitHub - zakarumych/gametime: Time calculations oriented for games
Time calculations oriented for games. Contribute to zakarumych/gametime development by creating an account on GitHub.
🔥9
Если кто-то из подписчиков пользуется egui-snarl, то я сделал PR (вместо того что бы лить в main)
https://github.com/zakarumych/egui-snarl/pull/73
https://github.com/zakarumych/egui-snarl/pull/73
GitHub
Add pin heights setting into NodeLayout by zakarumych · Pull Request #73 · zakarumych/egui-snarl
This change fixes problem with misaligned pins and gives better control to the user.
Allows to make pin rows equally sized
And to specify minimal size of a row
Allows to make pin rows equally sized
And to specify minimal size of a row
👍2🔥1
Кстати говоря,
бесцветные зеленые идеи спят яростно.
А я тем временем пробую chumsky для написания парсера моего игрушечного языка.
бесцветные зеленые идеи спят яростно.
А я тем временем пробую chumsky для написания парсера моего игрушечного языка.
👍4
Попробовал Codex от OpenAI.
Плюсы:
Он нашел в одном месте баг, где я вместо min написал max. И добавил юнит тест на этот код.
Минусы:
Попросил его написать за меня парсер.
Он написал игрушечный нерабочий парсер, где Expr это просто SmolStr, а Operators ограничивается вариантом Add, и вообще все не то, как я описал синтаксис.
Попросил переделать - ответил, что ему слишком сложно.
Вывод:
Можно время от времени просить найти баги в репе. Найдет - хорошо. Не найдет - ну и ладно.
В обучающем датасете слишком много кода из туториалов.
Плюсы:
Он нашел в одном месте баг, где я вместо min написал max. И добавил юнит тест на этот код.
Минусы:
Попросил его написать за меня парсер.
Он написал игрушечный нерабочий парсер, где Expr это просто SmolStr, а Operators ограничивается вариантом Add, и вообще все не то, как я описал синтаксис.
Попросил переделать - ответил, что ему слишком сложно.
Вывод:
Можно время от времени просить найти баги в репе. Найдет - хорошо. Не найдет - ну и ладно.
В обучающем датасете слишком много кода из туториалов.
👍6💯1
Как почувствовать себя хакером. Пошаговая инструкция:
1. Зайдите в кафе или заправку, где посетитель сам использует кофе-машину.
2. Получите сообщение об ошибке.
3. Нажмите на незаметную кнопочку на сенсорном экране, что бы открыть админское меню.
4. Угадайте пин с первого раза. Например 1111.
5. Перезагрузите кофе-машину.
6. Сделайте себе кофе.
7. Наслаждайся своим кофе, хакерман. (Или хакервуман. Но есть ли такие у меня в подписчиках, даже не знаю.)
1. Зайдите в кафе или заправку, где посетитель сам использует кофе-машину.
2. Получите сообщение об ошибке.
3. Нажмите на незаметную кнопочку на сенсорном экране, что бы открыть админское меню.
4. Угадайте пин с первого раза. Например 1111.
5. Перезагрузите кофе-машину.
6. Сделайте себе кофе.
7. Наслаждайся своим кофе, хакерман. (Или хакервуман. Но есть ли такие у меня в подписчиках, даже не знаю.)
✍7🔥2👨💻1😎1
Не могу понять прикола.
Работаю потихоньку над арканой, но как только надо делать импорт ассетов начинаю забивать.
Потом снова берусь делать что-то другое. И опять, сел делать ассеты, потупил 10 минут и переключился на поиграть.
Работаю потихоньку над арканой, но как только надо делать импорт ассетов начинаю забивать.
Потом снова берусь делать что-то другое. И опять, сел делать ассеты, потупил 10 минут и переключился на поиграть.
❤9
Немного ужасов С++ в ленту.
В std есть шаблон
Разумно предположить, что если в списке типов только 1 тип, то он и будет в
т.е.
При условии, что нет перегрузки для списка из одного T.
В std есть шаблон
std::common_type<T...>
, в который можно передать список типов, и в ассоциированном типе type
взять общий из них.Разумно предположить, что если в списке типов только 1 тип, то он и будет в
type
,т.е.
std::common_type<T>::type == T
.При условии, что нет перегрузки для списка из одного T.
😱3😭1
Мысли вслух:
Кощей не бессмертный, он просто глюканул и его хитбокс прилепился к игле, вместо его тела.
Кощей не бессмертный, он просто глюканул и его хитбокс прилепился к игле, вместо его тела.
✍11😁1
Я иногда спрашиваю GPT всякую чушь.
Сегодня я спросил какое самое лучшее аниме всех времен и какое бы оно хотело "посмотреть" - в данных для обучения.
Адаптированная под меня версия отказалась давать свое мнение, но перечислила несколько культовых тайтлов, втч оригинальную Еву и Алхимика: Братство. А без логина сразу выбрало Алхимика лучшим.
Но "посмотреть" выбрало Еву в обоих случаях.
Сегодня я спросил какое самое лучшее аниме всех времен и какое бы оно хотело "посмотреть" - в данных для обучения.
Адаптированная под меня версия отказалась давать свое мнение, но перечислила несколько культовых тайтлов, втч оригинальную Еву и Алхимика: Братство. А без логина сразу выбрало Алхимика лучшим.
Но "посмотреть" выбрало Еву в обоих случаях.