From: Nala Ginrut <nalaginrut@gmail.com>
To: Maxime Devos <maximedevos@telenet.be>
Cc: Keith Wright <kwright@keithdiane.us>,
"hakancandar@protonmail.com" <hakancandar@protonmail.com>,
"guile-user@gnu.org" <guile-user@gnu.org>
Subject: Re: Running Compiled Guile Objects
Date: Sun, 15 Dec 2024 01:26:54 +0900 [thread overview]
Message-ID: <CAPjoZoc_sVw3x5XK2zY9RE=h5Gb0BQ9sNfWvtA2xcaAdCGfKmQ@mail.gmail.com> (raw)
In-Reply-To: <CAPjoZoev0Z9EGqt0pbBd+DKQaTTsVFyHxDfNHTz4dHp6GwX-jA@mail.gmail.com>
> Guile doesn’t care about whether it is a cache or not, as long as it has
the .go, the timestamps are ok, and (IIRC) corresponding .scm exis.
I wonder if you have tested the given example. Guile doesn't load .go as
the dependency, but .scm.
I think I have to confirm that you don't want to trigger auto-compilation,
since your situation is the default cache dir lacking of permission, right?
If so, my example showed the simple bypass may not a proper way to go.
Best regards.
On Sun, Dec 15, 2024, 01:20 Nala Ginrut <nalaginrut@gmail.com> wrote:
> > You missed ‘-C’ (load-compiled-path)
>
> I didn't miss load-compiled-path here, I think you confused with -c.
> -C obj specified the current load compiled path to "./obj".
>
> On Sun, Dec 15, 2024, 01:10 Maxime Devos <maximedevos@telenet.be> wrote:
>
>>
>> - IMHO, the manually .go loading will cause more issues.
>> - First, here's a fact: manually loading will not bypass the
>> intrinsic .go caching. Only the first .go will, and the rest of the deps
>> chain will still be managed by the intrinsic caching. [snip]
>>
>> [snip: module (a) (a.scm / a.go) uses module (b) (b.scm / b.go))
>>
>> I don’t see ‘more issues’ here. The (non-)issue you mention exists
>> regardless of whether module a is loaded as ‘a.scm’ or as ‘b.go’. Also
>> autocompilation causes its own issues, if it requires things in the
>> environment during compilation that aren’t available at time or use (e.g. a
>> C pre-processor in case a library using macros from a FFI library, where
>> you don’t want the C pre-processor to have to stay installed when using the
>> binding library), or when the compilation is messy, e.g. it uses files from
>> the build directory that aren’t installed in the .scm and .go directories
>> (and don’t make sense to be installed there).
>>
>> And in the situation where all used modules are precompiled and already
>> in the load paths (e.g. modules of Guile itself, or installed with package
>> manager), then no caching happens at all.
>>
>> - - if you have two module, a.scm and b.scm, a imported b's function
>> to use.
>> - the .scm are in ./mod directory.
>> - compile them and put into ./obj/mod directory.
>> - guile -C obj -L .
>> - (load-compiled "obj/mod/a.scm.go")
>> - the deps have to be loaded from the scm path specified by -L. IIRC
>> there is no way to load deps from .go, unless you provide a manual caching.
>>
>> You missed ‘-C’ (load-compiled-path). You can point this to a cache if
>> you wish, but it doesn’t need to be a cache. Guile doesn’t care about
>> whether it is a cache or not, as long as it has the .go, the timestamps are
>> ok, and (IIRC) corresponding .scm exis.
>>
>> - So the problem is, if you want to bypass the caching, you have to
>> provide your manual caching comprehensively.
>>
>> No. You can disable caching without providing manual caching. E.g., in
>> case of %.go:%.scm Makefile rules (+ dependency information which in
>> principle could be automatically generated by guild, but currently isn’t
>> yet), make takes care of compilation. Because of its local nature (no
>> shared cache) (^), lack of capacity limits (no time limits, no size limits)
>> and its aesthetics (it’s just compilation) (*), this is not a cache system.
>>
>> (*): for a comparison: you can compile C code to a shared and install it
>> in /usr/lib without /usr/lib being a cache – being a cache is more about
>> how it is populated and maintained than it is about what it happens to
>> contain.
>> (^): not a strict requirement for a cache, but it’s an indication when
>> the ‘known cache’ (that thing in .cache/) is a different and more global
>> thing.
>>
>> Another option is to only precompile the a.scm (and not additional
>> dependencies) and disable autocompilation (when there’s only a single file
>> to take care of, comprehensive is trivial).
>>
>> A third option is to use potentially outdated .go (unfortunately Guile
>> doesn’t fully separate caches from precompiled code, so beforehand you need
>> to update the timestamps to make Guile accept them). This can then be
>> separation of ‘code I'm currently writing, which might be in a not-ready
>> state, but I already saved it to not loose it in case the computer needs to
>> suddenly shut down’ and ‘latest ‘good’ version of the code – might be
>> incomplete, but is ready for testing’. (Other methods exist too, but this
>> can be convenient.)
>>
>> - The relative easier way would be modify the loading path on the fly
>> with Guile related API.
>>
>> You can indeed modify the loading paths from within Guile (I previously
>> mentioned this myself). But this doesn’t help with loading the first .go
>> (so it’s not an easier way, it’s not a way) – if a.scm sets up the load
>> paths (including compiled path), then by the time that Guile can know where
>> a.go is located, it’s too late for that. So, either you need to:
>>
>> (0) not precompile a.scm (it’s pointless) (and for dependencies adjust
>> load paths when needed, in invocation or in a.scm)
>> (1) install a.go somewhere in the standard load-compiled-path (not always
>> possible) and just ask guile to load a.scm (-> guile loads a.go instead)
>> (2) add ‘-C insert-go-directory-here’ to the guile invocation
>> (straightforward, but not the best option) and load a.scm (-> guile loads
>> a.go instead)
>> (3) tell Guile to load a.go, and let a.go set load-compiled-path (&
>> load-path) to find remaining dependencies
>>
>> Of these four options, (0) and (3) have the most convenient invocation.
>> Of those two options, (3) has the least re-compilation. By these criteria,
>> (3) is the best.
>>
>> Best regards,
>> Maxime Devos
>>
>>
>>
>
next prev parent reply other threads:[~2024-12-14 16:26 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-13 20:34 Running Compiled Guile Objects Hakan Candar via General Guile related discussions
2024-12-14 0:15 ` Nala Ginrut
2024-12-14 1:14 ` Keith Wright
2024-12-14 2:33 ` Nala Ginrut
2024-12-14 2:43 ` Nala Ginrut
2024-12-14 13:01 ` Maxime Devos via General Guile related discussions
2024-12-14 14:37 ` Nala Ginrut
2024-12-14 14:53 ` Maxime Devos via General Guile related discussions
2024-12-14 15:20 ` Nala Ginrut
2024-12-14 16:10 ` Maxime Devos via General Guile related discussions
2024-12-14 16:20 ` Nala Ginrut
2024-12-14 16:26 ` Nala Ginrut [this message]
2024-12-14 16:31 ` Nala Ginrut
2024-12-14 16:50 ` Maxime Devos via General Guile related discussions
2024-12-14 17:03 ` Nala Ginrut
2024-12-14 17:48 ` Maxime Devos via General Guile related discussions
2024-12-14 18:17 ` Nala Ginrut
[not found] ` <CAPjoZofH2QuH_ekSk2L=-sUtVTAfEBpsJS0HkXwA_J9y+Wmg0Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2024-12-14 17:11 ` Basile Starynkevitch
2024-12-14 17:21 ` AOT compiler (was: Running Compiled Guile Objects) Nala Ginrut
[not found] ` <49d9827f4455076cc066add3e51f0e882b59e9b7.camel@starynkevitch.net>
[not found] ` <CAPjoZoeu++mC+Syd35LjvLJVu6FEcZ=tb5jWdYgS0fZP-OHQiQ@mail.gmail.com>
[not found] ` <CAPjoZoeu++mC+Syd35LjvLJVu6FEcZ=tb5jWdYgS0fZP-OHQiQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2024-12-15 1:59 ` Nala Ginrut
[not found] ` <CAPjoZodoBRcw28E5Zjnxb-f_aWG49LjOEDjKQptEH5RnxXsdvw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2024-12-15 2:08 ` Nala Ginrut
[not found] ` <CAPjoZof2pmNCQH1EQvJjFmUf+Fwt+qMd8y4daxkZMbCY9Bez+Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2024-12-15 7:39 ` Eli Zaretskii
[not found] ` <86msgxs8d0.fsf-mXXj517/zsQ@public.gmane.org>
2024-12-15 8:07 ` Nala Ginrut
[not found] ` <CAPjoZoeBSvJrCDkDXgJX27Hr3Y3yAC4-mmMzKsuPnQvGwEjatQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2024-12-15 10:41 ` Eli Zaretskii
[not found] ` <86ed29rzy1.fsf-mXXj517/zsQ@public.gmane.org>
2024-12-15 10:49 ` Nala Ginrut
[not found] ` <CAPjoZoc-8THB4BAPUFR2OayrvnSKhFtyOLWR64-jOfYxaJme2A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2024-12-15 10:58 ` tomas-2s+jgvIlYZ2ELgA04lAiVw
2024-12-15 11:01 ` Eli Zaretskii
[not found] ` <86bjxdryzg.fsf-mXXj517/zsQ@public.gmane.org>
2024-12-15 11:09 ` Nala Ginrut
[not found] ` <CAPjoZodWGB+QMYABLr5cM_jN2Lpk3Ex-47snPnLBa3-TMZxQYw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2024-12-15 11:32 ` Eli Zaretskii
[not found] ` <769073d434c2ed5fb7937c85da240aa5df4d854a.camel-VdE74OAlGqnvXjIo7pOF+l6hYfS7NtTn@public.gmane.org>
2024-12-14 23:02 ` Running Compiled Guile Objects David Malcolm
[not found] ` <fd04850b1d1b2b5e0c909b5b05d1d6a29a5cbd10.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2024-12-14 23:43 ` Maxime Devos
[not found] ` <20241215004310.onj82D0091dDhme01nj9u5-Pw8LEBfqDLYI1J5xXzd7/dsHW6RRjAQv@public.gmane.org>
2024-12-15 1:43 ` David Malcolm
2024-12-14 19:21 ` Dr. Arne Babenhauserheide
2024-12-14 20:12 ` Matt Wette
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://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAPjoZoc_sVw3x5XK2zY9RE=h5Gb0BQ9sNfWvtA2xcaAdCGfKmQ@mail.gmail.com' \
--to=nalaginrut@gmail.com \
--cc=guile-user@gnu.org \
--cc=hakancandar@protonmail.com \
--cc=kwright@keithdiane.us \
--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.
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).