Subject: bug#56799: (gnu services configuration) usage of *unspecified* is problematic

From: Maxim Cournoyer <[email-masked]>
Date: Wed, 27 Jul 2022 14:31:32 -0400

Hi,

Tobias Geerinckx-Rice <[email-masked]> writes:

> Hi Maxim,
>
> Maxim Cournoyer 写道：
>> I'd suggest we revisit 8cb1a49a3998c39f315a4199b7d4a121a6d66449 to
>> use
>> 'unspecified (the symbol) instead of *unspecified*, which *can* be
>> serialized without any fuss in gexps.
>
> Bah.  Could we provide our own reader?
>
> I'd much rather this be addressed in Guile (or failing that,
> transparently by Guix) than have to deal with some magical
> symbol. IIRC that was the argument for using *unspecified* in the
> first place, and I think it makes sense.
>
> This looks more like an unexplored oversight than a well-reasoned
> restriction to me.

This was my original impression, but thinking more about it, it became
apparent that *unspecified* is well, unspecified and shouldn't be relied
on by people to be something well defined.  For some background reading,
see [0].  So it seems wrong in Scheme to actively set things to
*unspecified*, and give a specific meaning to that.

I think the semantic of the language is that it is to be used as the
lack of a return value from a procedure or syntax, e.g.:

(unspecified? (if #f 'one-arm-if)) -> #t

Having 'unspecified?' even defined in Guile seems to go against that
idea; perhaps because Wingo themselves seems to disagree in [0].

I'm also thinking 'unspecified being too close to *unspecified* is
probably going to cause confusion down the line.  Reverting to the
originally used 'disabled may be the lesser evil.

Other thoughts?

Thanks,

Maxim

[0]  https://scheme-reports.scheme-reports.narkive.com/QSQtJSAh/unspecified-values