[ghc-steering-committee] Linear types (#111): conditional acceptance
Simon Peyton Jones
simonpj at microsoft.com
Fri Oct 12 08:10:17 UTC 2018
I agree.
I think that items 1-4 could be more clearly stated under the principle "pay as you go". That is:
If a module does not use -XLinearTypes, it should not pay for it:
- If a program typechecks now, it should continue to typecheck
- Error messages should not become more confusing
- :type should not become confusing
- Compilation time should not increase significantly
- Runtime should not increase (at all)
But for all of these points there is wiggle room if -XLinearTypes is switched on.
- We'd prefer that all existing type-correct programs remain so,
but some corner cases might change
- Error messages may well have to report linear stuff
- Ditto :type
- Compilation time should not increase markedly, but again
there is more wiggle room
- Runtime really should not increase. I don't want linearity
to impede optimisation.
For the migration-of-base question, I'm not sure it's reasonable to
ask for a migration plan in advance. It's a tricky topic, as we saw
with the Foldable and Monad/Applicative saga. Maybe we can say
if/when pressure emerges to really make the linear functions part
of base, we'd like to see a propose migration plan before execution?
The CLC might play a role here too.
Simon
| -----Original Message-----
| From: ghc-steering-committee <ghc-steering-committee-bounces at haskell.org>
| On Behalf Of Richard Eisenberg
| Sent: 11 October 2018 22:46
| To: ghc-steering-committee at haskell.org
| Subject: [ghc-steering-committee] Linear types (#111): conditional
| acceptance
|
| Hi all,
|
| Several members of the steering committee met at ICFP to discuss the
| Linear Types proposal, #111. While some concerns were raised about the
| utility of the proposed approach (as also explained on the GitHub trail),
| the committee agreed that the best way forward would be to accept the
| proposal.
|
| I thus propose *conditional acceptance*, subject to these conditions,
| which were discussed at ICFP:
|
| 1. Error messages must remain free of mention of linear types, unless -
| XLinearTypes is in effect (or some flag like -fprint-linear-types is on).
| The same must be true of using the `:type` facility in GHCi.
|
| 2. Type inference must remain backward-compatible. All programs accepted
| today must be accepted when -XLinearTypes is not in effect. Ideally,
| these programs would also be accepted when -XLinearTypes is in effect,
| but there can be some wiggle room here.
|
| 3. Compile times for programs without -XLinearTypes must not unduly
| increase. Anything approaching or over a 2% across-the-board increase in
| compile times would be a cause for concern.
|
| 4. There must be no degradation in runtime performance of GHC-compiled
| programs. Linear types in Core might, for example, make some
| optimizations harder to apply; however, we must find a way to get runtime
| performance on par with what we have today.
|
| 5. There must be a story for a migration of `base`. The committee is
| concerned that, once linear types hits, there will be a great demand to
| incorporate linear types into `base`. (Note that `fmap` may want a linear
| type, and due to Functor's status as a superclass of Monad, `fmap` is
| really baked in.) How will this work? In particular, how will Haddock
| render newly-linearized types?
|
| 6. The theory of the linear types must be sound. This seems to be the
| case today, but as things evolve, we want to state explicitly that this
| must remain true. In particular, we must be able to rely on the safety of
| using linear mutable arrays.
|
| 7. There must be a specification (in some typeset document) of the new
| core language, written out for public inspection.
|
| If the final version of this should violate these prescriptions, it does
| not immediately mean we are at an impasse -- it just means that we need
| to have more discussion.
|
| Before officially posting this on #111 on behalf of the committee, I'd
| like some feedback on this recommendation. As usual, I'll take silence
| for agreement.
|
| Discussion period: 1 week (shortened due to the fact that many have
| already participated in formulating this list)
|
| Thanks!
| Richard
| _______________________________________________
| ghc-steering-committee mailing list
| ghc-steering-committee at haskell.org
| https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.has
| kell.org%2Fcgi-bin%2Fmailman%2Flistinfo%2Fghc-steering-
| committee&data=02%7C01%7Csimonpj%40microsoft.com%7C303607a28a294ae7cd
| f008d62fc2ea8d%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C6367489115454
| 76671&sdata=4ExqdXNPwu7CLr%2BV3FgfU8VDVbZsbW1DuMYdd5lNBh4%3D&rese
| rved=0
More information about the ghc-steering-committee
mailing list