|
Suggestion: ephemeron-case
Daphne Preston-Kendal
(04 Feb 2025 10:08 UTC)
|
||
|
Re: Suggestion: ephemeron-case
John Cowan
(04 Feb 2025 11:35 UTC)
|
||
|
Re: Suggestion: ephemeron-case
Vincent Manis (he/him)
(04 Feb 2025 19:38 UTC)
|
||
|
Re: Suggestion: ephemeron-case
Marc Nieper-Wißkirchen
(05 Feb 2025 15:12 UTC)
|
||
|
Re: Suggestion: ephemeron-case
Daphne Preston-Kendal
(05 Feb 2025 15:30 UTC)
|
||
|
Re: Suggestion: ephemeron-case
Marc Nieper-Wißkirchen
(05 Feb 2025 18:04 UTC)
|
||
|
Re: Suggestion: ephemeron-case
Daphne Preston-Kendal
(05 Feb 2025 18:16 UTC)
|
||
|
(missing)
|
||
|
Fwd: Suggestion: ephemeron-case
Marc Nieper-Wißkirchen
(16 Mar 2025 13:19 UTC)
|
||
|
Re: Suggestion: ephemeron-case
Marc Nieper-Wißkirchen
(12 May 2025 11:51 UTC)
|
||
|
Re: Suggestion: ephemeron-case
Arthur A. Gleckler
(10 Jun 2025 23:16 UTC)
|
||
|
Re: Suggestion: ephemeron-case
Daphne Preston-Kendal
(03 Aug 2025 09:38 UTC)
|
||
|
Re: Suggestion: ephemeron-case
Marc Nieper-Wißkirchen
(03 Aug 2025 15:29 UTC)
|
||
|
Re: Suggestion: ephemeron-case
Marc Nieper-Wißkirchen
(03 Aug 2025 15:30 UTC)
|
||
|
Re: Suggestion: ephemeron-case
Daphne Preston-Kendal
(09 Oct 2025 12:34 UTC)
|
||
|
Re: Suggestion: ephemeron-case Marc Nieper-Wißkirchen (09 Oct 2025 13:24 UTC)
|
||
|
Usefulness of reference-barrier
Daphne Preston-Kendal
(12 Oct 2025 20:16 UTC)
|
||
|
Re: Usefulness of reference-barrier
Marc Nieper-Wißkirchen
(13 Oct 2025 05:58 UTC)
|
||
|
Re: Usefulness of reference-barrier
Marc Nieper-Wißkirchen
(13 Oct 2025 07:21 UTC)
|
||
|
Re: Usefulness of reference-barrier
Marc Nieper-Wißkirchen
(13 Oct 2025 11:17 UTC)
|
||
|
Re: Usefulness of reference-barrier
Marc Nieper-Wißkirchen
(22 Oct 2025 07:18 UTC)
|
||
|
Re: Usefulness of reference-barrier
Daphne Preston-Kendal
(30 Oct 2025 22:46 UTC)
|
||
|
Re: Usefulness of reference-barrier
Marc Nieper-Wißkirchen
(31 Oct 2025 07:50 UTC)
|
||
|
Re: Usefulness of reference-barrier
Daphne Preston-Kendal
(30 Oct 2025 23:03 UTC)
|
||
|
Re: Usefulness of reference-barrier
Marc Nieper-Wißkirchen
(31 Oct 2025 08:02 UTC)
|
||
|
Re: Usefulness of reference-barrier
Marc Nieper-Wißkirchen
(04 Nov 2025 18:57 UTC)
|
||
Thank you very much for your response! Am Do., 9. Okt. 2025 um 14:34 Uhr schrieb Daphne Preston-Kendal <xxxxxx@nonceword.org>: > > > Am So., 3. Aug. 2025 um 17:29 Uhr schrieb Marc Nieper-Wißkirchen > > <xxxxxx@gmail.com>: > >> > >> Maybe I don't understand the semantics of your ephemeron-case form. > >> Reading your first post, there does not seem to be a reference barrier > >> on the key in the broken path. Can you give a syntax-case definition > >> of ephemeron case? > > > (define-syntax ephemeron-case > (syntax-rules (else) > ((_ eph-expr > ((k-id . v-id) expr_0 expr_1 ...) > (else broken-expr_0 broken-expr_1 ...)) > (let* ((eph eph-expr) > (k (ephemeron-key eph)) > (v (ephemeron-value eph))) ; why has this name been changed? grr > (if (ephemeron-broken? eph) > (begin broken-expr_0 broken-expr_1 ...) > (let-syntax ((k-id (identifier-syntax k)) > (v-id (identifier-syntax v))) > (dynamic-wind > (lambda () #f) > (lambda () expr_0 expr_1 ...) > (lambda () (reference-barrier k))))))))) > > > On 3 Aug 2025, at 17:30, Marc Nieper-Wißkirchen <xxxxxx@gmail.com> wrote: > > > > PS And maybe give a simple example of how a user would typically use it. > > (define (ephemeron-alist-ref ephal key) > (let loop ((more ephal)) > (if (null? more) > (assertion-violation 'ephemeron-alist-ref "nothing found for key" ephal) > (ephemeron-case (car ephal) > ((found-key . value) > (if (eqv? found-key value) > value > (loop (cdr more)))) > (else (loop (cdr more))))))) [You likely mean "(eqv? found-key key)" here, I guess.] Thank you for the example code. Unfortunately, the suggested definition of "ephemeron-case" is useless. If there is no future call of reference-barrier on K (in the case of ephemeron-case) or KEY (in case of ephemeron-alist-ref), the compiler may elide the whole not-broken-branch of ephemeron case (which is, a posteriori, correct because reference-barrier won't be called in that case). But there is a future call of reference-barrier on K/KEY, the call within ephemeron-case is superfluous. This is the semantics: "The GC can break an ephemeron if, under the assumption that it is broken, the key will not be kept alive." To correctly work with ephemerons, the user has to explicitly call reference-barrier or procedures that document that they keep certain values alive (unconditionally). See the example here: https://srfi-email.schemers.org/srfi-254/msg/27973433/ Marc