LINUX.ORG.RU

argparse 3.0

 , , , ,

argparse 3.0

4

2

Состоялся выпуск 3.0 C++ (стандарт C++17) header-only библиотеки парсинга аргументов командной строки argparse, распространяемой по лицензии MIT.

Что нового:

  • добавлена поддержка взаимно исключающих аргументов:
auto &group = program.add_mutually_exclusive_group();
group.add_argument("--first");
group.add_argument("--second");
  • добавлен модуль C++20;
  • добавлена поддержка выбора из нескольких значений:
program.add_argument("input")
  .default_value(std::string{"baz"})
  .choices("foo", "bar", "baz");

program.add_argument("count")
  .default_value(0)
  .choices(0, 1, 2, 3, 4, 5);
  • добавлена поддержка двоичной нотации, например, 0b101:
argparse::ArgumentParser program("test");
program.add_argument("-n").scan<'b', uint8_t>();
  • добавлен перегруженный вариант is_subcommand_used, принимающий парсер подкоманд;
  • в ArgumentParser добавлен параметр exit_on_default_arguments;
  • добавлена поддержка скрытия подкоманд из вывода команды --help:
argparse::ArgumentParser program("test");

argparse::ArgumentParser hidden_cmd("hidden");
hidden_cmd.add_argument("files").remaining();
hidden_cmd.set_suppress(true);

program.add_subparser(hidden_cmd);
  • добавлена возможность проверки наличия разобранных значений в ArgumentParser;
  • добавлено выравнивание по столбцу многострочной справки для аргументов;
  • исправлены многие ошибки.

>>> Подробности

★★★★

Проверено: maxcom ()
Последнее исправление: cetjs2 (всего исправлений: 2)

Ответ на: комментарий от dataman

Где исправить

Я предлагаю в исправлять в библиотеках языка Клаус.

почему исправить

Потому что нужно нести прогресс всем странам и народам мира, а нашему - в первую очередь.

кто будет этим заниматься

лучшие программисты народа.

Shushundr ★★★
()

Разбор аргументов командной строки это действительно настолько сложная и объёмная задача, что требует нескольких тысяч строк кода?

alex1101
()
Ответ на: комментарий от alex1101

Да, если хочется многофункциональности.
Посмотри clap для Раста. Для C++ и близко нет ничего похожего по возможностям.

dataman ★★★★
() автор топика
Ответ на: комментарий от alex1101

У них, я думаю, просто не правильная идеология. Что по сути есть ARGS, это СТРУКТУРА, со всем вытекающим.

mx__ ★★★★★
()
Последнее исправление: mx__ (всего исправлений: 1)
Ответ на: комментарий от sena

Тем, что нет зависимостей, кроме std.

dataman ★★★★
() автор топика
Ответ на: комментарий от dataman

Тяжеловесное универсальное решение, одним словом, швейцарский нож. Не очень понятно, в каких случаях его выбор может быть оптимальным решением.

alex1101
()
Ответ на: комментарий от alex1101

Во всех, кроме очень ограниченного списка особых случаев.

intelfx ★★★★★
()
Ответ на: комментарий от Shushundr

Нахера тебе это в библиотеке для разбора аргументов командной строки? Возьми для этого какой-нибудь gettext.

Или ты хочешь сами ключи переводить на русский?

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Или ты хочешь сами ключи переводить на русский?

Не хотел, но после того, как Вы спросили, мне это показалось неплохой идеей.

Shushundr ★★★
()
Ответ на: комментарий от alex1101

Тяжеловесное универсальное решение

А в чём тяжеловесность заключается?

theNamelessOne ★★★★★
()
Ответ на: комментарий от alex1101

Не очень понятно, в каких случаях его выбор может быть оптимальным решением

Когда у тебя сложный интерфейс командной строки, например. Ясен пень, что использовать либы для чего-нибудь типа такого не стоит

myapp arg1 [optional_arg2] [--optional-switch]
theNamelessOne ★★★★★
()

Состоялся выпуск 3.0 C++ (диалект C++17) header-only библиотеки

А зачем хедер-онли библиотеке столько систем сборки нужно? Поддержку cmake вижу, и какой-то ещё xmake.lua… Это какая-то новомодная система сборки?

anonmyous
()
Ответ на: комментарий от theNamelessOne

Когда у тебя сложный интерфейс командной строки, например. Ясен пень, что использовать либы для чего-нибудь типа такого не стоит

При этом, для чего стоит - никто так и не написал. Для чего не стоит - и так понятно.

anonmyous
()
Ответ на: комментарий от anonmyous

При этом, для чего стоит - никто так и не написал

Для сложных интерфейсов командной строки, ёпта.

Почитай про фичи библиотеки в ридми. Если тебе нужны какие-то из них, то тогда стоит, возможно.

theNamelessOne ★★★★★
()

Для библиотеки выбирать C++17, если учесть, что разбор опций вещь довольно базовая, и может потребоваться чуть менее, чем везде…

seiken ★★★★★
()
Ответ на: комментарий от dataman

Да, от братьев-китайцев, любящих Lua:

И как она вам? (если вы разработчик) А то как раз поглядываю на современные системы сборки.

anonmyous
()
Ответ на: комментарий от dataman

Для аналога гита. :)

Почему для аналога? Сам гит как-то без этого обходится, или тоже использует что-то подобное?

anonmyous
()
Ответ на: комментарий от theNamelessOne

Почитай про фичи библиотеки в ридми.

Да это всё не интересно читать. Можно хоть древовидные структуры решить через ком строку передавать. Вопрос только, зачем. И вот, почему-то, на вопрос «когда не нужно» вы приводите пример, а на вопрос «когда нужно» - отправляете в ридми… Нет уж, давайте наоборот.

anonmyous
()
Последнее исправление: anonmyous (всего исправлений: 1)
Ответ на: комментарий от alex1101

Можешь почитать argparse, откуда эта библиотека и срисована. Группы опций, взаимоисключающие опции, зависимости опций, перечислимые значения, базовая валидация, подкоманды (и всё предыдущее внутри них), и прочее, прочее. При этом использование даже гнутого getopt превращается в квест, потому что он слишком дубовый.

liksys ★★★★
()
Ответ на: комментарий от anonmyous

Сам гит … тоже использует что-то подобное?

Да.

dataman ★★★★
() автор топика
Ответ на: комментарий от anonmyous

Я могу сравнивать только с xmake 5-6-летней давности. tup и premake5 очень простые, а tup ещё и очень быстрый.

dataman ★★★★
() автор топика

зачем нужно api с билдерами в проекте на C++17? Растоманы, блин, латентные.

Lrrr ★★★★★
()
Ответ на: комментарий от alex1101

Со всеми проверками параметров на валидность и совместимость в своей программе, легко наберётся еще столько же строк.

dataman ★★★★
() автор топика
Ответ на: комментарий от dataman

Я могу сравнивать только с xmake 5-6-летней давности. tup и premake5 очень простые, а tup ещё и очень быстрый.

По-моему, ваш туп - это просто экзекьютор сборочных рецептов, примерно как и ninja. Система сборки же должна, в первую очередь, помогать решать вопросы портабельности, отсутствия зависимостей, и пр. Вот xmake, судя по описанию, вполне годный комбайн. А туп тут никаким боком.

anonmyous
()
Ответ на: комментарий от anonmyous

xmake, судя по описанию, вполне годный комбайн

Вот именно, что комбайн. Приятной езды!

dataman ★★★★
() автор топика

Хочу такое же на Java/Kotlin, а то пришлось писать самому. В сишке хотя бы есть getopt.h. А так уже вижу что интерфейс у либы норм.

Skullnet ★★★★★
()
Ответ на: комментарий от anonmyous

зависимостей

Это должен пакетный менеджер (тот, который в комплекте с ОС) делать а не сборочная система.

firkax ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.