[ghc-steering-committee] Please review #313: Delimited continuation primops, Shepherd: Simon Marlow
Eric Seidel
eric at seidel.io
Tue Dec 1 18:25:04 UTC 2020
Oh I see. I'm always uncomfortable declaring things "undefined" because of how C/C++ compilers can run wild with code that invokes UB. So I kinda prefer saying that it's "illegal but unchecked".
On Tue, Dec 1, 2020, at 12:35, Simon Marlow wrote:
> The issue with unsafePerformIO is really just that the proposal says
> that it's illegal to use the primops with unsafePerformIO. I don't
> think it's possible to make it "illegal" in any meaningful sense,
> probably a better way to say it would be "undefined" or "unsupported"
> or somesuch.
>
> Cheers
> Simon
>
> On Mon, 30 Nov 2020 at 01:53, Eric Seidel <eric at seidel.io> wrote:
> > This is a very well-written and motivated proposal, and I love that it's just three new primops (really two, plus a tag to add some guard rails). I'm not very familiar with the literature on delimited continuations, but I support going with the most general formulation, especially for primops.
> >
> > I'm not sure we need to be able to detect all uses of the new primops with unsafePerformIO, it's already a deeply unsafe function. Just another thing that advanced users will need to keep in mind.
> >
> > On Mon, Nov 23, 2020, at 09:37, Simon Marlow wrote:
> > > Committee,
> > >
> > > We have been asked to review
> > > #313: Delimited continuation primops
> > >
> > > https://github.com/ghc-proposals/ghc-proposals/pull/313
> > > https://github.com/lexi-lambda/ghc-proposals/blob/delimited-continuation-primops/proposals/0000-delimited-continuation-primops.md
> > >
> > > *Summary*
> > >
> > > The proposal makes no language changes, it only adds three primops
> > > <https://github.com/lexi-lambda/ghc-proposals/blob/delimited-continuation-primops/proposals/0000-delimited-continuation-primops.md#proposed-change-specification>.
> > >
> > > The main motivation is to support building efficient implementations of
> > > Algebraic Effect systems, which depend on being able to efficiently
> > > capture a continuation. Currently this is done explicitly, which
> > > imposes a severe performance penalty.
> > >
> > > These primops are the minimal support needed to be able to capture a
> > > continuation and apply it at runtime, together with some basic type
> > > safety via the PromtTag type to ensure that at least we don't replace a
> > > continuation with a computation of a different type. (there are other
> > > ways to go wrong with these primops though, they're not a safe
> > > interface by themselves: they need to be wrapped in a safe library).
> > >
> > > The primops are implemented by copying chunks of stack into the heap.
> > > This is something that GHC's runtime already does a lot of, so it's not
> > > a new concept, although it does require a new closure type and knock-on
> > > changes across several files in the runtime (though it's mainly
> > > mechanical). There's a prototype implementation here:
> > > https://gitlab.haskell.org/lexi.lambda/ghc/-/compare/master...first-class-continuations?view=inline
> > >
> > > *Decision*
> > > *
> > > *
> > > I'm going to tentatively recommend acceptance.
> > > * This is a sensible choice for the primtives, being the most general
> > > of the alternatives, as explained in the proposal.
> > > <https://github.com/lexi-lambda/ghc-proposals/blob/delimited-continuation-primops/proposals/0000-delimited-continuation-primops.md#operational-semantics>
> > > * Would the new primops impose a significant ongoing maintenance
> > > burden? Having looked at the patch, although there are some missing
> > > pieces, I don't think the new concepts impose any significant new
> > > requirements on other parts of the runtime.
> > > * I suspect there may be some difficulties around unsafePerformIO, so
> > > I raised that on the github thread
> > > <https://github.com/ghc-proposals/ghc-proposals/pull/313#issuecomment-732181948>
> > > Thoughts?
> > >
> > >
> > >
> > > On Sat, 12 Sep 2020 at 22:59, Joachim Breitner <mail at joachim-breitner.de> wrote:
> > > > Dear Committee,
> > > >
> > > > this is your secretary speaking:
> > > >
> > > > Delimited continuation primops
> > > > has been proposed by Alexis King
> > > > https://github.com/ghc-proposals/ghc-proposals/pull/313
> > > > https://github.com/lexi-lambda/ghc-proposals/blob/delimited-continuation-primops/proposals/0000-delimited-continuation-primops.md
> > > >
> > > > I’ll propose Simon Marlow as the shepherd.
> > > >
> > > > Please guide us to a conclusion as outlined in
> > > > https://github.com/ghc-proposals/ghc-proposals#committee-process
> > > >
> > > > Thanks,
> > > > Joachim
> > > > --
> > > > Joachim Breitner
> > > > mail at joachim-breitner.de
> > > > http://www.joachim-breitner.de/
> > > >
> > > >
> > > > _______________________________________________
> > > > ghc-steering-committee mailing list
> > > > ghc-steering-committee at haskell.org
> > > > 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
> > >
> > _______________________________________________
> > ghc-steering-committee mailing list
> > ghc-steering-committee at haskell.org
> > https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee
More information about the ghc-steering-committee
mailing list