std.getopt

Jens Mueller jens.k.mueller at gmx.de
Sun Jul 17 06:49:11 PDT 2011


Mike Wey wrote:
> On 07/17/2011 11:06 AM, Jens Mueller wrote:
> >Andrei Alexandrescu wrote:
> >>On 7/16/11 8:58 AM, Jens Mueller wrote:
> >>>Trass3r wrote:
> >>>>Why doesn't std.getopt support standard unix style like 'make -j 4'?
> >>>>
> >>>>"uint timeout;
> >>>>getopt(args, "timeout|t",&timeout);
> >>>>To set timeout to 5, use either of the following: --timeout=5,
> >>>>--timeout 5, --t=5, --t 5, or -t5. Forms such as -t 5 and -timeout=5
> >>>>will be not accepted."
> >>>>
> >>>>Also it doesn't make any sense to me that --t=5 and --t 5 is allowed
> >>>>in this case.
> >>>>I expected the short alias only to be used with a single dash.
> >>>
> >>>I agree. Not supporting -t 5 is no good. std.getopt took its inspiration
> >>>from Perl's Getopt::Long (http://perldoc.perl.org/Getopt/Long.html)
> >>>which supports it as well.
> >>>
> >>>I'm unsure about --t=5 and --t 5. I don't like them but I don't have to
> >>>use them. But without them the rules would be simpler but removing them
> >>>may break code. Adding -t 5 is safe I think.
> >>>And maybe we enhance the documentation a bit such that more common
> >>>choices are given first and less known but still supported later.
> >>>
> >>>If Andrei agrees maybe you or I can create a pull request for -t 5 and
> >>>enhancing the documentation regarding -- for short options.
> >>>
> >>>BTW
> >>>-timeout=5 is accepted but it shouldn't. I just wrote unittests for all
> >>>combinations.
> >>>
> >>>Jens
> >>
> >>Yes please. So, this stuff should work if we have t|timeout bound to
> >>an integral:
> >>
> >>-t5, -t 5, --timeout 5, --timeout=5
> >>
> >>This stuff should not:
> >>
> >>-t=5, -timeout 5, -timeout=5
> >>
> >>Right?
> >
> >--timeout 5 and --timeout=5 work as expected.
> >--timeout5 fails as expected.
> >
> >-t5 works as expected.
> >But -t 5 fails (I will try to fix).
> >
> >And you don't want -t=5, -timeout 5, and -timeout=5 to work?
> >Currently they all pass as unexpected. Should I make them fail?
> >-timeout5 fails as expected.
> >
> >What about
> >--t 5 (works currently)
> >--t=5 (works currently)
> >--t5 (fails currently)
> >
> >These are all 12 combinations of "--" or "-" and "t" or "timeout" and
> >"=5", " 5", or "5".
> >
> >Jens
> 
> I think you generally want long arguments like "timeout" to start
> with "--" and the one character ones like "t" to start with "-".

That's true. It's only that changing it means breaking code. Though I
don't believe that there are many scripts out there. But for example dmd
uses long options without double dashes.
I'm up to change this hoping it won't break too much code.

> Also with "--timeout5" the 5 might be seen as part of the flag and
> shouldn't be allowed.

Very true. It's correct that --timeout5 fails.

Jens


More information about the Digitalmars-d mailing list