On Nov 21, 2012, at 1:13 PM, Matt Gushee <mattgus...@gmail.com> wrote:

> Hi--
> 
> I am developing a project that is going to use plugins. It's at a very early 
> stage, and I am not at all sure how the details of the system will work, but 
> my thinking at this point is that the plugins:
> 
>  - may be either compiled or interpreted, but will usually be 
>    compiled as shared libraries; and
>  - will be stored in one or more arbitrary locations separate from 
>    the system's egg repository.
>  - should ideally be implemented as modules.
> 
> So I think what I want to do is to load shared libraries containing modules 
> into compiled code. Toward that end, I have been experimenting with some toy 
> code to try to understand the various ways that different compilation units 
> interact. I have four library units, 'a', 'b', 'c', and 'd', and two 
> top-level units, 'ab' (which uses 'a' and 'b'), and 'cd' (which uses 'c' and 
> 'd'). The important difference between the libraries is that 'c' and 'd' 
> declare modules, while 'a' and 'b' do not.  Here's the code:
> 
>   ; a.scm
>   (define (ay) (print "Ay, what's 'appening?"))
>   
>   ; b.scm
>   (define (bee) (print "2B or not 2B?"))
>   
>   ; c.scm
>   (module c
>           *
>           (import scheme)
>           (import chicken)
>   
>   (define (see) (print "See Spot run."))
>   
>   )
>   
>   ; d.scm
>   (module d
>           *
>           (import scheme)
>           (import chicken)
>   
>   (define (dee) (print "Defenestrate depraved demons."))
>   
>   )
>   
>   ; ab.scm 
>   (load-relative "a.so")
>   (load-relative "b.so")
>   
>   (ay)
>   (bee)
>   
>   : cd.scm
>   (load-relative "c.so")
>   (load-relative "d.so")
>   
>   (import c)
>   (import d)
>   
>   (see)
>   (dee)
> 
> And here's what happens when I try to work with them:
> 
>   $ csc -dynamic a.scm
>   $ csc -dynamic b.scm
>   $ csc -dynamic c.scm
>   $ csc -dynamic d.scm
>   $ csi
>   
>   CHICKEN
>   (c)2008-2012 The Chicken Team
>   (c)2000-2007 Felix L. Winkelmann
>   Version 4.8.0 (rev 0db1908)
>   linux-unix-gnu-x86 [ manyargs dload ptables ]
>   compiled 2012-09-24 on debian (Linux)
>   
>   ... [ loading ~/.csirc and various eggs ] ...
>   
>   csi> (load "ab.scm")
>   ; loading ab.scm ...
>   ; loading a.so ...
>   ; loading b.so ...
>   Ay, what's 'appening?
>   2B or not 2B?
>   csi> (load "cd.scm")
>   ; loading cd.scm ...
>   ; loading c.so ...
>   ; loading d.so ...
>   See Spot run.
>   Defenestrate depraved demons.
>   csi> 
>   $ csc ab.scm
>   $ ./ab
>   Ay, what's 'appening?
>   2B or not 2B?
>   $ csc cd.scm
>   
>   Syntax error (import): cannot import from undefined module
>   
>       c

You need an "import" file for module c. They are not generated automatically.

        csc c.scm -dynamic -emit-import-library c       ; csc c.scm -s -j c
        csc c.import.scm -dynamic

> 
> By the way, in addition to 'load-relative', I've also tried loading the libs 
> by means of 'require' (with and without the so-name), 'load', and 
> 'require-library'. In no case have I managed to compile a unit that loads a 
> library containing a module.
> 
> So, I hope it is reasonably clear what I am trying to do here. Is this
> something that is supposed to work? Is there perhaps a compiler directive 
> that would solve this problem?
> 
> --
> Matt Gushee
> 
> _______________________________________________
> Chicken-users mailing list
> Chicken-users@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/chicken-users


_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to