unofficial mirror of bug-guile@gnu.org 
 help / color / mirror / Atom feed
* bug#16314: Macro dependency tracking issue in guile auto compiler
@ 2014-01-01 13:19 Panicz Maciej Godek
  2014-01-15 20:18 ` Mark H Weaver
  0 siblings, 1 reply; 2+ messages in thread
From: Panicz Maciej Godek @ 2014-01-01 13:19 UTC (permalink / raw)
  To: 16314

Hi,
I've noticed that if macros are ever used in the process
of auto-compilation, the dependency is forgotten, so
even if a module that contains the definition of a macro
gets recompiled, the module that uses the macro remains
unchanged.

For example, consider the following situation. I have
two modules and a program that uses one of them.
The directory tree looks like this:
.
|-- module
|    |-- master.scm
|    `-- slave.scm
`-- program.scm

The module/master.scm contains the following code:

--8<---------------cut here---------------start------------->8---
(define-module (module master)
  #:export (macro function))

(define-syntax-rule (macro)
  (display "macro expanded"))

(define (function)
  (display "function called"))
--8<---------------cut here---------------end--------------->8---
The module/slave.scm uses the master module:

--8<---------------cut here---------------start------------->8---
(define-module (module slave)
  #:use-module (module master)
  #:export (f))

(define (f)
  (macro))
--8<---------------cut here---------------end--------------->8---

But the program.scm uses only the slave module:

--8<---------------cut here---------------start------------->8---
(use-modules (module slave))

(f)
--8<---------------cut here---------------end--------------->8---

If I run the program, I get the following result:
user cwd $ GUILE_LOAD_PATH=. guile -s program.scm
;;; <auto-compilation of program.scm>
;;; <auto-compilation of module/slave.scm>
;;; <auto-compilation of module/master.scm>
macro expandeduser cwd $

Oops, I forgot to add a trailing newline. But that's no problem!
I edit the body of module/master.scm:
-  (display "macro expanded"))
+  (display "macro expanded!\n"))

and then run the program once again:
user cwd $ GUILE_LOAD_PATH=. guile -s program.scm
;;; <auto-compilation of module/master.scm>
macro expandeduser cwd $

Damn! That didn't work. See the problem? If I modify
a module that exports any syntax definition, it should
force all the modules that use it be recompiled -- otherwise
the auto-compilation feature is only a potential source
of confusion, and forcing recompilation of all user modules
if at least one of them has been modified seems to be
a less confusing default strategy, if a more fine-grained
dependency tracking is too difficult to implement.

I've tested that behaviour under guile 2.0.5, guile-2.0.9,
guile-2.0.9.98-36c40 from hydra and guile-2.1.0.545-61989
from git, and everywhere it worked the same.

Regards,
M.





^ permalink raw reply	[flat|nested] 2+ messages in thread

* bug#16314: Macro dependency tracking issue in guile auto compiler
  2014-01-01 13:19 bug#16314: Macro dependency tracking issue in guile auto compiler Panicz Maciej Godek
@ 2014-01-15 20:18 ` Mark H Weaver
  0 siblings, 0 replies; 2+ messages in thread
From: Mark H Weaver @ 2014-01-15 20:18 UTC (permalink / raw)
  To: Panicz Maciej Godek; +Cc: 16314, request

severity 16314 wishlist
thanks

Panicz Maciej Godek <godek.maciek@gmail.com> writes:
> I've noticed that if macros are ever used in the process
> of auto-compilation, the dependency is forgotten, so
> even if a module that contains the definition of a macro
> gets recompiled, the module that uses the macro remains
> unchanged.

Yes, this is a known issue.  I agree that it would be nice to improve
this -- perhaps in 2.2 -- but I'm also worried that it might lead to
absurd amounts of needless recompiling, because one often makes minor
changes to modules that export macros, without the macros being changed
at all.

I'm marking this as a "wishlist" item.

     Thanks,
       Mark





^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-01-15 20:18 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-01-01 13:19 bug#16314: Macro dependency tracking issue in guile auto compiler Panicz Maciej Godek
2014-01-15 20:18 ` Mark H Weaver

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