std.getopt

Mike Wey mike-wey at example.com
Sun Jul 17 03:02:09 PDT 2011


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 "-".

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

-- 
Mike Wey


More information about the Digitalmars-d mailing list