Fixing valid options for std.getopt

Jonathan M Davis jmdavisProg at gmx.com
Thu Aug 11 01:14:41 PDT 2011


On Thursday, August 11, 2011 10:02:38 Jens Mueller wrote:
> Jonathan M Davis wrote:
> > On Wednesday, August 10, 2011 15:28 Jens Mueller wrote:
> > > D's getopt is actually modeled after Perl's Getopt::Long
> > > (http://perldoc.perl.org/Getopt/Long.html). Linux's getopt is
> > > actually
> > > different in the details but I believe D's getopt is easy to use in
> > > comparison.
> > 
> > Well, D's getopt should be fairly standard it terms of default behavior,
> > and it should be reasonably easy to use. As it stands, it's pretty easy
> > to use. I think that my main gripe is
> > http://d.puremagic.com/issues/show_bug.cgi?id=5228 , but better sorting
> > out its behavior like you're doing is a definite improvement IMHO.
> 
> Didn't know of this report. There are also other regarding getopt that I
> should check.
> I will have a look when I'm finished with the current changes. Since the
> report is concerned with exception reporting it'll be nice to have some
> specific examples where the thrown exception is not good enough. Maybe
> you can add the specific usage examples that you found.

I'd have to mess around with getopt for a bit to get a good feel for exactly 
what I'd like out of a specific exception, but the prime example would be that 
a GetOptException would be able to tell you exactly which flag failed and what 
the value was that was used with it. A ConvException is incredibly generic 
about the problem. If I had

--flag=stuff --option=stuff

and one of those was supposed to take an int instead of a string, then the 
ConvException is only going to tell you what the string was that faild to 
convert - not what flag it was for - and regardless, it doesn't tell you in a 
way that's easy for the program to determine what happened.

Ideally, _no_ exceptions would be seen by the user, and for the program to be 
able to give the user adequate feedback on which flag failed and why it failed, 
the program needs an exception which actually tells it what failed and why. 
Right now, all it gets is that a conversion in one of the flags failed, which 
just doesn't cut it if you want to figure out what went wrong so that you can 
give the user decent feedback.

- Jonathan M Davis


More information about the Digitalmars-d mailing list