Всё таки реализация await_transform не совсем универсальная. Туда может прийти не awaitable объект, а объект, который только отдаёт awaitable объект посредством operator co_await. А ещё могут прийти noncopyable/nonmoveable объекты. Я делал такую реализацию:
template<typename Awaiter>
struct await_wrapper {
Awaiter real_;
... всякие нужные штуки
auto await_ready() {
return real_.await_ready();
}
template<typename Promise>
auto await_suspend(std::coroutine_handle<Promise> h) {
.... разные нужные штуки
return real_.await_suspend(h);
}
decltype(auto) await_resume() {
.... разные нужные штуки
return real_.await_resume();
}
};
.....
// В promise_type
template<typename Awaiter>
auto await_transform(Awaiter&& a) {
if constexpr (requires{a.operator co_await();}) {
using aw_type = decltype(a.operator co_await());
return await_wrapper<aw_type>{a.operator co_await(), другие параметры};
} else {
using aw_type = std::remove_reference_t<Awaiter>;
return await_wrapper<aw_type&>{a, this->data_, другие параметры};
}
}
sqlite хорош как локальная встраиваемая база данных для одного-двух клиентов. Для большего количества начинаются проблемы - писать может только один писатель, блокируется вся база. Если не включен WAL - читатели ещё и блокируют писателя. WAL не включить, если клиенты обращаются по сети с разных хостов. Вообще, в самый момент появления в 1С логов в sqlite я задавался вопросом - зачем, а главное, нахрена? ИМХО, логи должны быть максимально быстрыми на запись, то есть в максимально "сыром" виде, а вот для анализа потом отдельными инструментами в спокойном режиме агрегироваться.
WAL в sqlite может использоваться только если все обращения к базе данных производятся с одного компа. Первое же ограничение на https://www.sqlite.org/wal.html:
All processes using a database must be on the same host computer; WAL does not work over a network filesystem.
Если там кластер серверов, пишущих в один файл sqlite - WAL не включить.
— Вот, изволите видеть, так называемая эвристическая машина, — сказал старичок. — Точный электронно-механический прибор для отвечания на любые вопросы, а именно — на научные и хозяйственные. Как она у меня работает? Не имея достаточных средств и будучи отфутболиваем различными бюрократами, она у меня пока не полностью автоматизирована. Вопросы задаются устным образом, и я их печатаю и ввожу таким образом к ей внутрь, довожу, так сказать, до ейного сведения. Отвечание ейное, опять через неполную автоматизацию, печатаю снова я. В некотором роде посредник, хе-хе! Так что, ежели угодно, прошу. Он встал за машинку и шикарным жестом перекинул тумблер. В недрах машинки загорелась неоновая лампочка.
Я так понимаю, тут последний этап уже автоматизирован. А как вопрос ей внутрь попадает?
Дополню предыдущий ответ. Вот тут результат бенчмарка как раз сравнение std::stringstream, std::format и строк simstr на задаче Сформировать "текст число текст".
Спасибо. Стало более понятно. Как я понял, возможен слой неких разных "агентов", которые умеют работать с входными данными разных видов и передавать их в ИИ в формате, который понимает конкретный ИИ.
Как-то вы странно вопрос ставите. Почему сразу "на замену"? Этот как говорить "шуруповёрт на замену перфоратору, стамеска на замену рубанку". Для каждой задачи лучше подбирать подходящий инструмент. И эта либа - просто ещё один инструмент в ряду многих. И как же он может быть на замену format, если сам format там используется? format просто отличная вещь для своих целей, не надо его заменять. stringstream тоже решает свои задачи, хотя судя по бенчмаркам, не очень быстро.
Ответ в стиле "Если вы заблудились, просто идите домой". Спасибо. Я как раз и спрашивал, как это технически делается? Вот этот вот ваш ИИ, он с нами в одной комнате (локальный какой-то) или это где-то сервис в облаке? Продаж за квартал, допустим, под миллион, лежат в базе 1С. Как мне их дать этому ИИ? Если ИИ локальный, то надо как то их перекачать куда-то в его базу и потом на GPU он на них будет обучаться? А если в облаке? Ему надо дать доступ в БД? Он запрос сам напишет или ему надо текст запроса дать? Или надо в чате просто в CSV-формате вбить? Вы не подумайте, я не ёрничаю, не издеваюсь, я просто для себя понять хочу, как это чудо работает?
Я нейросетками как-то не увлекаюсь и профан, поэтому вопрос - вот в таком промпте "Проведи анализ данных о продажах за последний квартал" - где оно будет брать эти данные, из коих и возникает синекдоха отвечания? Их надо как-то подготовить и "скормить" нейросетке? Как это технически происходит?
Да, примерно так и планировалось, очень хотелось максимально оптимизировать построение строк. Хотя, конечно, не все задачи пока можно им сделать, но я работаю над этим :) В бенчмарках как раз последний бенчмарк Build Full Func Name на такой типичный билдер строк.
Собственно, в статье не увидел особой конкретики, кроме того, что увеличилось время сборки, если пихать auto без раздумывания. И что "мы сидим под Visual Studio, на новом стандарте какие-то мувалки и элиминации через регистры, я не просил". То, что время сборки увеличилось из-за более продвинутой оптимизации и продуктовый код будет работать быстрее - ни слова. Игрострой сидит на C++17 потому что "работает - не трогай", вот почему. Чтобы перейти на C++20 в-первую очередь задаются вопросом "а чтобы что?". Переход однозначно вызовет трату ресурсов - протестировать, починить то, что в С++17 работало, а в C++20 перестало или заработало не так (на их любимом MSVC). Вообще, не понимаю - в игрострое они все говорят, что ничего из std не пользуют, ибо "не перформит", всё у них своё, самописное. Так по идее тогда им какая разница то особо, какой стандарт? Самое критичное у меня при обновлении было где-то в начале нулевых, когда MSVC привели в соответствии со стандартом и переменные, объявленные в заголовке for, стали видны только в for, и не дальше. Да и потом - сколько не помню проблем при обновлениях - всегда было обычно то, что MSVC что-то начинал делать в соответствии со стандартом, а не так, как хотел. А по поводу моей либы - так как там используется std::format, то GCC из коробки умеет только с 13ой версии. На ранешних - не заработает без переделок. Попробую заняться этим - либо отключать эти фичи, либо тащить fmt::format. От концептов и requires тоже в-принципе можно отказаться, но очень многословный код получится, со всеми этими enable_if.
И что вам даст эта информация? Чьё то праздное любопытство мне лень удовлетворять. Если вам что-то надо от этого функционала, говорите прямо. Если есть какая-то конкретная критика - говорите прямо. Если вам это не нужно - тогда просто не пользуйтесь. Если хотите знать, кому это надо - устройте опрос, я не могу за других людей отвечать.
Спросите у авторов проектов, наверное. Я то тут при чём? Если у вас есть претензии к std::towupper, задайте вопрос ответственным за стандарты, что она до сих пор там делает.
Всё таки реализация
await_transform
не совсем универсальная. Туда может прийти не awaitable объект, а объект, который только отдаёт awaitable объект посредствомoperator co_await
. А ещё могут прийти noncopyable/nonmoveable объекты. Я делал такую реализацию:sqlite хорош как локальная встраиваемая база данных для одного-двух клиентов.
Для большего количества начинаются проблемы - писать может только один писатель, блокируется вся база.
Если не включен WAL - читатели ещё и блокируют писателя. WAL не включить, если клиенты обращаются по сети с разных хостов.
Вообще, в самый момент появления в 1С логов в sqlite я задавался вопросом - зачем, а главное, нахрена?
ИМХО, логи должны быть максимально быстрыми на запись, то есть в максимально "сыром" виде, а вот для анализа потом отдельными инструментами в спокойном режиме агрегироваться.
WAL в sqlite может использоваться только если все обращения к базе данных производятся с одного компа.
Первое же ограничение на https://www.sqlite.org/wal.html:
Если там кластер серверов, пишущих в один файл sqlite - WAL не включить.
Что совой об пень, что пнём об сову.
Точно 46 светодиодов? Я увидел 26 латинских букв и 10 цифр.
UPD: На гитхабе написано 40.
Я так понимаю, тут последний этап уже автоматизирован. А как вопрос ей внутрь попадает?
Огромное спасибо! Непременно попробую.
И исключат из схемы человека, как самое слабое звено?
Сдается мне, что написать такой промпт будут сложнее, чем просто код написать.
Не зря говорят - "В правильно заданном вопросе уже половина ответа". А тут уже 90%. И для 1С :)
Дополню предыдущий ответ.
Вот тут результат бенчмарка как раз сравнение
std::stringstream
,std::format
и строк simstr на задаче Сформировать "текст число текст".Спасибо. Стало более понятно. Как я понял, возможен слой неких разных "агентов", которые умеют работать с входными данными разных видов и передавать их в ИИ в формате, который понимает конкретный ИИ.
Как-то вы странно вопрос ставите. Почему сразу "на замену"? Этот как говорить "шуруповёрт на замену перфоратору, стамеска на замену рубанку". Для каждой задачи лучше подбирать подходящий инструмент.
И эта либа - просто ещё один инструмент в ряду многих. И как же он может быть на замену
format
, если сам format там используется? format просто отличная вещь для своих целей, не надо его заменять.stringstream
тоже решает свои задачи, хотя судя по бенчмаркам, не очень быстро.Ответ в стиле "Если вы заблудились, просто идите домой". Спасибо.
Я как раз и спрашивал, как это технически делается? Вот этот вот ваш ИИ, он с нами в одной комнате (локальный какой-то) или это где-то сервис в облаке? Продаж за квартал, допустим, под миллион, лежат в базе 1С. Как мне их дать этому ИИ? Если ИИ локальный, то надо как то их перекачать куда-то в его базу и потом на GPU он на них будет обучаться? А если в облаке? Ему надо дать доступ в БД? Он запрос сам напишет или ему надо текст запроса дать? Или надо в чате просто в CSV-формате вбить?
Вы не подумайте, я не ёрничаю, не издеваюсь, я просто для себя понять хочу, как это чудо работает?
Я частенько к рабочему компу подключаюсь через RDP и бывает там же и в инете брожу. Меня сразу за бота примут?
Я нейросетками как-то не увлекаюсь и профан, поэтому вопрос - вот в таком промпте "Проведи анализ данных о продажах за последний квартал" - где оно будет брать эти данные, из коих и возникает синекдоха отвечания? Их надо как-то подготовить и "скормить" нейросетке? Как это технически происходит?
Да, примерно так и планировалось, очень хотелось максимально оптимизировать построение строк. Хотя, конечно, не все задачи пока можно им сделать, но я работаю над этим :)
В бенчмарках как раз последний бенчмарк Build Full Func Name на такой типичный билдер строк.
Собственно, в статье не увидел особой конкретики, кроме того, что увеличилось время сборки, если пихать auto без раздумывания. И что "мы сидим под Visual Studio, на новом стандарте какие-то мувалки и элиминации через регистры, я не просил". То, что время сборки увеличилось из-за более продвинутой оптимизации и продуктовый код будет работать быстрее - ни слова. Игрострой сидит на C++17 потому что "работает - не трогай", вот почему. Чтобы перейти на C++20 в-первую очередь задаются вопросом "а чтобы что?". Переход однозначно вызовет трату ресурсов - протестировать, починить то, что в С++17 работало, а в C++20 перестало или заработало не так (на их любимом MSVC). Вообще, не понимаю - в игрострое они все говорят, что ничего из std не пользуют, ибо "не перформит", всё у них своё, самописное. Так по идее тогда им какая разница то особо, какой стандарт?
Самое критичное у меня при обновлении было где-то в начале нулевых, когда MSVC привели в соответствии со стандартом и переменные, объявленные в заголовке
for
, стали видны только вfor
, и не дальше. Да и потом - сколько не помню проблем при обновлениях - всегда было обычно то, что MSVC что-то начинал делать в соответствии со стандартом, а не так, как хотел.А по поводу моей либы - так как там используется std::format, то GCC из коробки умеет только с 13ой версии. На ранешних - не заработает без переделок. Попробую заняться этим - либо отключать эти фичи, либо тащить
fmt::format
.От концептов и requires тоже в-принципе можно отказаться, но очень многословный код получится, со всеми этими enable_if.
И что вам даст эта информация? Чьё то праздное любопытство мне лень удовлетворять. Если вам что-то надо от этого функционала, говорите прямо. Если есть какая-то конкретная критика - говорите прямо. Если вам это не нужно - тогда просто не пользуйтесь. Если хотите знать, кому это надо - устройте опрос, я не могу за других людей отвечать.
Спросите у авторов проектов, наверное. Я то тут при чём?
Если у вас есть претензии к std::towupper, задайте вопрос ответственным за стандарты, что она до сих пор там делает.