unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
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’.




  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).