reference-barrier
Marc Nieper-Wißkirchen
(27 Aug 2016 12:55 UTC)
|
Re: reference-barrier
John Cowan
(27 Aug 2016 14:01 UTC)
|
Re: reference-barrier
Marc Nieper-Wißkirchen
(27 Aug 2016 15:40 UTC)
|
Re: reference-barrier
Taylor R Campbell
(27 Aug 2016 18:30 UTC)
|
Re: reference-barrier
Marc Nieper-Wißkirchen
(29 Aug 2016 14:48 UTC)
|
Re: reference-barrier
Marc Nieper-Wißkirchen
(29 Oct 2016 08:29 UTC)
|
Re: reference-barrier
Marc Nieper-Wißkirchen
(18 Aug 2020 08:20 UTC)
|
Re: reference-barrier Taylor R Campbell (18 Aug 2020 14:17 UTC)
|
Re: reference-barrier
Marc Nieper-Wißkirchen
(18 Aug 2020 14:29 UTC)
|
Re: reference-barrier
Arthur A. Gleckler
(26 Aug 2020 23:22 UTC)
|
Re: reference-barrier
Marc Nieper-Wißkirchen
(27 Aug 2020 06:15 UTC)
|
Re: reference-barrier
Arthur A. Gleckler
(27 Aug 2020 06:26 UTC)
|
Re: reference-barrier
Marc Nieper-Wißkirchen
(07 Sep 2020 06:32 UTC)
|
Re: reference-barrier
Arthur A. Gleckler
(30 Nov 2020 19:46 UTC)
|
Re: reference-barrier
John Cowan
(30 Nov 2020 19:53 UTC)
|
Re: reference-barrier
Arthur A. Gleckler
(30 Nov 2020 20:31 UTC)
|
Re: reference-barrier
John Cowan
(30 Nov 2020 20:31 UTC)
|
Re: reference-barrier
Arthur A. Gleckler
(30 Nov 2020 20:47 UTC)
|
Re: reference-barrier
Arthur A. Gleckler
(30 Nov 2020 20:53 UTC)
|
Re: reference-barrier
Marc Nieper-Wißkirchen
(30 Nov 2020 21:10 UTC)
|
I agree that it is silly for reference-barrier to be optional. In MIT Scheme it is defined as an alias for identity-procedure, which simply returns its argument; that implementation will work as long as there's no whole-program optimization (or `LTO' as they call it these days). If you're going to go out of your way to implement ephemerons anyway, surely it can't be hard to make reference-barrier work. I seem to recall that jcowan's argument was that, in the absence of mutable ephemerons, the idiom (let ((key (ephemeron-key e)) (datum (ephemeron-datum e))) (if (not (ephemeron-broken? e)) ...)) is sufficient to reliably operate on an ephemeron. However, this idiom doesn't help with, say, (let ((xyz (make-gobbledegook))) (store xyz in a weak table somewhere) (do a long computation that relies on a cached gobbledegook) (reference-barrier xyz)) to ensure that the gobbledegook is not reclaimed until the long computation which will reuse it is over. (There's no need for compiler `reordering'; a reasonable compiler with a strict evaluation order may just not store xyz in any stack frame that is reachable from the long computation.) No comment on procedural issues in the SRFI process. > Date: Tue, 18 Aug 2020 10:19:44 +0200 > From: Marc Nieper-Wißkirchen <xxxxxx@nieper-wisskirchen.de> > > Dear Arthur, John, and Taylor, > > I am currently clearing up some old backlogs. > > We had the discussion cited below 4 years ago. To recapitulate the upshot > of the discussion: > > (1) Without "reference-barrier", one cannot safely use SRFI 124 in Schemes > that actually need reference barriers (because of possible reorderings). > (2) In Schemes that do not need an explicit reference barrier, > "reference-barrier" is trivially to implement (it can be coded as a no-op). > > I want, therefore, to request a PFN saying that "reference-barrier" is not > optional. I think this is the only sensible implication. For > implementations, this PFN will mean the following: Those that didn't need > "reference-barrier" can just add it as a no-op. Those that actually did > need it either already had it or were unusable anyway. > > Marc > > Am Sa., 27. Aug. 2016 um 20:30 Uhr schrieb Taylor R Campbell < > xxxxxx@mumble.net>: > > > Date: Sat, 27 Aug 2016 15:40:16 +0000 > > From: Marc Nieper-Wißkirchen <xxxxxx@nieper-wisskirchen.de> > > > > > It's optional because it has to do something that in a non-trivial > > > implementation of ephemerons, such as Racket's, can't always be > > done. If > > > you need reference barriers, your code willl not be portable to all > > > R7RS-large implementations, which is a pity, but there it is. > > > > Is it a hard fact that it may be non-trivial to implement > > `reference-barrier' for a given proper implementation of ephemerons? > > > > Here's an implementation of reference-barrier that will almost > > certainly have the desired immediate effect in any implementation, > > though it may leak space. > > > > (define last-reference 0) > > (define (reference-barrier x) > > (let ((y last-reference)) > > (set! last-reference x) > > y)) > > > > I have a hard time believing that there are any Scheme systems out > > there in which it is actually difficult to implement reference-barrier > > correctly. It should be reliably included. > > > > On the other hand, how do you want to code safely without > > `reference-barrier'? > > > > Can't. > >