A reference type
Marc Nieper-Wißkirchen
(18 Aug 2022 21:45 UTC)
|
Re: A reference type
John Cowan
(19 Aug 2022 01:36 UTC)
|
Re: A reference type
Lassi Kortela
(19 Aug 2022 10:03 UTC)
|
Re: A reference type
Marc Nieper-Wißkirchen
(19 Aug 2022 10:11 UTC)
|
Re: A reference type
Lassi Kortela
(19 Aug 2022 10:25 UTC)
|
Places in Scheme
Marc Nieper-Wißkirchen
(19 Aug 2022 10:42 UTC)
|
Re: Places in Scheme
Marc Nieper-Wißkirchen
(19 Aug 2022 11:36 UTC)
|
Re: Places in Scheme
Per Bothner
(19 Aug 2022 16:33 UTC)
|
Re: Places in Scheme
Marc Nieper-Wißkirchen
(19 Aug 2022 17:58 UTC)
|
Re: Places in Scheme
Panicz Maciej Godek
(25 Aug 2022 15:20 UTC)
|
Re: Places in Scheme
Ray Dillinger
(26 Aug 2022 02:29 UTC)
|
Re: A reference type
Marc Nieper-Wißkirchen
(19 Aug 2022 10:54 UTC)
|
Re: A reference type
Marc Nieper-Wißkirchen
(19 Aug 2022 11:44 UTC)
|
Re: A reference type
Peter Bex
(19 Aug 2022 12:02 UTC)
|
Re: A reference type Marc Nieper-Wißkirchen (19 Aug 2022 12:26 UTC)
|
Big words
Lassi Kortela
(19 Aug 2022 16:29 UTC)
|
Re: Big words
Marc Nieper-Wißkirchen
(19 Aug 2022 18:07 UTC)
|
Re: Big words
Lassi Kortela
(19 Aug 2022 20:06 UTC)
|
Re: Big words
Marc Nieper-Wißkirchen
(19 Aug 2022 20:31 UTC)
|
Re: Big words
blake@xxxxxx
(19 Aug 2022 22:06 UTC)
|
Re: Big words
blake@xxxxxx
(19 Aug 2022 22:08 UTC)
|
Re: Big words
Arthur A. Gleckler
(19 Aug 2022 18:09 UTC)
|
Re: Big words
John Cowan
(19 Aug 2022 18:39 UTC)
|
Thank you for this reference, Peter. I didn't know about the Chicken module before. The only difference seems to be in fact just in `make-locative`. But this is not problematic because the first argument of my `make-locative` has to be a procedure, while the first argument of Chicken's `make-locative` must be a non-procedure. So an implementation can easily support both versions in one procedure. More importantly, if one version is mistaken for the other, it won't go silent. What I find interesting is Chicken's `(make-weak-locative CONTAINER INDEX)'. To my proposal, I could add `(make-weak-locative KEY LOCATIVE)` (again with no problematic clash!) defined through something like: (define make-weak-locative (lambda (key loc) (define eph (make-ephemeron key loc)) (make-ephemeron-locative eph))) (define make-ephemeron-locative (lambda (eph) (define who 'make-ephemeron-locative) (define locative (lambda () (define loc (ephemeron-datum eph)) (when (ephemeron-broken? eph) (assertion-violation who "location garbage collected" eph)) loc)) (make-locative (lambda () (location-ref (location))) (lambda obj* (apply location-set! (location) obj*))))) Here, I used the procedures of SRFI 124. KEY is a Scheme object that controls the availability of the locative. A typical use would be (define vec (vector 1 2 3)) (define weak-loc (make-weak-locative vec (make-vector-locative vec 0))) (define first (location-ref weak-loc)) ; first <- 1 (reference-barrier vec) (define second (location-ref weak-loc)) ; may raise an assertion violation Am Fr., 19. Aug. 2022 um 14:02 Uhr schrieb Peter Bex <xxxxxx@more-magic.net>: > > On Fri, Aug 19, 2022 at 12:53:57PM +0200, Marc Nieper-Wißkirchen wrote: > > Your extensive knowledge is always very helpful, John! > > > > So, let us call the objects "locatives" instead. This also has the > > advantage that the getter can be reasonably named "locative-ref" as would > > be custom in Scheme. > > Looks like your proposal is quite similar to what we have in CHICKEN. > I would argue to have a look at our API first, since the proposal has > some API parts that have the same names as CHICKEN's, but are > incompatible in their definition. > > https://wiki.call-cc.org/man/5/Module%20(chicken%20locative) > > From a quick scan, at least make-locative is different. > > Cheers, > Peter