From: "Ludovic Courtès" <ludo@gnu.org>
To: Maxime Devos <maximedevos@telenet.be>
Cc: 54539@debbugs.gnu.org
Subject: [bug#54539] [PATCH 0/6] Start breaking up import cycles
Date: Wed, 27 Apr 2022 23:04:47 +0200 [thread overview]
Message-ID: <87h76ei6fk.fsf@gnu.org> (raw)
In-Reply-To: <d88bcfc75a8e70ea9c85715bf4ccf14101a252ae.camel@telenet.be> (Maxime Devos's message of "Tue, 19 Apr 2022 11:40:39 +0200")
Maxime Devos <maximedevos@telenet.be> skribis:
> Ludovic Courtès schreef op di 19-04-2022 om 11:17 [+0200]:
>> If you follow the logic, breaking up import cycles would mean, in the
>> end, having one file per package.
>
> Not necessarily, (gnu packages minetest) has multiple packages
> (minetest and some of its mods) but it doesn't cause any cycles (no
> other module, except sort-of (guix build-system minetest), imports it.)
>
> That one appears to be, at least currently, a bit of a special case
> though.
I think so. All the historical package modules started that way.
>> But would that be enough? Probably not, because low-level packages
>> are bound to depend on high-level packages—e.g., glibc depends on
>> Python, some other low-level tool might depend on Pandoc (GHC),
>> librsvg depends on Rust, and so on.
>>
>> IOW, since the graph of build dependency really is a graph, and not a
>> tree, there’ll always be import cycles.
>
> The graph of build dependencies (in terms of derivations) is a tree,
It’s a directed acyclic graph (DAG), not a tree.
> the build daemon doesn't allow cyclic derivations. So I think that by
> letting the module graph be a coarser version of the derivation graph
> but still a tree (except for the bootstrap packages gcc, sed, ... whose
> modules may import each other).
I thought so, but came to the conclusion that it’s hardly feasible in
practice.
>> (guix self), the module that ‘guix pull’ uses, already automatically
>> splits package modules into two groups. It’s not as modular as we’d
>> like, but it’s a start. What would be useful is to come up with metrics
>> and tools to reduce the closure of the “guix-packages-base” group.
>>
>> WDYT?
>
> Maybe:
>
> a tool that determines a minimal set of (importing module ->
> imported module tuples) that needs to be lazified to reduce the
> closure size (in number of modules) in guix-packages-base by N
Currently ‘source-module-closure’ considers #:autoloaded modules as part
of the closure; we could change that though and indeed, that might prove
helpful in this case.
> and:
>
> extend "guix style" to perform these changes
>
> Maybe the ‘number of imports lazified -> number of modules in guix-
> packages-base’ function has some sweet spot somewhere.
Could be.
> I think it would be easier though to work our way up before going to
> "guix pull" -- first "hello", then "util-linux, then "guile-avahi",
> then "guile-ssh", then "sqlite" ... and only eventually guix itself.
>
> Also, even if the closure of "guix-packages-base" cannot be reduced,
> making it (mostly) a tree would allow splitting the group into multiple
> parts (see ‘Faster "guix pull" by incremental compilation and non-
> circular modules?’).
>
> Alternative:
>
> * make _all_ package module imports lazy -- #:autoload everything!
>
> guix-packages-base might then need to be set manually though ...
I don’t know, having spent some time on this, I feel like there’s no
easy solution. But it could be that using autoloads at least in the
right places would help shrink ‘guix-packages-base’. Worth a try!
Ludo’.
next prev parent reply other threads:[~2022-04-27 21:05 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-23 18:46 [bug#54539] [PATCH 0/6] Start breaking up import cycles Maxime Devos
2022-03-23 18:48 ` [bug#54539] [PATCH 1/6] gnu: audacity: Move into new module to break cycles Maxime Devos
2022-03-23 18:48 ` [bug#54539] [PATCH 2/6] gnu: xsensors: Move to (gnu packages xorg) " Maxime Devos
2022-03-23 18:48 ` [bug#54539] [PATCH 3/6] gnu: tlp: Move tlp and friends to new module " Maxime Devos
2022-03-23 18:48 ` [bug#54539] [PATCH 4/6] gnu: go-netlink: Move to (gnu packages networking) " Maxime Devos
2022-03-23 18:48 ` [bug#54539] [PATCH 5/6] gnu: earlyoom: Avoid importing Goland and Haskelland " Maxime Devos
2022-03-23 18:48 ` [bug#54539] [PATCH 6/6] gnu: linux: Avoid importing (gnu packages check) " Maxime Devos
2022-03-25 14:42 ` [bug#54539] [PATCH 1/6] gnu: audacity: Move into new module " Maxime Devos
2022-03-23 18:49 ` [bug#54539] [PATCH 0/6] Start breaking up import cycles Maxime Devos
2022-03-24 7:22 ` Liliana Marie Prikler
2022-03-24 15:05 ` Maxime Devos
2022-03-24 15:38 ` Liliana Marie Prikler
2022-03-24 15:46 ` Maxime Devos
2022-03-25 10:26 ` Maxime Devos
2022-03-25 11:47 ` Liliana Marie Prikler
2022-03-25 14:12 ` Maxime Devos
2022-03-25 14:27 ` Liliana Marie Prikler
2022-03-24 16:58 ` zimoun
2022-03-24 18:07 ` Maxime Devos
2022-03-25 8:44 ` Liliana Marie Prikler
2022-03-25 17:05 ` zimoun
2022-03-25 17:46 ` Maxime Devos
2022-03-25 19:33 ` zimoun
2022-03-24 17:05 ` Leo Famulari
2022-03-25 8:51 ` Liliana Marie Prikler
2022-03-24 21:49 ` Maxime Devos
2022-03-25 14:36 ` Maxime Devos
2022-04-19 9:17 ` Ludovic Courtès
2022-04-19 9:40 ` Maxime Devos
2022-04-27 21:04 ` Ludovic Courtès [this message]
2022-04-19 15:31 ` Maxime Devos
2022-04-27 20:59 ` Ludovic Courtès
2022-09-03 16:43 ` [bug#54539] [PATCH v2 01/30] gnu: package-management: Autoload unless used by Guix Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 02/30] gnu: gnupg: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 03/30] gnu: base: Autoload (gnu packages algebra) Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 04/30] gnu: admin: Autoload unless used by Guix Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 05/30] gnu: perl: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 06/30] gnu: crypto: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 07/30] gnu: check: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 08/30] gnu: databases: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 09/30] gnu: backup: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 10/30] gnu: guile-xyz: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 11/30] gnu: gettext: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 12/30] gnu: python: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 13/30] gnu: linux: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 14/30] gnu: docbook: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 15/30] gnu: icu4c: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 16/30] gnu: curl: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 17/30] gnu: elf: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 18/30] gnu: compression: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 19/30] gnu: hurd: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 20/30] gnu: algebra: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 21/30] gnu: version-control: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 22/30] gnu: tcl: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 23/30] gnu: fontutils: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 24/30] gnu: web: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 25/30] gnu: xml: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 26/30] gnu: ruby: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 27/30] gnu: python-xyz: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 28/30] gnu: cmake: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 29/30] gnu: documentation: " Maxime Devos
2022-09-03 16:43 ` [bug#54539] [PATCH v2 30/30] gnu: Autoload more Maxime Devos
2022-09-03 16:44 ` Maxime Devos
2022-09-03 18:09 ` Maxime Devos
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
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87h76ei6fk.fsf@gnu.org \
--to=ludo@gnu.org \
--cc=54539@debbugs.gnu.org \
--cc=maximedevos@telenet.be \
/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 public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).