В форум "Исходники" не пощу, потому что интересно получить пинков именно по моему "C++"
Надо же как-то расти
Да ну и просто в профильном очень мало постов, по сравнению с политиками
Ну и по доке тоже пинки приветствуются
Библиотека предназначена для встройки в кастомную динамику, поэтому я не задрачивался на всякие новые фишки плюсов — constexpr/constinit/consteval
Одна из базовых фич — совмещение форматной строки С++20 std::format и форматных строк питона — можно использовать без модификации и то и другое.
Но либу можно и из плюсиков нативно использовать, передавая аргументы через std::initializer_list{...}
Возможности библиотеки
Добавление возможностей C++ std::format из C++20 в C++17 (бэкпорт новых фич в старый стандарт).
Совместимость форматной строки с форматной строкой языков Python и C++. Некоторые возможности этих языков игнорируются, но не вызывают ошибки при разборе форматной строки. В библиотеке совмещены возможности форматирования из языка `Python` и возможности форматирования `C++20` `std::format`.
Поддержка именованных аргументов для C++ при использовании соответствующих контейнеров для аргументов.
Поддержка передачи аргументов через std::initializer_list для непосредственного использования из C++.
Упор на использование библиотеки в своих скриптовых языках/DSL языках.
Поддержка Unicode в кодировке UTF-8.
Поддержка чисел с плавающей точкой произвольной размерности marty::Decimal.
Поддержка пользовательских типов строк вместо std::string и поддержка микроконтроллеров (STM32, как пример). Пока не реализовано, но весьма ready, требует отключения части кода условными макросами, также требуется модифицировать некоторые части, пока завязанные на std::string.
Возможность создания собственной системы/библиотеки форматирования на базе данной библиотеки с поддержкой вывода собственных произвольных типов данных.
Собственно, форматирование по всем правилам форматной строки пока не реализовано, оно будет делаться по мере необходимости, и после того, как я решу, как быть с некоторыми проблемами — например, как быть, если спецификатор типа в форматной строке никак не соответствует фактическому параметру.
Пока всё обрабатывается без ошибок через вставку текста при помощи обёрток над std::to_string.
Здравствуйте, Marty, Вы писали:
M>Библиотека предназначена для встройки в кастомную динамику, поэтому я не задрачивался на всякие новые фишки плюсов — constexpr/constinit/consteval M>Одна из базовых фич — совмещение форматной строки С++20 std::format и форматных строк питона — можно использовать без модификации и то и другое. M>Но либу можно и из плюсиков нативно использовать, передавая аргументы через std::initializer_list{...}
M>Возможности библиотеки
Обычно инструмент, должен решать какие-то задачи или устранять рутину, а вот уже возможности вытикают из имеющихся ограничений.
M> * Добавление возможностей C++ std::format из C++20 в C++17 (бэкпорт новых фич в старый стандарт).
То есть c++17 это минимальное требование. M> * Совместимость форматной строки с форматной строкой языков Python и C++. Некоторые возможности этих языков игнорируются, но не вызывают ошибки при разборе форматной строки. В библиотеке совмещены возможности форматирования из языка `Python` и возможности форматирования `C++20` `std::format`. M> * Поддержка именованных аргументов для C++ при использовании соответствующих контейнеров для аргументов.
Это здорово M> * Поддержка передачи аргументов через std::initializer_list для непосредственного использования из C++. M> * Упор на использование библиотеки в своих скриптовых языках/DSL языках.
В скриптовых языках есть более удобное форматирование например https://jinja.palletsprojects.com/en/stable/templates/https://docs.phalcon.io/4.2/volt M> * Поддержка Unicode в кодировке UTF-8.
А как вы ширину utf8 строки считаете для выравнивания текста? M> * Поддержка чисел с плавающей точкой произвольной размерности marty::Decimal.
Серьёзно по основанию 10? Это чисто для бухгалтерии тольео такое надо. M> * Поддержка пользовательских типов строк вместо std::string и поддержка микроконтроллеров (STM32, как пример). Пока не реализовано, но весьма ready, требует отключения части кода условными макросами, также требуется модифицировать некоторые части, пока завязанные на std::string.
А отключить тесты можно?
M> * Возможность создания собственной системы/библиотеки форматирования на базе данной библиотеки с поддержкой вывода собственных произвольных типов данных.
А фильтры можно? Типа {{x|filter1|filter2}} => filter2(filter1(x)). (Что бы можно было sql запросы наример или xml экранировать строки или просто camelcase делать). Можноли изменить кастомизировать функцию расчета ширины.
M>Собственно, форматирование по всем правилам форматной строки пока не реализовано, оно будет делаться по мере необходимости, и после того, как я решу, как быть с некоторыми проблемами — например, как быть, если спецификатор типа в форматной строке никак не соответствует фактическому параметру. M>Пока всё обрабатывается без ошибок через вставку текста при помощи обёрток над std::to_string.
M>Шамжа шлак приносит, а дискуссии несколько экранов занимают.
Так вы не правильно вопросы задаёте.
Надо не вот, зацените, какие замечания. Что требует установить, собрат, прогнать тестовые сценарии, осмотреться и ещё кучу действий. Мало лишь кто способен просто так колупаться в чужом коде, более требующее длительного погружения, без везких причин.
Вы бы начали с примеров, как всё красиво и компактно и вот если сделать так то будет счастье, и ссылку на счастье.
Шамжа приносить темы обсуждение котрыех не требует больших усилий, иногда и смысла там тоже не много. Зато он их наваливает, как-будто ему за это платят
Здравствуйте, Marty, Вы писали:
M>Я хоть какую-то годноту принёс на попороть, никто не отвечает.
Посмотрел примеры использования, не нашёл
formatMessage("{} + {} = {}", 2, 2, 4)
в лучшем случае
formatMessage("{} + {} = {}", {2, 2, 4})
прикрути воредики, несложно ж должно быть.
Ну разбивает строку по плейсхолдерам, есть именованные плейсхолдеры, что неплохо.
Можно ли докопаться что возвращается стринг аллоцирующий память, а не структура из ссылок на подстроки? Да пофиг, это никогда не даст заметного влияния на скорость в реальной программе.
По коду не знаю, что сказать, некоторые приколы только в процессе использования проявляются.
Реальные косяки тут не определить. У меня бывало что при определении вывода для кастомного типа в шаблонах что-то ехало не туда и в дебаге программа падала, потому что долго объяснять, я пол-дня убил чтоб понять.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
M>>Возможности библиотеки _>Обычно инструмент, должен решать какие-то задачи или устранять рутину, а вот уже возможности вытикают из имеющихся ограничений.
Я решал проблему встройки форматирования в мой очередной изобретаемый DSL
M>> * Добавление возможностей C++ std::format из C++20 в C++17 (бэкпорт новых фич в старый стандарт). _>То есть c++17 это минимальное требование.
Да, 17ый стандарт есть уже практически везде, чего пока не сказать о C++20
M>> * Совместимость форматной строки с форматной строкой языков Python и C++. Некоторые возможности этих языков игнорируются, но не вызывают ошибки при разборе форматной строки. В библиотеке совмещены возможности форматирования из языка `Python` и возможности форматирования `C++20` `std::format`. M>> * Поддержка именованных аргументов для C++ при использовании соответствующих контейнеров для аргументов. _>Это здорово
А можно носом ткнуть? Джинджа вроде же питоновская либа, форматирование там питоновское. По крайней мере, то, что по ссылке, выглядит питоновским
M>> * Поддержка Unicode в кодировке UTF-8. _>А как вы ширину utf8 строки считаете для выравнивания текста?
Пока костыльно, есть список пробелов нулевой ширины и диапазоны диакретиков, на 95% случаев должно хватит. Если приспичит, буду думать, как присунуть поддержку i18n или как оно там
M>> * Поддержка чисел с плавающей точкой произвольной размерности marty::Decimal. _>Серьёзно по основанию 10? Это чисто для бухгалтерии тольео такое надо.
Да. Именно для бухгалтерии и делалось, а точнее — для экспериментов с торговлей на бирже
M>> * Поддержка пользовательских типов строк вместо std::string и поддержка микроконтроллеров (STM32, как пример). Пока не реализовано, но весьма ready, требует отключения части кода условными макросами, также требуется модифицировать некоторые части, пока завязанные на std::string. _>А отключить тесты можно?
Да, наверное можно. Я пока проблем не огрёб с этой либой, но полагаю, они могли появиться после того, как я "опакетил" эту либу под CMake. Спасибо за подсказку
M>> * Возможность создания собственной системы/библиотеки форматирования на базе данной библиотеки с поддержкой вывода собственных произвольных типов данных. _>А фильтры можно? Типа {{x|filter1|filter2}} => filter2(filter1(x)). (Что бы можно было sql запросы наример или xml экранировать строки или просто camelcase делать). Можноли изменить кастомизировать функцию расчета ширины.
Пока нет. Если накинешь ссылку на спецификацию этих фильтров, я подумаю, можно ли
_>Надо не вот, зацените, какие замечания. Что требует установить, собрат, прогнать тестовые сценарии, осмотреться и ещё кучу действий. Мало лишь кто способен просто так колупаться в чужом коде, более требующее длительного погружения, без везких причин. _>Вы бы начали с примеров, как всё красиво и компактно и вот если сделать так то будет счастье, и ссылку на счастье.
Ну, в доке там примеры есть
Наверное, надо было их скопировать для затравки
_>Шамжа приносить темы обсуждение котрыех не требует больших усилий, иногда и смысла там тоже не много. Зато он их наваливает, как-будто ему за это платят
Это да. А мне хочетелось бы нормальной порки, чтобы расти как разработчику, что требует некоторого погружения от читателей. Думал, что либа форматирования — годный повод для такого
Здравствуйте, T4r4sB, Вы писали:
M>>Я хоть какую-то годноту принёс на попороть, никто не отвечает.
TB>Посмотрел примеры использования, не нашёл TB>
TB> formatMessage("{} + {} = {}", 2, 2, 4)
TB>
Этого нет пока, да
TB>в лучшем случае
TB>
TB> formatMessage("{} + {} = {}", {2, 2, 4})
TB>
Хм, разве пример "Используем std::initializer_list<marty::format::FormatArgumentVariant>" не об этом?
TB>прикрути воредики, несложно ж должно быть.
Я на полпути, как раз решил собрать критику, чтобы в конце не узнать, что я где-то кардинально обосрался в начале пути, и далеко не всё реализовано.
И да, может, есть какой-то идиоматический приём, который позволяет малой кровью собрать вариадик параметры в initializer_list?
TB>Ну разбивает строку по плейсхолдерам, есть именованные плейсхолдеры, что неплохо.
Спс
TB>Можно ли докопаться что возвращается стринг аллоцирующий память, а не структура из ссылок на подстроки? Да пофиг, это никогда не даст заметного влияния на скорость в реальной программе.
Можно. Но у меня возвращается не std::string, а typename StringType, и именно потому, что я работаю эмбеде в тч, и тут местами зоопарки строк, многие из которых хранят строку непосредственно в своём теле. И саму либу форматирования я старался дизайнить с учётом подобных строк, но местами мог профукатся, плюс зависимые либы, которые я делал без оглядки на эмбед — я об этом написал, это уже вопрос полировки, когда основной функционал будет реализован.
TB>По коду не знаю, что сказать, некоторые приколы только в процессе использования проявляются.
Ну, в соседнем топике коллеги нашли косяк в моей реализации is_bool, просто проглядев по диагонали мой код.
TB>Реальные косяки тут не определить. У меня бывало что при определении вывода для кастомного типа в шаблонах что-то ехало не туда и в дебаге программа падала, потому что долго объяснять, я пол-дня убил чтоб понять.
Спасибо, что потратил время на посмотреть мою либу
Здравствуйте, kov_serg, Вы писали:
_>А фильтры можно? Типа {{x|filter1|filter2}} => filter2(filter1(x)). (Что бы можно было sql запросы наример или xml экранировать строки или просто camelcase делать). Можноли изменить кастомизировать функцию расчета ширины.
Давай подробно, что бы ты хотел. Про фильтры и тп. Про кастомизацию расчета ширины поля.
Я открыт к обсуждению, для того и запилил топик.
Мне подобное не требовалось. Я пока насовал только то, что нужно было мне
И да, про фильтры и всё такое, накидай, как ты это видишь и тебе было бы удобно использовать
M>Давай подробно, что бы ты хотел. Про фильтры и тп. Про кастомизацию расчета ширины поля.
Всё очень просто функция расчета ширины должна быть параметром, что бы её можно было поменять.
Для форматирования таблиц и выравнивания текста, очень полезно, т.к. unicode сложный и могут быть сюрпризы, и иногда надо не utf8. M>Я открыт к обсуждению, для того и запилил топик.
M>Мне подобное не требовалось. Я пока насовал только то, что нужно было мне M>И да, про фильтры и всё такое, накидай, как ты это видишь и тебе было бы удобно использовать
M>>Давай подробно, что бы ты хотел. Про фильтры и тп. Про кастомизацию расчета ширины поля. _>Всё очень просто функция расчета ширины должна быть параметром, что бы её можно было поменять. _>Для форматирования таблиц и выравнивания текста, очень полезно, т.к. unicode сложный и могут быть сюрпризы, и иногда надо не utf8.
Можно сделать
M>>Мне подобное не требовалось. Я пока насовал только то, что нужно было мне M>>И да, про фильтры и всё такое, накидай, как ты это видишь и тебе было бы удобно использовать
_>Вот пример на lua: _>
Здравствуйте, Marty, Вы писали:
M>Фильтры отдельными параметрами передавать?
так же как и переменные по имени, это такая же переменная только значение функция
M>А ширина текста должна высчитываться до фильтров, или после?
это может быть параметром фильтра
Здравствуйте, Marty, Вы писали:
M>В общем, пинайте на здоровие — https://github.com/al-martyn1/marty_format
Стиль форматирование временами, что нету {} для единичных условий, есть лишнии куски закоментированного кода.
По виду наверное будет неплохо сделать класс где будет вместе const char *fmt и FormatArgumentVariantList, на него сверху string literal, ms, чтобы можно было потом писать
Здравствуйте, Igore, Вы писали:
M>>В общем, пинайте на здоровие — https://github.com/al-martyn1/marty_format I>Стиль форматирование временами, что нету {} для единичных условий, есть лишнии куски закоментированного кода.
Есть такое, потом почищу, если руки дотянуться
I>По виду наверное будет неплохо сделать класс где будет вместе const char *fmt и FormatArgumentVariantList, на него сверху string literal, ms, чтобы можно было потом писать I>
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, Igore, Вы писали:
M>>>В общем, пинайте на здоровие — https://github.com/al-martyn1/marty_format I>>Стиль форматирование временами, что нету {} для единичных условий, есть лишнии куски закоментированного кода.
M>Есть такое, потом почищу, если руки дотянуться
I>>По виду наверное будет неплохо сделать класс где будет вместе const char *fmt и FormatArgumentVariantList, на него сверху string literal, ms, чтобы можно было потом писать I>>
M>Не понял, а что за ms
Сокращение MartyString M>Не раскроешь мысль, а то не понятно
kov_serg правильно понял, я о user_literal, можно свои определять, чтобы меньше кода писать.
Как пример
Когда написал понял, что если будет отдельный класс где будет и строка форматирования и аргументы, то можно дополнительно переопределить вывод этого класс в поток и тогда убрать formatMessage в явном видет, оставить только
Здравствуйте, Igore, Вы писали:
M>>Не понял, а что за ms I>Сокращение MartyString
Тогда наверное — mf — MartyFormat
I>Когда написал понял, что если будет отдельный класс где будет и строка форматирования и аргументы, то можно дополнительно переопределить вывод этого класс в поток и тогда убрать formatMessage в явном видет, оставить только I>
Здравствуйте, Marty, Вы писали:
M>Да, так покороче получается. Надо подумать
Еще было бы неплохо какой-нибудь fwd.h где будут типы используемые, чтобы только его включать и там свои сокращения добавить
using FormatArguments = std::vector< std::pair<std::string, FormatArgumentVariant> >;
чтобы не писать длинно "std::vector< std::pair<std::string," в примерах.
Здравствуйте, Igore, Вы писали:
I>Еще было бы неплохо какой-нибудь fwd.h где будут типы используемые, чтобы только его включать и там свои сокращения добавить I>
I>чтобы не писать длинно "std::vector< std::pair<std::string," в примерах.
Ну, так-то для аргументов уже есть тип Args, плодить ещё разные StdVectorOfPairsArgs — имхо так себе идея, и это замыливает то, что можно использовать стандартные контейнеры, как раз то, что я в примерах хотел показать
Здравствуйте, Marty, Вы писали:
M>Шамжа шлак приносит, а дискуссии несколько экранов занимают. M>Я хоть какую-то годноту принёс на попороть, никто не отвечает.
Не в огорчение будет сказано. Во-первых, у тебя много кода, это ж вникать нужно. Во-вторых, С++17. Ну и в-третьих, ты не такой забавный, как Shmj.
--
Справедливость выше закона. А человечность выше справедливости.