[ghc-steering-committee] What is an extension? (was: Modification to record dot syntax propsal)
Simon Peyton Jones
simonpj at microsoft.com
Fri Mar 5 14:30:52 UTC 2021
Aha I see. You meant
"transient" = extensions that we expect to include in GHCxxx one day
"permanent" = extensions that we would never do that for, like OverlappingInstances, or Strict.
Fine. I totally misunderstood that.
I'm not sure of better names...
Simon
| -----Original Message-----
| From: Eric Seidel <eric at seidel.io>
| Sent: 05 March 2021 14:03
| To: Simon Peyton Jones <simonpj at microsoft.com>
| Cc: ghc-steering-committee at haskell.org
| Subject: Re: [ghc-steering-committee] What is an extension? (was:
| Modification to record dot syntax propsal)
|
| The transient vs permanent dimension is more aspirational than the
| others. I would classify extensions that were included in GHC2021 as
| transient. The hope is that these extensions eventually make it into
| the next Haskell Report, and effectively disappear from our lexicon.
| They’re no longer extensions to Haskell, they’re simply part of
| Haskell.
|
| In contrast, extensions like Strict/StrictData have no hope of ever
| making it into a future standard, and thus I’d call them permanent.
|
| Does that make sense? I’d welcome better terminology.
|
| Sent from my iPhone
|
| > On Mar 5, 2021, at 03:26, Simon Peyton Jones <simonpj at microsoft.com>
| wrote:
| >
| > That's good vocabulary.
| >
| > One other dimension:
| >
| > * Is the extension *stable* or *experimental*.
| >
| > By "stable* I mean that we will make efforts not to gratuitously
| change its meaning. By "experimental" I mean that its meaning may
| change in future, or the extension may disappear altogether.
| >
| > Consequence: if you are building a long-lived library, you probably
| want to avoid relying on experimental features, because they may
| change or disappear, in which case you'll have to update your library.
| >
| > Most features we discuss are intended to be stable. The
| OverloadedRecordUpdate sounds more experimental at this stage.
| >
| > | That leaves the question of whether we should allow for any
| > | permanent extensions.
| >
| > I didn't understand this bit. We have *lots* of permanent
| extensions. Indeed everything in GHC2021 is permanent by definition
| (we've made them part of the GHC2021 language) isn't it?
| >
| > Simon
| >
| > | -----Original Message-----
| > | From: ghc-steering-committee <ghc-steering-committee-
| > | bounces at haskell.org> On Behalf Of Eric Seidel
| > | Sent: 05 March 2021 01:39
| > | To: ghc-steering-committee at haskell.org
| > | Subject: Re: [ghc-steering-committee] What is an extension? (was:
| > | Modification to record dot syntax propsal)
| > |
| > | On Thu, Mar 4, 2021, at 15:01, Richard Eisenberg wrote:
| > | > I think this all comes back to: What does an extension mean? I
| > | think > it means that users are opting into a language feature.
| For
| > | me, the > existence of an extension emphatically does *not* mean
| > | that the > extension is potentially part of some future standard.
| I
| > | think this > viewpoint is different for others of us, and it's
| > | worth having a > conversation about this. I may start that
| > | conversation soon, if no one > beats me to it.
| > |
| > | Let's go ahead and have this conversation. Here are a few
| questions
| > | that come to mind:
| > |
| > | - Does an extension *expand* the language or *change* it? In
| other
| > | words, does an extension strictly accept more programs than
| before,
| > | or can it change the meaning of existing programs, or even reject
| > | previously valid programs?
| > |
| > | - Is an extension *transitional* or *permanent*? Do we expect the
| > | extension to eventually be on-by-default and effectively
| disappear,
| > | or will it continue to be opt-in?
| > |
| > | - Is an extension *contained* within a module or is it
| *infectious*?
| > | Does my choice of extensions when writing a module affect which
| > | extensions downstream clients must enable? (I would say most
| > | extensions are contained, e.g. you can apply a type family without
| > | enabling TypeFamilies or match on a pattern synonym without
| enabling
| > | PatternSynonyms. However, you cannot call a function that takes an
| > | implicit parameter without enabling ImplicitParams.)
| > |
| > | The "no-fork" criterion for evaluating proposals argues that all
| > | extensions should be transitional, but does not address the other
| > | questions. I think extensions that change the language or are
| > | infectious should meet a higher bar to be accepted, but we should
| > | not reject them outright. If we agree that the proposal would
| > | improve the language, we should allow for some disruption. I
| don't
| > | think we should aim for backwards compatibility at any cost.
| > |
| > | That leaves the question of whether we should allow for any
| > | permanent extensions. I think the most important aspect of the
| "no-fork"
| > | criterion is that permanent extensions that change the language
| or
| > | infect downstream modules are bad. This is where you start to
| create
| > | truly incompatible dialects of the language. During the GHC2021
| > | discussion, a few of us (myself included) voiced support for
| > | something along the lines of language levels: extensions that add
| > | more advanced features to the language like FFI or fancy types,
| and
| > | that you might want to contain to a subset of modules to
| facilitate
| > | reasoning about your code. In other words, permanent extensions
| are
| > | acceptable so long as they both expand the language and are
| contained within a module.
| > |
| > | So I think there are three classes of reasonable extensions:
| > |
| > | 1. transitional AND expand AND contained: this class is hopefully
| > | uncontroversial 2. transitional AND (change OR infectious): we
| > | should have the ability to make big changes, but should use it
| judiciously 3.
| > | permanent AND expand AND contained: extensions are a handy way to
| > | indicate that a module deals with more advanced areas of the
| > | language (and can serve to isolate those concerns)
| > |
| > | Eric
| > | _______________________________________________
| > | ghc-steering-committee mailing list
| > | ghc-steering-committee at haskell.org
| > |
| > |
| https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fma
| > | il
| > | .haskell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-
| > |
| > |
| committee&data=04%7C01%7Csimonpj%40microsoft.com%7Ce1d6aea762ee4
| > | 15
| > |
| > |
| 54ba308d8df7788ee%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C63750
| > | 50
| > |
| 51854197326%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2lu
| > | Mz
| > |
| IiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=33rA74unELy12hNzQK
| > | I%
| > | 2BBkrv%2Fwt3067zTiFoM4j6lXI%3D&reserved=0
More information about the ghc-steering-committee
mailing list