From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:470:142:3::10]:43644) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i1t11-0000O6-HI for guix-patches@gnu.org; Sun, 25 Aug 2019 09:57:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i1t10-0001Pc-4g for guix-patches@gnu.org; Sun, 25 Aug 2019 09:57:07 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:36116) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1i1t10-0001PW-1c for guix-patches@gnu.org; Sun, 25 Aug 2019 09:57:06 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1i1t0z-0007xp-Tx for guix-patches@gnu.org; Sun, 25 Aug 2019 09:57:05 -0400 Subject: bug#36875: [PATCH] doc: Document the use of `program-file' for mcron jobs. Resent-To: guix-patches@gnu.org Resent-Message-ID: From: Maxim Cournoyer References: <875znhbugu.fsf@gmail.com> <87h872t2me.fsf@elephly.net> <87wofwa0wl.fsf@gmail.com> <87y2zrd0a3.fsf@gnu.org> Date: Mon, 26 Aug 2019 07:54:58 +0900 In-Reply-To: <87y2zrd0a3.fsf@gnu.org> ("Ludovic \=\?utf-8\?Q\?Court\=C3\=A8s\=22'\?\= \=\?utf-8\?Q\?s\?\= message of "Sat, 17 Aug 2019 22:06:44 +0200") Message-ID: <8736hog8jh.fsf@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: Ludovic =?UTF-8?Q?Court=C3=A8s?= Cc: 36875-done@debbugs.gnu.org Hello Ludovic! Ludovic Court=C3=A8s writes: > Hello! > > Maxim Cournoyer skribis: > >> From 0fffed46b4899bf0485926399d3971a4b5e94408 Mon Sep 17 00:00:00 2001 >> From: Maxim Cournoyer >> Date: Thu, 1 Aug 2019 07:34:17 +0900 >> Subject: [PATCH] doc: Document the use of `program-file' for mcron jobs. >> >> * doc/guix.texi (Scheduled Job Execution): Explain why using `program-fi= le' >> for an mcron job can be necessary. Add an example. > > [...] > >> +For more complex jobs defined in Scheme, it is safer to pass the job as= a >> +script to mcron; otherwise, macros defined or imported with @code{use-m= odules} >> +wouldn't expand correctly, as Guile requires macros to be strictly defi= ned or >> +imported at the top level of a Guile module. This can be achieved usin= g the >> +@code{program-file} procedure from the @code{(guix gexp)} module, as sh= own in >> +the example below. > > Macros are a very good example of the problem, but I wonder if it would > be clearer to simply write something like: > > For more complex jobs defined in Scheme where you need control over > the top level, for instance to introduce a @code{use-modules} form, you > can move your code to a separate program using the @code{program-file} > procedure of the @code{(guix gexp)} module (@pxref{G-Expressions}). > The example below illustrates that. I like your version, which feels to me more elegant. But, from my experimentation, using (use-modules) in a nested form is fine for anything else than syntax (macros). Also, the Guile Reference only says that macros must be *defined* at the top level; it doesn't explicitly mention that importing macros is equivalent to defining macros, and are thus subjected to the same restrictions. So, I've amended it to mention the problem more precisely: --8<---------------cut here---------------start------------->8--- For more complex jobs defined in Scheme where you need control over the top level, for instance to introduce a @code{use-modules} form that defines syn= tax (macros), you can move your code to a separate program using the @code{program-file} procedure of the @code{(guix gexp)} module (@pxref{G-Expressions}). The example below illustrates that. --8<---------------cut here---------------end--------------->8--- > Anyway, your patch looks like a great improvement (and a funny example > :-)) so IMO you should push one version or another! This is now live as commit 1407ebeaa1. Thanks for feedback/review! :-) Maxim