[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH RFC 0/4] Getting rid of input labels?
From: |
Ludovic Courtès |
Subject: |
Re: [PATCH RFC 0/4] Getting rid of input labels? |
Date: |
Wed, 26 May 2021 16:02:21 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) |
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’.
- [PATCH RFC 2/4] DRAFT packages: Allow inputs to be plain package lists., (continued)
- [PATCH RFC 2/4] DRAFT packages: Allow inputs to be plain package lists., Ludovic Courtès, 2021/05/20
- [PATCH RFC 1/4] records: Support field sanitizers., Ludovic Courtès, 2021/05/20
- [PATCH RFC 3/4] DRAFT gnu: Change inputs of core packages to plain lists., Ludovic Courtès, 2021/05/20
- [PATCH RFC 4/4] DRAFT lint: Add 'input-labels' checker., Ludovic Courtès, 2021/05/20
- Re: [PATCH RFC 0/4] Getting rid of input labels?, Vincent Legoll, 2021/05/20
- Re: [PATCH RFC 0/4] Getting rid of input labels?, Maxime Devos, 2021/05/20
- Re: [PATCH RFC 0/4] Getting rid of input labels?, Nicolas Goaziou, 2021/05/21
- Re: [PATCH RFC 0/4] Getting rid of input labels?,
Ludovic Courtès <=