RTS option parsing

Simon Marlow marlowsd at gmail.com
Tue Aug 13 12:42:46 CEST 2013

It's probably best not to rely on external libraries for this.

I'd be happy with representing the options as data rather than code, 
along with a generic parser.  Performance is very likely a non-issue, 
but you could always do something really simple like bucketing the 
options based on the first character.


On 10/08/13 02:54, David Laing wrote:
> Hi Edward,
> I was more worried about the effect that it would have on the 2nd tier
> platforms, some of which don't have getopt_long_only - which I think is
> desirable due to the two-character short options that need to be dealt
> with.
> My feeling is that writing and maintaining a correct getopt_long_only as
> a fallback for those platforms - which I assume someone would have to do
> - might take more effort than putting togther something less general /
> more tailored to how the RTS parses the options.
> I've been idly thinking about how to approach this problem enough that I
> think I'm going to put some proof-of-concept code together just to test
> the ideas / so my metaphorical teeth stop itching.
> At the core of the idea is the options would be stored in an array of
> structs of the form
>    {option-string, has_argument, is_safe, function_pointer_to_handler}
> where the function pointer is probably of the form
>    int(RtsFlags*, some-error-info-struct*)
> or possibly
>    int(RtsFlags*, some-cross-option-information-sharing-struct*,
> some-error-info-struct*)
> I've been in the C++ world for a while now, so I'll need to double check
> the standard / idiomatic way to express that in C.
> If options don't effect anything but the flags or the error state, it
> seems to me that the overall complexity of the option parsing code would
> drop.  I don't know what the priority of option parsing performance is,
> but there are quite a few optimisations available that wouldn't
> complicate the code all that much.
> If anyone has any thoughts on this, I'd love to hear them before I get
> too far along.
> Cheers,
> Dave
> On Sat, Aug 10, 2013 at 10:09 AM, Edward Z. Yang <ezyang at mit.edu
> <mailto:ezyang at mit.edu>> wrote:
>     Hi David,
>      > I was initially thinking of something like getopt_long_only, as per:
>      > http://linux.die.net/man/3/getopt_long
>      > however it looks like the portability of that function isn't the
>     greatest,
>      > and from looking at rts/RtsFlags.c:procRtsOpts(...) it might not
>     be the
>      > best solution.
>     That's not necessarily true; we target MingW for Windows compilation,
>     so if you can make sure it works there getopt_long may be viable.  On
>     the other hand, maintaining backwards compatibility may be tricky.
>     Some investigation is probably necessary.
>     Edward
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://www.haskell.org/mailman/listinfo/ghc-devs

More information about the ghc-devs mailing list