guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Module unloading


From: Neil Jerram
Subject: Re: Module unloading
Date: Mon, 23 May 2005 22:23:47 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.7) Gecko/20050420 Debian/1.7.7-2

Zeeshan Ali wrote:

There's no way of completely removing (=> undefining) the definitions
that a module added.

      Hmm... But the GC would take care of that, wouldn't it? If it
doesn'nt then the plugins must do that themselves in their
'xchat-plugin-deinit' procedure, which they must define and export.

It should do if you really can remove all the references to the module, but I'm not sure how easy that is; I think modules live (through membership of a global list?) even if no one is using them.

I think it might be possible (in an undocumented
and unsupported way) to "unuse" a module, though, i.e. to remove a
plugin module from the module-uses list of your main module.  Is that
any use to you?

    I think that is exactly what i need. Maybe there is no way defined
to do this as the GC also takes care of 'unused' modules as they are
also normal guile objects? Thanks for your help.

Well here's what I had in mind:

(use-modules (ossau example-fns))   ; this module exports `fact1'

(define (unuse-named-module name)
  (let ((intf (resolve-interface name)))
    (set-module-uses! (current-module)
                      (delq intf (module-uses (current-module))))))

fact1 => #<procedure fact1 (n)>

(unuse-named-module '(ossau example-fns))

fact1 => ERROR: Unbound variable: fact1

It seems to survive 5 minutes of testing by me, but there could well be problems lurking, so please test carefully in your context.

        Neil




reply via email to

[Prev in Thread] Current Thread [Next in Thread]