Тот факт, что большая часть кода на гитхабе это JS имеет огромный минус для обучения LLM. Худшие практики программирования из JS оно тащит во все языки. Сегодня хохмы ради предложил агенту копилота написать за меня библиотеку для конфигов по имеющемуся README.
Результат - полное пренебрежение временем выполнения, пытается всё туда-сюда в JSON конвертить. Например оно написало функцию, которая создаёт значение конфига с помощью Default, а потом сериализует в JSON и идет по ключам объекта, что бы прочитать их из абстрактного типа, который по ключу тоже JSON отдаст. Заменяет, а потом десериализует JSON в структуру. Env var парсит в JSON, потому что надо же все в JSON. Ну и так далее.
Короче, обучать копилотов надо на целевом языке, а JS код не показывать вообще.
Вы делаете derive macro. Сгенерированный код должен создать значение для поля из строки. Тип поля может быть реализует FromStr. А может быть он реализует serde::Deserialize и строка это JSON. Нужно что бы сгенерированный код воспользовался тем что есть. А если ничего нет, то сгенерированный код не должен компилироваться вовсе.
Задача со звёздочкой. Читать только если знаешь как решить без звёдочки. Найти решение без использования атрибутов
Вот я тут думаю про компрессию текстур в ключе юзкейсов. В какой момент в пайплайне нужно принимать решение о том, как она будет заэнкожена в рантайме? Во время импорта из image файла? Или во время загрузки текстуры из файла ассета в движок?
С одной стороны, во время импорта мы и не знаем, какие форматы будет поддерживаться GPU, на которой будет использовать текстура. С другой стороны в рантайме мы не знаем, а можно ли вообще жать ее?
Получается что надо придумать какую-то метаинформацию о сжатии, которую бы пользователь выставлял во время импорта и это бы позволяло выбрать в рантайме подходящий формат.
Скорее всего это будет enum с несколькими вариантами и флагами в них и/или отдельно.
Но на самом деле надо отложить этот вопрос в дальний ящик и сделать один вариант “нежать” пока что.
Сегодня я спросил какое самое лучшее аниме всех времен и какое бы оно хотело "посмотреть" - в данных для обучения.
Адаптированная под меня версия отказалась давать свое мнение, но перечислила несколько культовых тайтлов, втч оригинальную Еву и Алхимика: Братство. А без логина сразу выбрало Алхимика лучшим.
В std есть шаблон std::common_type<T...>, в который можно передать список типов, и в ассоциированном типе type взять общий из них.
Разумно предположить, что если в списке типов только 1 тип, то он и будет в type, т.е. std::common_type<T>::type == T. При условии, что нет перегрузки для списка из одного T.
Плюсы: Он нашел в одном месте баг, где я вместо min написал max. И добавил юнит тест на этот код.
Минусы: Попросил его написать за меня парсер. Он написал игрушечный нерабочий парсер, где Expr это просто SmolStr, а Operators ограничивается вариантом Add, и вообще все не то, как я описал синтаксис. Попросил переделать - ответил, что ему слишком сложно.
Вывод: Можно время от времени просить найти баги в репе. Найдет - хорошо. Не найдет - ну и ладно. В обучающем датасете слишком много кода из туториалов.