GNU bug report logs -
#47084
Guile 3.0 - The module-use! 'target' functionality is broken
Previous Next
To reply to this bug, email your comments to 47084 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
bug-guile <at> gnu.org
:
bug#47084
; Package
guile
.
(Fri, 12 Mar 2021 03:18:01 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
David Pirotte <david <at> altosw.be>
:
New bug report received and forwarded. Copy sent to
bug-guile <at> gnu.org
.
(Fri, 12 Mar 2021 03:18:01 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Hello,
Guile 3.0
The module-use! 'target' functionality is broken
The code of module-use! itself didn't change, and call(s) to the
procedure work(s) fine, but the functionality it is supposed to
provide is broken.
To reproduce, save the following minimalist module somewhere:
;; start here
(define-module (a)
#:use-module (srfi srfi-1))
(eval-when (expand load eval)
(module-use! (module-public-interface (current-module))
(resolve-interface '(srfi srfi-1))))
;; end here
;; then, fire a 3.0 repl:
(add-to-load-path "/your/path")
,use (a)
map
[ below, my attempts using Guile 3.0.4.3-e076a5, then Guile
[ 2.2.7.2-a5875-dirty to compare.
Fwiw:
(a) G-Golf extensively relies on the module-use! functionality
'in general', and in particular, on its 'dynamic' implementation - that
is, the public interface of a module that has been 'module-used'
may evolve in time (at the 'essence' of any GI dynamic binding);
(b) just like for the minimalist module (a) above, but it will
do so 'dynamically', G-Golf needs that the public interface of a
module that has been 'module-used' may re-export-and-replace a guile
core procedure (generally promoted as a generic function, with the core
proc as its default method).
Thanks,
David
GNU Guile 3.0.4.3-e076a5
...
scheme@(guile-user)> (add-to-load-path "/home/david/alto/projects/g-golf/3.0")
scheme@(guile-user)> ,use (a)
;;; compiling /home/david/alto/projects/g-golf/3.0/a.scm
;;; compiled /home/david/.cache/guile/ccache/3.0-LE-8-4.3/usr/alto/projects/g-golf/3.0/a.scm.go
scheme@(guile-user)> map
WARNING: (guile-user): imported module (a) overrides core binding `map'
WARNING: (guile-user): `map' imported from both (guile) and (a)
WARNING: (guile-user): imported module (a) overrides core binding `map'
WARNING: (guile-user): `map' imported from both (guile) and (a)
;;; <unknown-location>: warning: possibly unbound variable `map'
WARNING: (guile-user): imported module (a) overrides core binding `map'
WARNING: (guile-user): `map' imported from both (guile) and (a)
WARNING: (guile-user): imported module (a) overrides core binding `map'
WARNING: (guile-user): `map' imported from both (guile) and (a)
ice-9/boot-9.scm:1670:16: In procedure raise-exception:
Unbound variable: map
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
scheme@(guile-user) [1]>
GNU Guile 2.2.7.2-a5875-dirty
...
scheme@(guile-user)> (add-to-load-path "/home/david/alto/projects/g-golf/3.0")
scheme@(guile-user)> ,use (a)
;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0
;;; or pass the --no-auto-compile argument to disable.
;;; compiling /home/david/alto/projects/g-golf/3.0/a.scm
;;; compiled /home/david/.cache/guile/ccache/2.2-LE-8-3.A/usr/alto/projects/g-golf/3.0/a.scm.go
scheme@(guile-user)> map
$2 = #<procedure map (f l) | (f l1 l2) | (f l1 . rest)>
[Message part 2 (application/pgp-signature, inline)]
Information forwarded
to
bug-guile <at> gnu.org
:
bug#47084
; Package
guile
.
(Mon, 03 May 2021 04:27:01 GMT)
Full text and
rfc822 format available.
Message #8 received at 47084 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Hello,
> ...
> (define-module (a)
> #:use-module (srfi srfi-1))
> (eval-when (expand load eval)
> (module-use! (module-public-interface (current-module))
> (resolve-interface '(srfi srfi-1))))
> ...
Commit 19f38a38fde7da5fbcf29d0ebc4574e993210110 fixes the
bug, many thanks.
Now, I have a question related to 'new' warnings though - I say 'new'
because there are no warnings in 2.2 - for which I don't see how one
can resolve those, unless mute them all by calling
default-duplicate-binding-handler and remove warn-override-core
and warn from the default list.
Here is a example, so one can reproduce and maybe give us some
hints:
;;; module (a) starts here
(define-module (foo)
#:use-module (srfi srfi-1))
(eval-when (expand load eval)
(module-use! (module-public-interface (current-module))
(resolve-interface '(srfi srfi-1))))
(for-each display '(1 2 3 4))
(newline)
;;; module (foo) ends here
;;; file bar.scm starts here - not a module, just a file
(use-modules (foo))
#;(eval-when (expand load eval)
(default-duplicate-binding-handler
'(replace last)))
(for-each display '(5 6 7 8))
(newline)
;; drop the two above module/file somwhere
;;; now, fire geiser and
(add-to-load-path "/your/path")
(load "/your/path/bar.scm")
;; you should see that there is no warning 'from (foo)', but two
;; warnings
WARNING: (guile-user): imported module (a) overrides core
binding `for-each'
;; 'from the bar.scm file (one when it compiles, one when it 'runs' ...
;; if you start a new session, then there should be one warning only ...
Now, if we uncomment the eval-when in bar.scm and try again, all is
fine
But i wish the module-use! interface/internals would be enhanced so
that it does the same thing for module-use! then what is done simply
using #:use-module... and allow us to keep warn-override-core and warn
in the default-duplicate-binding-handler list ... not sure i made
myself clear, but trying :)
David
[Message part 2 (application/pgp-signature, inline)]
Information forwarded
to
bug-guile <at> gnu.org
:
bug#47084
; Package
guile
.
(Tue, 04 May 2021 04:38:01 GMT)
Full text and
rfc822 format available.
Message #11 received at 47084 <at> debbugs.gnu.org (full text, mbox):
[Message part 1 (text/plain, inline)]
Hello,
> ...
> Commit 19f38a38fde7da5fbcf29d0ebc4574e993210110 fixes the
> bug, many thanks.
> Now, I have a question related to 'new' warnings though - I say 'new'
> because there are no warnings in 2.2 - for which I don't see how one
> can resolve those, unless mute them all by calling
> default-duplicate-binding-handler and remove warn-override-core
> and warn from the default list.
The proper way to stop these warnings is to add a
#:re-export-and-replace clause to the module definition of the module
that calls module-use! - I didn't think I had to do this because we
didn't have to using 2.2 (nor #:re-export nor #:replace, within the
context of module-use! that is, and the #:re-export-and-replace clause
is new to 3.0) - like this:
;;; module (a) starts here
(define-module (foo)
#:use-module (srfi srfi-1))
#:re-export-and-replace (for-each))
(eval-when (expand load eval)
(module-use! (module-public-interface (current-module))
(resolve-interface '(srfi srfi-1))))
;;; module (foo) ends here
Now the (bar) module or bar.scm file example file may skip the call to
default-duplicate-binding-handler:
;;; file bar.scm starts here
(use-modules (foo))
(for-each display '(5 6 7 8))
(newline)
;; file bar.scm stops here
;; drop the two above module/file somwhere
;;; now, fire geiser and
(add-to-load-path "/your/path")
(load "/your/path/bar.scm")
;; you shouldn't see any warnings anymore...
David
[Message part 2 (application/pgp-signature, inline)]
This bug report was last modified 3 years and 204 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.