From: "Ludovic Courtès" <ludo@gnu.org>
To: guix-devel@gnu.org
Subject: [PATCH RFC 0/4] Getting rid of input labels?
Date: Thu, 20 May 2021 16:58:26 +0200 [thread overview]
Message-ID: <20210520145830.14108-1-ludo@gnu.org> (raw)
Hello Guix!
Here’s a proposal for a soft revolution: getting rid of input labels
in package definitions. Instead of writing:
(native-inputs
`(("autoconf" ,autoconf)
("automake" ,automake)
("pkg-config" ,pkg-config)
("guile" ,guile-3.0)))
one can write:
(native-inputs (list autoconf automake pkg-config guile-3.0))
With this patch set, this is just syntactic sugar: ‘package-inputs’
and friends still return a list of tuples. (These patches are
against ‘core-updates’ but that works equally well on ‘master’,
without a world rebuild.)
My understanding of the code is that this change adds no overhead
for packages written in the old style, and negligible overhead for
packages written in the new style (calling ‘package-name’
instead of referring to a literal string for the label.) I haven’t
tried to measure it though as it would require a massive conversion
to the new style to be really measurable.
I don’t think I need to expound on the benefits. :-)
There are issues and open questions:
• This hides labels, but they’re still visible as soon as one
fiddles with ‘package-inputs’ & co. So this lowers the barrier
to entry, but the difficulty of dealing with input tuples
does not disappear entirely.
• Both styles would be supported for a long time so contributors
would still have to know about input tuples anyway.
• There are packages that use custom labels as some sort of an
abstraction. For instance, the “kernel-headers” label is
associated either with ‘linux-libre-headers’ or with
‘hurd-headers’. In this case, the simplified style would
use the package name as the label, which isn’t appropriate,
or at least would require adjustments in packages that
rely on this.
• There are packages with same-named but different inputs,
and they rely on having a different input label.
• Some packages rely on labels that differ from the package
name (this is what the ‘guix lint -c input-labels’ patch
detects). For instance, commencement.scm has things like:
`(("guile" ,%bootstrap-guile))
Automatic labeling would convert it to:
`(("guile-bootstrap" ,%bootstrap-guile))
Not necessarily a problem: we can keep the old style for these.
Common Lisp packages typically lack the “cl-” prefix in
input labels but most likely they don’t actually refer to
those labels, so we should be fine.
• 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.
• Currently, something like:
(inputs (list glib))
is converted to:
(inputs `(("glib" ,glib)))
Should it, instead, be converted to:
(inputs `(("glib" ,glib)
("glib:bin" ,glib "bin")))
? This would make the concise style strictly less
expressive, but maybe good enough?
Ludovic Courtès (4):
records: Support field sanitizers.
DRAFT packages: Allow inputs to be plain package lists.
DRAFT gnu: Change inputs of core packages to plain lists.
DRAFT lint: Add 'input-labels' checker.
gnu/packages/base.scm | 30 +++++++--------
gnu/packages/guile.scm | 87 ++++++++++--------------------------------
gnu/packages/mes.scm | 23 ++++-------
guix/lint.scm | 35 +++++++++++++++++
guix/packages.scm | 35 +++++++++++++++--
guix/records.scm | 65 ++++++++++++++++++++++++-------
tests/records.scm | 38 ++++++++++++++++++
7 files changed, 198 insertions(+), 115 deletions(-)
--
2.31.1
next reply other threads:[~2021-05-20 15:04 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-20 14:58 Ludovic Courtès [this message]
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
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=20210520145830.14108-1-ludo@gnu.org \
--to=ludo@gnu.org \
--cc=guix-devel@gnu.org \
/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.