Size: a a a

2021 March 01

АР

Андрей Руссков... in pro.cxx
waitaminute. Если в проекте отключены exception'ы, то что же произойдет при попытке их выкинуть, если не terminate?
источник

W

Wild_Wind in pro.cxx
Андрей Руссков
waitaminute. Если в проекте отключены exception'ы, то что же произойдет при попытке их выкинуть, если не terminate?
Он и произойдет. Но если ты уверен, что на конкретно этом кейсе, с конкретно такими параметрами, ексепшен точно не вылетит, то ты можешь использовать стандартную библиотеку, предварительно обмазавшись ассертами, на случай изменения входных данных.

Классно, да?
источник

АР

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

АР

Андрей Руссков... in pro.cxx
или если писать везде noexcept
источник

W

Wild_Wind in pro.cxx
Андрей Руссков
ну по сути если бы компиляторы умели хоть чуточку оптимизировать исключения, так бы оно и было
Ага. И не вылетали бы ото всех щелей, что ужасно усложняет верификацию контроля потока исполнения.
источник

DS

Dmitry Sokolov in pro.cxx
Андрей Руссков
и опять же, я не проверял, но по идее format должен уметь в форматтер, объявленный через ADL
Там вроде вообще нет ADL, только специализации как для hash. Я вот тоже экспериментирую с аналогом format и мне показался наиболее удобным для перегрузок (не исключая formatter, просто как один из вариантов) detect функций вроде T::format(format_context&) const.
источник

DS

Dmitry Sokolov in pro.cxx
Dmitry Sokolov
Там вроде вообще нет ADL, только специализации как для hash. Я вот тоже экспериментирую с аналогом format и мне показался наиболее удобным для перегрузок (не исключая formatter, просто как один из вариантов) detect функций вроде T::format(format_context&) const.
Detect member функции сужает lookup, не загрязняет namespace в отличие от ADL и не увеличивает число перегрузок formatter<T>.
источник

DS

Dmitry Sokolov in pro.cxx
С constexpr строками пока всё мне кажется выглядит слишком сложно, это макросы и хаки с порождением типов под каждую используемую строку. Как proof of concept сойдёт, но для реальных проектов я не уверен что взлетит. Поэтому Зверович и предлагает втащить в компилятор. Я б ещё валидаторы сделал отдельными функциями, это мне кажется иногда проще сделать constexpr чем писать constexpr parser (да и нужен ли он, всё равно форматирование то реальное не constexpr).
источник

АК

Александр Караев... in pro.cxx
Dmitry Sokolov
С constexpr строками пока всё мне кажется выглядит слишком сложно, это макросы и хаки с порождением типов под каждую используемую строку. Как proof of concept сойдёт, но для реальных проектов я не уверен что взлетит. Поэтому Зверович и предлагает втащить в компилятор. Я б ещё валидаторы сделал отдельными функциями, это мне кажется иногда проще сделать constexpr чем писать constexpr parser (да и нужен ли он, всё равно форматирование то реальное не constexpr).
Парсер и форматтер уже на две части разделены, причем первый вроде constexpr (в fmtlib по крайней мере)
источник

DS

Dmitry Sokolov in pro.cxx
И кстати, выделение валидатора позволило бы делать format без разделения на parse/format. Иногда (например в chrono) это вообще странно.
источник

DS

Dmitry Sokolov in pro.cxx
Александр Караев
Парсер и форматтер уже на две части разделены, причем первый вроде constexpr (в fmtlib по крайней мере)
Да, я про это и говорю, экспериментирую с detect функций типа format(format_context&) и format(parse_context&, format_context&).
источник

АК

Александр Караев... in pro.cxx
Dmitry Sokolov
Да, я про это и говорю, экспериментирую с detect функций типа format(format_context&) и format(parse_context&, format_context&).
Тогда я не понял, в чем отличие валидатора от парсера форматной строки в текущем его виде
источник

DS

Dmitry Sokolov in pro.cxx
Александр Караев
Тогда я не понял, в чем отличие валидатора от парсера форматной строки в текущем его виде
Тут как с printf иногда, как в chrono, идёшь по строке и вставляешь что сказали. Валидация - просто проверка того что все подстановки %x известны.
источник

m

magras in pro.cxx
Wild_Wind
А ещё хочется consteval format.
И я опять пойду писать свой костыль :(

Доколе?
Превратить constexpr в consteval кажется можно одной шаблонной функцией-оберткой.
источник

DS

Dmitry Sokolov in pro.cxx
Александр Караев
Тогда я не понял, в чем отличие валидатора от парсера форматной строки в текущем его виде
Ну то есть валидация это проверить что там только %y%m etc. А разделение парсинга/форматирования по сути не нужно, дедовским способом просто при проходе аппендить через switch(spec).
источник
2021 March 02

АК

Александр Караев... in pro.cxx
Dmitry Sokolov
Ну то есть валидация это проверить что там только %y%m etc. А разделение парсинга/форматирования по сути не нужно, дедовским способом просто при проходе аппендить через switch(spec).
Так в итоге у тебя if (c == 'y') для %y будет дублироваться - один раз в валидаторе (проверить список всех валидных флагов) и в парсере. Плюс в валидаторе придется учесть, что бывают разные %08X, где при валидации иногда не важно, что за 08 стоит, но при парсинге придется вновь по ним идти.
источник

DS

Dmitry Sokolov in pro.cxx
Александр Караев
Так в итоге у тебя if (c == 'y') для %y будет дублироваться - один раз в валидаторе (проверить список всех валидных флагов) и в парсере. Плюс в валидаторе придется учесть, что бывают разные %08X, где при валидации иногда не важно, что за 08 стоит, но при парсинге придется вновь по ним идти.
Валидатор считаем работает только в constexpr.
источник

АК

Александр Караев... in pro.cxx
Dmitry Sokolov
Валидатор считаем работает только в constexpr.
И в чем отличие от парсера? Возникает ощущение, что валидатор - это парсер, который выкинул результат парсинга и просто убедился, что парсинг успешен
источник

DS

Dmitry Sokolov in pro.cxx
Александр Караев
И в чем отличие от парсера? Возникает ощущение, что валидатор - это парсер, который выкинул результат парсинга и просто убедился, что парсинг успешен
Ну вот что должно быть например результатом парсинга chrono чтобы использовать в format потом?
источник

АК

Александр Караев... in pro.cxx
Dmitry Sokolov
Ну вот что должно быть например результатом парсинга chrono чтобы использовать в format потом?
Набор символов, определяющий способ форматирования даты. В виде вьюхи или массива чаров
источник