* top-repl priority of guile module @ 2006-12-01 21:59 Kevin Ryde 2006-12-04 12:15 ` Ludovic Courtès 0 siblings, 1 reply; 13+ messages in thread From: Kevin Ryde @ 2006-12-01 21:59 UTC (permalink / raw) Sven Hartrumpf on guile-user a while ago reported on a run of guile --use-srfi=1 leaves the REPL with the core `iota', not the srfi-1 one. What's the theory behind this bit of top-repl (in boot-9.scm), ;; so that builtin bindings will be checked first (module-use! guile-user-module (resolve-interface '(ice-9 r5rs))) (module-use! guile-user-module (resolve-interface '(guile))) The effect is to override any bindings that srfi modules attempt to replace. So srfi-17 car or srfi-39 current-input-port are similarly afflicted. I'm thinking of removing that last line (module-use! guile-user-module (resolve-interface '(guile))) to stop the core being elevated. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-01 21:59 top-repl priority of guile module Kevin Ryde @ 2006-12-04 12:15 ` Ludovic Courtès 2006-12-05 0:26 ` Kevin Ryde 0 siblings, 1 reply; 13+ messages in thread From: Ludovic Courtès @ 2006-12-04 12:15 UTC (permalink / raw) Hi, Kevin Ryde <user42@zip.com.au> writes: > Sven Hartrumpf on guile-user a while ago reported on a run of > > guile --use-srfi=1 > > leaves the REPL with the core `iota', not the srfi-1 one. What's the > theory behind this bit of top-repl (in boot-9.scm), > > ;; so that builtin bindings will be checked first > (module-use! guile-user-module (resolve-interface '(ice-9 r5rs))) > (module-use! guile-user-module (resolve-interface '(guile))) > > The effect is to override any bindings that srfi modules attempt to > replace. So srfi-17 car or srfi-39 current-input-port are similarly > afflicted. Wild guess: Does the following fix the problem: (module-use-interfaces! guile-user-module (resolve-interface '(ice-9 r5rs)) (resolve-interface '(guile))) (instead of the two `module-use!' line.) IIRC, `module-use-interfaces!' calls `process-duplicates', which in turn correctly honors the `replace' policy for duplicate bindings. Conversely, `module-use!' just conses the given modules to the module's use list without invoking `process-duplicates', hence the problem you are seeing (the interface of `(guile)' ends up before that of `srfi-XX' in the module use list). Thanks, Ludovic. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-04 12:15 ` Ludovic Courtès @ 2006-12-05 0:26 ` Kevin Ryde 2006-12-05 3:15 ` Kevin Ryde 0 siblings, 1 reply; 13+ messages in thread From: Kevin Ryde @ 2006-12-05 0:26 UTC (permalink / raw) ludovic.courtes@laas.fr (Ludovic Courtès) writes: > > Wild guess: Does the following fix the problem: > > (module-use-interfaces! guile-user-module > (resolve-interface '(ice-9 r5rs)) > (resolve-interface '(guile))) No, apparently, though the theory would seem sound ... I guess top-repl really should just do the equivalent of use-modules for extra bits it wants. I can't see the point of "use-modules (guile)" when that core is already in use in the guile-user module. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-05 0:26 ` Kevin Ryde @ 2006-12-05 3:15 ` Kevin Ryde 2006-12-05 9:53 ` Ludovic Courtès 0 siblings, 1 reply; 13+ messages in thread From: Kevin Ryde @ 2006-12-05 3:15 UTC (permalink / raw) [-- Attachment #1: Type: text/plain, Size: 146 bytes --] I wrote: > > No, apparently, though the theory would seem sound ... Oops, I was doing it wrong, that does work. Though the change I propose is: [-- Attachment #2: boot-9.scm.core-no-override.diff --] [-- Type: text/plain, Size: 560 bytes --] --- boot-9.scm.~1.356.2.4.~ 2006-11-29 05:55:55.000000000 +1100 +++ boot-9.scm 2006-12-05 14:14:31.000000000 +1100 @@ -3397,9 +3397,7 @@ '(ice-9 debugger) '(debug))) (module-use! guile-user-module (resolve-interface '(ice-9 session))) (module-use! guile-user-module (resolve-interface '(ice-9 debug))) - ;; so that builtin bindings will be checked first (module-use! guile-user-module (resolve-interface '(ice-9 r5rs))) - (module-use! guile-user-module (resolve-interface '(guile))) (set-current-module guile-user-module) [-- Attachment #3: Type: text/plain, Size: 143 bytes --] _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-05 3:15 ` Kevin Ryde @ 2006-12-05 9:53 ` Ludovic Courtès 2006-12-08 21:23 ` Kevin Ryde 0 siblings, 1 reply; 13+ messages in thread From: Ludovic Courtès @ 2006-12-05 9:53 UTC (permalink / raw) Hi, Kevin Ryde <user42@zip.com.au> writes: > Though the change I propose is: > > --- boot-9.scm.~1.356.2.4.~ 2006-11-29 05:55:55.000000000 +1100 > +++ boot-9.scm 2006-12-05 14:14:31.000000000 +1100 > @@ -3397,9 +3397,7 @@ > '(ice-9 debugger) '(debug))) > (module-use! guile-user-module (resolve-interface '(ice-9 session))) > (module-use! guile-user-module (resolve-interface '(ice-9 debug))) > - ;; so that builtin bindings will be checked first > (module-use! guile-user-module (resolve-interface '(ice-9 r5rs))) > - (module-use! guile-user-module (resolve-interface '(guile))) Yeah, that should be sufficient here. Thanks, Ludovic. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-05 9:53 ` Ludovic Courtès @ 2006-12-08 21:23 ` Kevin Ryde 2006-12-08 21:31 ` Kevin Ryde 0 siblings, 1 reply; 13+ messages in thread From: Kevin Ryde @ 2006-12-08 21:23 UTC (permalink / raw) [-- Attachment #1: Type: text/plain, Size: 294 bytes --] Actually, I find my change is enough for srfi-1 iota, but not for srfi-17 car in 1.8, probably because it's a #:replacement. Does the change below to use process-use-modules in both use-srfis and top-repl seem better? The idea would be to do the same as the guts of an ordinary use-modules. [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: boot-9.scm.use-srfi-2.diff --] [-- Type: text/x-diff, Size: 1740 bytes --] --- boot-9.scm.~1.356.2.5.~ 2006-12-09 08:11:09.000000000 +1100 +++ boot-9.scm 2006-12-09 08:13:50.000000000 +1100 @@ -3313,13 +3313,11 @@ ;; numbers, which are the numbers of the SRFIs to be loaded on startup. ;; (define (use-srfis srfis) - (let lp ((s srfis)) - (if (pair? s) - (let* ((srfi (string->symbol - (string-append "srfi-" (number->string (car s))))) - (mod-i (resolve-interface (list 'srfi srfi)))) - (module-use! (current-module) mod-i) - (lp (cdr s)))))) + (process-use-modules + (map (lambda (num) + (list (list 'srfi (string->symbol + (string-append "srfi-" (number->string num)))))) + srfis))) \f @@ -3387,19 +3385,23 @@ ;; Use some convenient modules (in reverse order) - (if (provided? 'regex) - (module-use! guile-user-module (resolve-interface '(ice-9 regex)))) - (if (provided? 'threads) - (module-use! guile-user-module (resolve-interface '(ice-9 threads)))) + (set-current-module guile-user-module) + (process-use-modules + (append + '(((ice-9 r5rs)) + ((ice-9 session)) + ((ice-9 debug))) + (if (provided? 'regex) + '(((ice-9 regex))) + '()) + (if (provided? 'threads) + '(((ice-9 threads))) + '()))) ;; load debugger on demand (module-use! guile-user-module (make-autoload-interface guile-user-module '(ice-9 debugger) '(debug))) - (module-use! guile-user-module (resolve-interface '(ice-9 session))) - (module-use! guile-user-module (resolve-interface '(ice-9 debug))) - (module-use! guile-user-module (resolve-interface '(ice-9 r5rs))) - (set-current-module guile-user-module) (let ((old-handlers #f) (signals (if (provided? 'posix) [-- Attachment #3: Type: text/plain, Size: 143 bytes --] _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-08 21:23 ` Kevin Ryde @ 2006-12-08 21:31 ` Kevin Ryde 2006-12-14 20:05 ` Neil Jerram 0 siblings, 1 reply; 13+ messages in thread From: Kevin Ryde @ 2006-12-08 21:31 UTC (permalink / raw) Oh, and I added test-suite/standalone/test-use-srfi exercising this stuff. The "guile" in the script is the uninstalled guile during a "make check", you might have to search and replace it to pre-inst-guile if you want to run outside that. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-08 21:31 ` Kevin Ryde @ 2006-12-14 20:05 ` Neil Jerram 2006-12-14 22:53 ` Kevin Ryde 2006-12-15 8:32 ` Ludovic Courtès 0 siblings, 2 replies; 13+ messages in thread From: Neil Jerram @ 2006-12-14 20:05 UTC (permalink / raw) Cc: guile-devel Kevin Ryde <user42@zip.com.au> writes: > Oh, and I added test-suite/standalone/test-use-srfi exercising this > stuff. The "guile" in the script is the uninstalled guile during a > "make check", you might have to search and replace it to > pre-inst-guile if you want to run outside that. Sorry for coming late to this discussion. It seems to me, though, that this is all a matter of ordering, not of whether the duplicates processing gets invoked. I don't know all the details of the duplicate processing, but by default I would expect a later use-modules (or similar operation) to override an earlier one. Is that what happens? Then, if it is the case that $ guile sets up a standard environment, it seems obvious to me that if one does $ guile --srfi=1 the "--srfi=1" should take effect after the standard environment has been set up. And then the real problem, as I understand it, would be that the code in script.c generates code which does the (use-modules (srfi srfi-1)) before the (top-repl). What do you think? Have I completely misunderstood? Regards, Neil _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-14 20:05 ` Neil Jerram @ 2006-12-14 22:53 ` Kevin Ryde 2006-12-30 23:34 ` Neil Jerram 2006-12-15 8:32 ` Ludovic Courtès 1 sibling, 1 reply; 13+ messages in thread From: Kevin Ryde @ 2006-12-14 22:53 UTC (permalink / raw) Cc: guile-devel Neil Jerram <neil@ossau.uklinux.net> writes: > > It seems to me, though, that this is all a matter of ordering, not of > whether the duplicates processing gets invoked. I thought that too, until just fiddling with the order didn't fix srfi-17 (which #:replace's car and friends). > I don't know all the details of the duplicate processing, Me neither :). > And then the real problem, as I understand it, would be that the code > in script.c generates code which does the (use-modules (srfi srfi-1)) > before the (top-repl). Alas of course top-repl doesn't return ... top-repl only adds some friendly extras like ice-9 debug, session, regexp and threads. Hopefully they don't overlap with any srfis, so it shouldn't matter if they're after use-srfis. If that sounds right. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-14 22:53 ` Kevin Ryde @ 2006-12-30 23:34 ` Neil Jerram 0 siblings, 0 replies; 13+ messages in thread From: Neil Jerram @ 2006-12-30 23:34 UTC (permalink / raw) Kevin Ryde <user42@zip.com.au> writes: > Neil Jerram <neil@ossau.uklinux.net> writes: >> >> It seems to me, though, that this is all a matter of ordering, not of >> whether the duplicates processing gets invoked. > > I thought that too, until just fiddling with the order didn't fix > srfi-17 (which #:replace's car and friends). > >> I don't know all the details of the duplicate processing, OK, I understand all this now; thanks for being patient for me. (The effect of #:replace is that the module with the #:replace always win over another module that doesn't, regardless of ordering.) >> And then the real problem, as I understand it, would be that the code >> in script.c generates code which does the (use-modules (srfi srfi-1)) >> before the (top-repl). > > Alas of course top-repl doesn't return ... Indeed. Still, if it would help we could easily make script.c pass in unevaluated code to top-repl, which top-repl would eval after the existing module-uses. However, as you say ... > top-repl only adds some friendly extras like ice-9 debug, session, > regexp and threads. Hopefully they don't overlap with any srfis, so > it shouldn't matter if they're after use-srfis. If that sounds right. Yes, agreed. The (module-use ... 'guile) was a more serious problem here, but now it is gone (which I agree is a good fix). So no new script.c hackery is needed. Regards, Neil _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-14 20:05 ` Neil Jerram 2006-12-14 22:53 ` Kevin Ryde @ 2006-12-15 8:32 ` Ludovic Courtès 2006-12-30 23:37 ` Neil Jerram 1 sibling, 1 reply; 13+ messages in thread From: Ludovic Courtès @ 2006-12-15 8:32 UTC (permalink / raw) Cc: guile-devel Hi, Neil Jerram <neil@ossau.uklinux.net> writes: > It seems to me, though, that this is all a matter of ordering, not of > whether the duplicates processing gets invoked. I don't know all the > details of the duplicate processing, but by default I would expect a > later use-modules (or similar operation) to override an earlier one. > Is that what happens? Roughly, yes. However, the semantics of `module-use!' are very different from those of `use-modules' (unlike what one might think ;-)). While `use-modules' honors the duplicate binding policies, including `replace' as Kevin noted, `module-use!' does no such thing: it blindly overrides bindings. A more important concern is that the order of `module-use!' invocations matters, which leads to all these strange side effects. `module-use!' is a low-level primitive that really should not be used by the "normal user" IMO. Instead, one should rather use `module-use-interfaces!' which has the same semantics as `use-modules'. Getting back to the problem at hand: Since we want to emulate the behavior of `use-modules', the safest way would be to use `module-use-interfaces!', although we can certainly find (fragile?) workarounds. Thanks, Ludovic. _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-15 8:32 ` Ludovic Courtès @ 2006-12-30 23:37 ` Neil Jerram 2007-01-01 22:44 ` Kevin Ryde 0 siblings, 1 reply; 13+ messages in thread From: Neil Jerram @ 2006-12-30 23:37 UTC (permalink / raw) Cc: guile-devel ludovic.courtes@laas.fr (Ludovic Courtès) writes: > Hi, > > Neil Jerram <neil@ossau.uklinux.net> writes: > >> It seems to me, though, that this is all a matter of ordering, not of >> whether the duplicates processing gets invoked. I don't know all the >> details of the duplicate processing, but by default I would expect a >> later use-modules (or similar operation) to override an earlier one. >> Is that what happens? > > Roughly, yes. However, the semantics of `module-use!' are very > different from those of `use-modules' (unlike what one might think ;-)). > While `use-modules' honors the duplicate binding policies, including > `replace' as Kevin noted, `module-use!' does no such thing: it blindly > overrides bindings. A more important concern is that the order of > `module-use!' invocations matters, which leads to all these strange side > effects. > > `module-use!' is a low-level primitive that really should not be used by > the "normal user" IMO. Instead, one should rather use > `module-use-interfaces!' which has the same semantics as `use-modules'. Absolutely, yes. One day we should get to de-polluting the guile-user namespace ... > Getting back to the problem at hand: Since we want to emulate the > behavior of `use-modules', the safest way would be to use > `module-use-interfaces!', although we can certainly find (fragile?) > workarounds. Yes, except that I think Kevin's patch using process-use-modules is even better, because it avoids needing the resolve-interface calls, and also does the call-with-deferred-observers thing, which looks appropriate here. Regards, Neil _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: top-repl priority of guile module 2006-12-30 23:37 ` Neil Jerram @ 2007-01-01 22:44 ` Kevin Ryde 0 siblings, 0 replies; 13+ messages in thread From: Kevin Ryde @ 2007-01-01 22:44 UTC (permalink / raw) Cc: guile-devel Neil Jerram <neil@ossau.uklinux.net> writes: > > Absolutely, yes. One day we should get to de-polluting the guile-user > namespace ... Document or hide. > Yes, except that I think Kevin's patch using process-use-modules is > even better, because it avoids needing the resolve-interface calls, > and also does the call-with-deferred-observers thing, which looks > appropriate here. I would have used `use-modules', but it objects to not being top-level, and as a macro you can't easily construct args for it. (One of the greatest downsides to all macros.) _______________________________________________ Guile-devel mailing list Guile-devel@gnu.org http://lists.gnu.org/mailman/listinfo/guile-devel ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2007-01-01 22:44 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2006-12-01 21:59 top-repl priority of guile module Kevin Ryde 2006-12-04 12:15 ` Ludovic Courtès 2006-12-05 0:26 ` Kevin Ryde 2006-12-05 3:15 ` Kevin Ryde 2006-12-05 9:53 ` Ludovic Courtès 2006-12-08 21:23 ` Kevin Ryde 2006-12-08 21:31 ` Kevin Ryde 2006-12-14 20:05 ` Neil Jerram 2006-12-14 22:53 ` Kevin Ryde 2006-12-30 23:34 ` Neil Jerram 2006-12-15 8:32 ` Ludovic Courtès 2006-12-30 23:37 ` Neil Jerram 2007-01-01 22:44 ` Kevin Ryde
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).