From: "Ludovic Courtès" <ludo@gnu.org>
To: Nicolas Goaziou <mail@nicolasgoaziou.fr>
Cc: guix-devel@gnu.org
Subject: Re: [PATCH RFC 0/4] Getting rid of input labels?
Date: Wed, 26 May 2021 16:02:21 +0200 [thread overview]
Message-ID: <87y2c1twya.fsf@gnu.org> (raw)
In-Reply-To: <87wnrsw15h.fsf@nicolasgoaziou.fr> (Nicolas Goaziou's message of "Fri, 21 May 2021 17:35:06 +0200")
Hello,
Nicolas Goaziou <mail@nicolasgoaziou.fr> skribis:
> Ludovic Courtès <ludo@gnu.org> writes:
[...]
>> • Packages such as ‘tzdata’ use labels to refer to non-package
>> inputs. These cannot be converted to the automatic labeling
>> style, or not without extra changes.
>
> Would it be possible to write something like
>
> (inputs (let ((tzcode (origin ...)))
> (list ... tzcode ...)))
>
> ?
Yes, but the problem is that the automatically-assigned label for
<origin> records is “_” (a placeholder), because origins have no name,
unlike packages.
Thus, this phase:
(replace 'unpack
(lambda* (#:key source inputs #:allow-other-keys)
(invoke "tar" "xvf" source)
(invoke "tar" "xvf" (assoc-ref inputs "tzcode"))))
… needs to be written differently, because there’s no “tzcode” label.
One option on ‘core-updates’ is to use gexps:
#~(modify-phases %standard-phases
;; …
(replace 'unpack
(lambda* (#:key source inputs #:allow-other-keys)
(invoke "tar" "xvf" source)
(invoke "tar" "xvf" #$tzcode))))
However, this style breaks common uses of ‘inherit’ and uses of the
inputs field: ‘tzcode’ here need not even be listed in ‘inputs’, and
consequently, you cannot easily inherit from ‘tzdata’ and give it a
different ‘tzcode’.
We need to find and encourage appropriate idioms for corner cases like
this. One option is the status quo: keep using labels in those rare
cases.
A crazier option would be to interpret input lists, when possible, as
both input lists and formal parameter lists for ‘arguments’. Assume a
package with:
(inputs (list foo bar baz))
The ‘arguments’ field, which is currently a thunk, would magically be
turned into:
(lambda (foo bar baz)
…)
That way, arguments could refer to #$foo etc., and that’d just do the
right thing when inputs are overridden.
This would be reaching a level of magic that may not be wise, and it may
be hard to implement.
> Could the new syntax accept both variables and specifications, e.g.,
>
> (list "glib:bin" foo "bar@2.3")
>
> ?
No! I mean, yes it could, but no, I don’t think that’s a good idea.
:-)
In terms of API, I prefer clarity; in this case, I think inputs should
be a list of packages or other “lowerable” objects, rather than a list
of “anything” that could be magically interpreted at run time.
More importantly, I think package specs are a UI feature, and that
packages should be separate from UI concerns. Specs are implemented in
(gnu packages), not in (guix …) for a reason: it’s a feature that makes
sense in the distro, not in the core Guix machinery where there’s no
“package set” to traverse.
I hope that makes sense!
Ludo’.
next prev parent reply other threads:[~2021-05-26 14:02 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-20 14:58 [PATCH RFC 0/4] Getting rid of input labels? Ludovic Courtès
2021-05-20 14:58 ` [PATCH RFC 1/4] records: Support field sanitizers Ludovic Courtès
2021-05-20 14:58 ` [PATCH RFC 2/4] DRAFT packages: Allow inputs to be plain package lists Ludovic Courtès
2021-05-20 14:58 ` [PATCH RFC 3/4] DRAFT gnu: Change inputs of core packages to plain lists Ludovic Courtès
2021-05-20 14:58 ` [PATCH RFC 4/4] DRAFT lint: Add 'input-labels' checker Ludovic Courtès
2021-05-20 16:19 ` [PATCH RFC 0/4] Getting rid of input labels? Vincent Legoll
2021-05-26 13:35 ` Ludovic Courtès
2021-05-20 19:31 ` Maxime Devos
2021-05-26 13:43 ` Ludovic Courtès
2021-05-27 19:02 ` Maxime Devos
2021-05-21 15:35 ` Nicolas Goaziou
2021-05-26 14:02 ` Ludovic Courtès [this message]
2021-05-30 16:23 ` Ryan Prior
2021-06-08 13:05 ` Ludovic Courtès
2021-06-10 21:39 ` Ludovic Courtès
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87y2c1twya.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=guix-devel@gnu.org \
--cc=mail@nicolasgoaziou.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.