Just_Fluffy писал(а): Ср май 27, 2026 21:17:37Жопа в том, что ИИ, особенно в бесплатных версиях, имеет достаточно ограниченное "окно". И он не может, в большинстве случаев, прогрузить туда весь даташит. И начинает искать ответы по другим источникам, зачастую используя аналогичные вопросы. и начинает путать серии контроллеров, типы корпусов...
И если спросить ИИ, например, про то, сколько у конкретной модели STM блоков SPI и на какие порты эти SPI могут мапиться, то в ответ получится в половине случаев полная чушь.
Я как то пробовала с Джемини и с ЦоПилотом. Оба обосрались именно на справочных данных.
Я ~$5 за Google AI Plus плачу, это с 2T в облаке, а первые пол года со скидкой меньше $3 получается. ИИ реально полезен в поисках ошибок, причем как в замороченном коде, так и простые опечатки хорошо находит. И в плане оптимизации и генерации новых идей, т.е. я могу просто кинуть ему какой-нибудь файл и попросить улучшить, но, естественно, нужно быть способным самому потом отобрать из предложенного стоящие идеи ) Например, было так:
Спойлер
Код: Выделить всё
template<IsPin P1, IsPin P2> requires (P1::port == P2::port)
class Range : public PinRangeBase
{
template<char Port, int Begin, int End>
static consteval auto make(TypeList<> pins)
{
if constexpr (Begin == End)
return pins + TypeList<PinT<Port, Begin>>{};
else if constexpr (Begin < End)
return pins + TypeList<PinT<Port, Begin>>{} + make<Port, Begin + 1, End>(pins);
else
return pins + TypeList<PinT<Port, Begin>>{} + make<Port, Begin - 1, End>(pins);
}
public:
static consteval auto pins() { return make<P1::port, P1::pinNum, P2::pinNum>(TypeList<>{}); }
};
Gemini предложил вариант с лямбдой и не то чтобы я не знал, что так можно, но просто при написании такая идея в голову не пришла. Итого после моей доработки получилось такое:
Спойлер
Код: Выделить всё
template<IsPin From, IsPin To> requires (From::port == To::port)
using Range = decltype([] {
constexpr int from = From::pinNum;
constexpr int to = To::pinNum;
constexpr int count = std::abs(from - to) + 1;
return []<auto... Is>(std::index_sequence<Is...>) {
return PinList<PinT<From::port, (from > to) ? from - Is : from + Is>...>{}; }
(std::make_index_sequence<count>{}); }());
Более того ИИ знает, что в C++ 26 добавили
Structured Bindings can introduce a Pack и с ним можно избавиться от
index_sequence, просто на тот момент в gcc не было поддержки.
А еще ИИ хорошо имена придумывает, причем которые не выглядят странно для англоговорящих )
ps.
ARV, ну вы молодец, конечно ) Я вам еще пару старниц назад писал, что обратившись к ИИ по простому вопросу вместо того чтобы ждать ответа на форуме и на него обижаться, вы овладели полезным навыком )