all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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’.


  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.