Standardizing the flags that enable non-standard language 
extensions seems to me as going too far.  There's really no 
substitute for standardizing the language if we want to achieve 
portability.  However, I also know that this can be a painful 
process...

So maybe we could agree on turning on a few mature extensions by 
default instead, now that they have found their way into general 
libraries anyway.  Multi-parameter type classes and local 
quantification comes to my mind here.  But I don't know what 
started this discussion, so perhaps the concern is more about 
features that don't fit into the world of "semi-standard" 
Haskell.

-- Johan

On Monday, June 18, 2001, at 10:13  AM, Alastair David Reid wrote:

>
> [Hugs maintainer (Johan) added to list]
>
> Writing about providing compiler-specific flags in package
> descriptions, Simon Marlow <[EMAIL PROTECTED]> writes:
>
>> According to the Principle of Least Astonishment, we should
>> force the user to add any extra options himself, because if
>> '-package wibble' automatically adds a number of
>> language-feature options then it's just too magical and
>> non-obvious.
>
>> On the other hand, I presume you *need* these options in
>> order to be able to use Docon, so adding them automatically
>> would seem reasonable.
>
>> Opinions, anyone?
>
> I see 3 issues here:
>
> 1) The extra options may enable non-standard language features required
>    to compile the code and/or used in the API.
>
>    This seems entirely cool.
>    If the extensions are visible in the API, the user already knows
>    about them and will know to add the same flags when compiling their
>    code.
>    If the extensions only show up in .hi files, the compiler should
>    accept use of those extensions without additional flags.
>
>    (Though it seems cool in practice, this may not actually work
>    in reality.  For example, the -98 flag on Hugs can only be changed
>    by restarting Hugs because the authors of the flag doubt that it
>    would work if you changed the flag between modules because of a
>    combination of implementation issues and semantic issues.)
>
> 2) Portability
>
>    GHC, Hugs and NHC require different sets of flags to enable non-H98
>    extensions so the GHC flags that enable use of rank 2 polymorphism
>    (say) are different from those used with Hugs.
>
>    The obvious fix would be to standardise the set of flags used by
>    each compiler.  Two obstacles:
>
>    1) Hugs historic use of single-letter flags.
>       (This could actually work to our advantage - multi-letter flags
>       have never been used.)
>
>    2) Different compilers may carve up the extension space in different
>       ways.  Most notably, NHC doesn't have all the typesystem 
> extensions
>       of Hugs/GHC.
>
>    Another approach which may (???) be better would be to name each
>    of the extensions (TREX, PreemptiveConcurrency, 
> CooperativeConcurrency,
>    ImplicitParameters, ...) and then list which ones are 
> required by each
>    package.  It would be up to the package manager for each compiler to
>    translate that set of flags into concrete flags for passing to the
>    compiler.  This approach is a bit like using autoconf-style feature
>    tests.
>
> 3) Some flags defy efforts at portability - even between versions.
>
>    For example, I very much doubt that the heapsize flags I used with
>    GHC 0.16 on an Alpha are appropriate for use with GHC 5.x on an x86
>    never mind their relevance for Hugs.
>
>    Not a lot can be done about this - go ahead and provide
>    "Extra_{GHC,Hugs,NHC,HBC}_Flags" (or whatever it was called).
>
> --
> Alastair Reid        [EMAIL PROTECTED]        
> http://www.cs.utah.edu/~reid/
>

_______________________________________________
Glasgow-haskell-bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to