[ghc-steering-committee] Language Extension Policy – Round 1

Richard Eisenberg lists at richarde.dev
Tue Feb 28 12:23:38 UTC 2023



> On Feb 27, 2023, at 11:03 AM, Simon Peyton Jones <simon.peytonjones at gmail.com> wrote:
> 
> I am finding this discussion hard to follow.  
> The doc has two different categorisations A, B, C, D...
> Arnaud's email has a third, 1,2,3...
> Richard refers to G and H but I don't know what they are.
> Categorisation is a blunt instrument, because it implies that an extension is in one category or another, but not both.  It might be better to think in term of properties of an extension.  So imagine a table whose rows are extensions, and whose columns are properties.

Yes -- I had gotten to a similar place. I propose (essentially) the same structure (though different columns) in my email at https://mail.haskell.org/pipermail/ghc-steering-committee/2023-February/003153.html <https://mail.haskell.org/pipermail/ghc-steering-committee/2023-February/003153.html>

A key difference between what I proposed there and what you're suggesting is that my entries are numeric (in the range 1-5) as opposed to symbolic. This allows for the possibility of simply averaging committee members' responses, without the need for protracted debate about whether an extension is e.g. special-purpose or experimental.

Perhaps, though, I have too many columns (labeled with letters in my email).

Richard

> 
> The columns might be:
> Status:
> 
> Stable: we might eventually expect it to be on-by-default (e.g. GADTs, PolyKinds)
> Experimental: might change or be deprecated (E.g. Linear)
> Special-purpose: stable, but will never be on-by-default (RebindableSyntax).
> Deprecated: allow access to deprecated features, will not be on-by-default (e.g. DeepSubsumption, DatatypeContexts)
> I'm not sure if UnboxedTuples is Stable or Special-purpose
> Backward compatibility
> Backward-compatible.  Switching on this extension will never change the meaning of an existing program that already compiles.  Usually because the feature is guarded by new syntax (e.g. UnboxedTuples), but perhpas also because it accepts more program (e.g. OverlappingInstances)
> New-behaviour.   Switching on this extension may change the meaning of an existing program (e.g. Overloaded Strings, PolyKinds)
> Module-wide: extensions that allow module-wide violation of some general principle
> 
> This seems more straightforward.   -XStrict would be 
> Special-purpose
> New-behaviour
> Module-wide
> Simon
> 
> On Fri, 17 Feb 2023 at 14:07, Arnaud Spiwack <arnaud.spiwack at tweag.io <mailto:arnaud.spiwack at tweag.io>> wrote:
> Dear all,
> 
> I am to shepherd the making of our language extension policy, working
> off our draft document
> [https://docs.google.com/document/d/1_-hPh8BRhKNlzM0dC1IRSmjCqPym9mXx9NjC7jUlpRQ/ <https://docs.google.com/document/d/1_-hPh8BRhKNlzM0dC1IRSmjCqPym9mXx9NjC7jUlpRQ/>].
> As a prelude to my introduction, I first want to apologise for taking
> that long to get back to this subject, time has, I'm afraid, gotten away
> from me. Part of the reason, though, is that we've been pulling in
> many directions, and I felt it difficult to find a path toward
> consensus among all that.
> 
> In the time since I accepted the task, I have therefore spent a lot of
> time reading through the entire document multiple time, to try and
> identify the points where we agree and the points where we
> diverge. And try to build a methodology.
> 
> If you go to the document, you'll see that I've separated out our
> notes after a horizontal line. I will grow the document above the line
> with decisions from this mailing list. Hopefully, the process will
> make sure that we are in broad agreement that the text does reflect
> our collective position.
> 
> The way I'm going to proceed is to organise votes. Or maybe they
> should rather be seen as surveys. They'll have a bunch of questions,
> pertaining to bits of the documents that I want us to converge on. I'll
> extract a broad consensus from this survey, and use it to copy
> language in the document. I intend to give about a week for each
> survey to complete (conveniently, I'll be very far from a computer for
> the next week, so I'll be able to tally the results when I come
> back). It's going to take a while, but it's a very difficult, and
> sensitive, subject.
> 
> ---
> 
> For this first round, I want us to focus on the categorisation of
> language extensions as proposed by Richard and Simon M (sections 2.1
> and 2.3, respectively, of our draft notes). As I feel that we will
> need to have these categories identified in order to discuss the later
> points.
> 
> Here are the categories that are common to both (consult the document
> for more details):
> 
> 1. Extensions that are either in GHC20xx or could be part of a future
>    GHC20xx (e.g. GADTs)
> 2. Experimental language features (e.g. LinearTypes)
> 3. Extensions that allow module-wide violation of some general
>    principle that holds elsewhere (e.g. OverlappingInstances)
> 4. Extensions that allow access to deprecated features (e.g. DatatypeContexts)
> 5. Extensions that should be compiler flags, which do not actually
>    change the accepted language (e.g. Safe)
> 
> Richard adds another category
> 
> 6. Extensions that change the semantics of existing constructs
>    (e.g. OverloadedStrings); as opposed to most extensions, which
>    create new syntax for the new feature.
> 
> Richard's reasoning is twofold 1/ he doesn't believe that they should
> be candidate for inclusion in GHC20xx 2/ he believes that they are
> problematic for the same sort of reason as we've used to argue against
> fork-like behaviour: that to understand the meaning of a piece of code
> you need to know what language extensions have been loaded in the
> file.
> 
> Simon M adds another category
> 
> 7. Extensions for specialised use-cases (e.g. MagicHash,
>    UnboxedTuples)
> 
> Simon's reasoning is that these should not be part of GHC20xx. At the
> very least they are not intended to. But they do extend the language,
> like 1, and unlike 5. Hence they deserve to be categorised separately
> from both.
> 
> It is worth noting that Richard classifies Strict as a 6 and Simon M
> classifies Strict as a 7.
> 
> Now the survey.
> 
> Keeping in mind that the goal of this categorisation is to classify
> the extensions that currently exist, without judgement on whether we
> want to have things in these categories or not:
> 
> Q1: Are all the categories 1–5 relevant? If you would like to remove
>        some categories, which and why (free form)?
> Q2: Is category 6 relevant?
> Q2.Y: If you found category 6 to be relevant: should it be its own
>            category, or should it be a subcategory of 1?
> Q2.N: If you found category 6 not to be relevant, in which category
>             would you classify OverloadedStrings? What about PolyKinds?
> Q3: Is category 7 relevant?
> Q3.Y: If you found category 7 to be relevant: should it be its own
>            category or should it be a subcategory of 5?
> Q3.N: If you found category 7 not to be relevant: in which category
>            would you classify MagicHash? What about UnboxedTuples?
>  Q4: In which category would you classify Strict?
>  Q5: Is there any category that you feel is missing from the list? If
>        so, please argue (free form).
> 
> Best,
> Arnaud
> _______________________________________________
> ghc-steering-committee mailing list
> ghc-steering-committee at haskell.org <mailto:ghc-steering-committee at haskell.org>
> https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee <https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee>
> _______________________________________________
> ghc-steering-committee mailing list
> ghc-steering-committee at haskell.org
> https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-steering-committee/attachments/20230228/f539512e/attachment.html>


More information about the ghc-steering-committee mailing list