Hi Andrew, Andrew Burgess <andrew.burg...@embecosm.com> skribis:
> My concerns are based on this page of the guile manual: > > > https://www.gnu.org/software/guile/manual/html_node/Compilation.html#Compilation > > specifically this: > > "... Guile does not yet do proper dependency tracking, so that if > file a.scm uses macros from b.scm, and b.scm changes, a.scm would > not be automatically recompiled." Yes. Concretely, that means you can either use Makefiles or similar (like with most other languages) or turn off auto-compilation (with ‘--no-auto-compile’ or with ‘GUILE_AUTO_COMPILE=0’). > So, my current thinking is to wrap the invocation of the guile script > in a shell script, which _always_ forces recompilation. But, if I'm > doing that, I may as well just disable compilation completely. But > this doesn't seem right. > > So, I'm sure I must be missing something here. How do others deal > with this situation? Common practice is to have makefiles or similar as part of your software. When you run “make”, it runs ‘guild compile’ to compile all your Scheme source; upon “make install”, both .scm and .go files are installed. Here’s an example that does that using the GNU autotools: https://notabug.org/cwebber/guile-gcrypt For a pure Guile project, Guile Hall helps get started: https://gitlab.com/a-sassmannshausen/guile-hall > - Am I missing an obvious solution for working with syntax/macros and > multiple files? > > - Am I wrong to think that syntax/macros are such a big part of the > language? Should I be limiting syntax/macro usage to small scopes, > i.e. within a single file, and only true defines should be exposed > outside of a file? Macros are very useful and a salient point of Scheme, but there are many other things in the language. :-) > - Maybe Guile just isn't designed for writing large, multi-file > projects? There are large projects written in Guile, such as Guix. > - Maybe Guile projects are only ever shipped to users who are happy > managing the compile cache themselves, e.g. more power users, and > not really for general users? Like I wrote, non-trivial projects often install .go files alongside .scm files such that things never go through ~/.cache/guile. HTH! Ludo’.