Hmm. Perhaps this should supersede the procedural interface rather than
supplementing it?

On Tue, Feb 4, 2025, 5:08 AM Daphne Preston-Kendal <d...@nonceword.org>
wrote:

> We’ve talked elsewhere about convenience syntax for this before, but I
> think I now have worked out reasonable syntax for it.
>
> SRFI 254 should add syntax called ephemeron-case:
>
> (ephemeron-case <<expression>>
>   ((<<key identifier>> . <<value identifier>>)
>    <<body>>)
>   (else <<body>>))
>
>
> Semantics:
>
> The <<expression>> is evaluated to produce an ephemeron.
>
> If the ephemeron is live, the first <<body>> is evaluated with the
> identifiers <<key identifier>> and <<value identifier>> in scope. The <<key
> identifier>> is bound as if to identifier syntax which both returns the key
> of the ephemeron and ensures that it is kept live, as if by the
> reference-barrier procedure. It is a syntax violation to use set! on the
> <<key identifier>>. The <<value identifier>> is bound as a variable to the
> value of the ephemeron.
>
> If the ephemeron is broken, the second <<body>> is evaluated with no
> additional identifiers in scope.
>
> The advantage is that with convenience syntax available which
> automatically does all the right things, people will be less tempted to do
> broken things like first checking the liveness of an ephemeron before
> pulling out the key and value, or forgetting to use reference-barrier.
>
>
> Daphne
>
>

Reply via email to