> Everything else can be served by either GHC20xx or warnings.

Let's unpack that statement a bit.  I think GHC20xx is a bit of a red herring ... it doesn't change rapidly enough, and there will always be people who want a different combination.

The thing about warnings is different.  I think you are suggesting that we should:
So a long {-# LANGUAGE X1, X2 #-} preamble will be replace with a long {-# OPTIONS_GHC -fno-warn-X1 -fno-warn-X2 #-} block.

Is that what you meant by "everything else best served by warnings"?

I think that is a consistent position for extensions that use new syntax.  But
  • Not all extensions use new syntax (e.g. -XPolyKinds).
  • You say "the only exception being for experimental/unstable language features and language features with a performance impact", but
    • if an experimental/unstable feature uses new syntax, it would again be fine with "Warning: you are using an experimental feature"
    • Ditto features that use new syntax with a perf impact
    • what about RebindableSyntax or Strict, which change semantics but add no new syntax?
  • It's not clear to me that saying `OPTIONS_GHC -no-warn-X1` is superior to `LANGUAGE X1`.  In fact I mildly prefer the latter
  • It'd be a big upheaval to get from where we are, to get there
But it is a consistent position.   Are you advocating that change?

Simon

On Thu, 27 Apr 2023 at 08:35, Simon Marlow <marlowsd@gmail.com> wrote:
This is interesting. I find myself answering "no" to "do you believe this use-case is best served by extensions" for almost all use-cases, the only exception being for experimental/unstable language features and language features with a performance impact. Everything else can be served by either GHC20xx or warnings. Yes that means being less fine-grained in some cases, but that might be a good tradeoff between flexibility for users and complexity in the compiler - fewer combinations of extensions to consider would simplify things and leave less room for bugs.

Answers below:

On Wed, 19 Apr 2023 at 13:21, Arnaud Spiwack <arnaud.spiwack@tweag.io> wrote:

X.1: do you believe that this a use-case that GHC should support? (yes/no)
X.2: regardless of your answer in X.1, if GHC supports this use-case,
  do you believe that this use-case is best served by extensions. (yes/no)
X.2.Y: Do you believe that GHC20xx helps support this use-case (yes/no)
X.2.N: if you've answered “no” to X.2: what mechanism would you rather
  see supporting this use-case (free form)

The 13 use-cases are

1. Gain early access to experimental or unstable features
   (e.g. because they're working on a research prototype, or because
   the feature is valuable enough to them to forgo some stability)

1. yes
2. yes
2.Y no
 
2. Restrict the use of more complex features (e.g. for easier
   onboarding of new developers or as educators to teach a
   well-delimited subset of the language)

1. yes
2. no
2.N warnings, -Werror=feature
 
3. Restrict the use of novel features since the last established
   standard/report.

1. yes
2. no
2.N -XHaskell2010 and/or warnings
 
4. Restrict the use to features that they don't like (e.g. controversial
   features like RecordWildcard or ImplicitParameters)

1. yes
2. no
2.N warnings
 
5. Name/refer to a particular feature when talking/writing/searching
   about it.

1. yes
2. no - we don't need to support extensions to be able to name language features.
2.N continue to use the names we have now, but without supporting -XFoo for all extensions
 
6. Restrict the use of features which require support from outside
   the Haskell ecosystem that can't be taken for granted (I think this
   concerns only UnicodeSyntax)

1. yes
2. no
2.N warnings
 
7. As library authors, to signal which features the library actually
   uses, hence which version of GHC the library is compatible with.

1. yes
2. no
2.N GHC20xx
 
8. Retain access to deprecated features to smooth out migration over
   the deprecation period.

1. yes
2.no
2.N GHC20xx
 
9. Retain access to deprecated features indefinitely.

1. no
 
10. Change the default behaviour of (part of) the language
    (e.g. StrictData, I think some of the dependent Haskell work falls
    in this category, but I can't pinpoint an example)

1. yes
2. no
2.N GHC20xx
 
11. Extend the language in a way that is not backward compatible
    (e.g. OverloadedList, probably some dependent Haskell things too)

1. yes
2. no
2.N GHC20xx
 
12. Enable features whose mere presence has a performance impact
    (e.g. Template Haskell, and that's probably it)

1. yes
2. yes
2.Y no
 
13. CPP (this one is very unique isn't it?)

1. yes
2. no
2.N it should probably be a flag
 
_______________________________________________
ghc-steering-committee mailing list
ghc-steering-committee@haskell.org
https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee
_______________________________________________
ghc-steering-committee mailing list
ghc-steering-committee@haskell.org
https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee