From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id 4E8UGyHkYV9TIAAA0tVLHw (envelope-from ) for ; Wed, 16 Sep 2020 10:08:33 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0 with LMTPS id 4B80FyHkYV/AQgAA1q6Kng (envelope-from ) for ; Wed, 16 Sep 2020 10:08:33 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 0B5939402DA for ; Wed, 16 Sep 2020 10:08:33 +0000 (UTC) Received: from localhost ([::1]:38450 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIUMa-0001LO-1T for larch@yhetil.org; Wed, 16 Sep 2020 06:08:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:57412) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kIUMQ-0001Jp-Fx for guix-devel@gnu.org; Wed, 16 Sep 2020 06:08:22 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]:36899) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kIUMQ-0002cy-6p; Wed, 16 Sep 2020 06:08:22 -0400 Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=39246 helo=ribbon) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1kIUMO-0006Mx-Oe; Wed, 16 Sep 2020 06:08:21 -0400 From: =?utf-8?Q?Ludovic_Court=C3=A8s?= To: Maxim Cournoyer Subject: Re: Dependency cycle issues when using a Gexp-based snippet References: <87h7ssx07p.fsf@gmail.com> <87wo1nzr6p.fsf@gnu.org> <87mu286wt0.fsf@gmail.com> <877dt6orwn.fsf@gnu.org> <87tuw047td.fsf@gmail.com> X-URL: http://www.fdn.fr/~lcourtes/ X-Revolutionary-Date: Jour de la Vertu de =?utf-8?Q?l'Ann=C3=A9e?= 228 de la =?utf-8?Q?R=C3=A9volution?= X-PGP-Key-ID: 0x090B11993D9AEBB5 X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4 0CFB 090B 1199 3D9A EBB5 X-OS: x86_64-pc-linux-gnu Date: Wed, 16 Sep 2020 12:08:08 +0200 In-Reply-To: <87tuw047td.fsf@gmail.com> (Maxim Cournoyer's message of "Mon, 14 Sep 2020 12:55:10 -0400") Message-ID: <87v9geniev.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: guix-devel Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: "Guix-devel" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-devel-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-devel-bounces@gnu.org X-Spam-Score: -1.01 X-TUID: ucMN8FuwlZib Hi, Maxim Cournoyer skribis: >>> What is the difference between delayed and thunked? Would a thunked >>> capture the closure of its environment while delayed not? Is the >>> closure useful to access record-bound values such as the version field >>> of a package? >> >> =E2=80=98Thunk=E2=80=99 uses an actual thunk (zero-argument procedure) t= hat=E2=80=99s called >> each time the field is accessed; =E2=80=98delayed=E2=80=99 uses a promis= e, which is >> similar except that the result is memoized (info "(guile) Delayed >> Evaluation"). > > Thanks for the explanation! Now I wonder why delayed should not always > be preferable to thunks? Is there a reason to offer thunked as well? Thunked fields were introduced pretty much as a hack so one could look up dynamic bindings =E2=80=98%current-system=E2=80=99 and =E2=80=98%current= -target-system=E2=80=99 and produce a result that=E2=80=99s a function of that. (See .) >> What would be interesting is a comparison of the performance of >> =E2=80=98package-derivation=E2=80=99, which can be done with something l= ike: >> >> time guix build -d --no-grafts libreoffice pandoc >> >> For memory consumption, try: >> >> GUIX_PROFILING=3Dgc guix build -d --no-grafts libreoffice pandoc > > Thanks for these "benchmarking" tips :-). Unfortunately, making the > 'snippet' field either thunked or delayed causes 'guix build' to stop > working entirely, peaking the CPU and slowy eating RAM away (looks like > a typical dependency cycle). Hmm. In packages.scm, there=E2=80=99s a couple of places where are matched directly, which means that you get to see the raw thunk/promise. The solution is to explicitly call the thunk/force the promise there, like we do for the =E2=80=98patches=E2=80=99 field in this c= lause: ($ uri method hash name (=3D force (patches ...)) snippet (flags ...) inputs (modules ...) guile-for-build) If that still doesn=E2=80=99t help, please send a patch! :-) Ludo=E2=80=99.