unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* Creating Modules within C
@ 2006-11-16 22:48 Volkan YAZICI
  2006-11-17 11:34 ` Ludovic Courtès
  0 siblings, 1 reply; 5+ messages in thread
From: Volkan YAZICI @ 2006-11-16 22:48 UTC (permalink / raw)


Hi,

Within scm_eval(), I need to use a very simple module:

  (define-module ultra-complex-thingy #:pure)

(Yeah, that's the complete source code of my module.) The problem is,
how can I create and use that module within my C code, in scm_eval()?
Any assistance will be really appreciated.


Regards.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: Creating Modules within C
  2006-11-16 22:48 Creating Modules within C Volkan YAZICI
@ 2006-11-17 11:34 ` Ludovic Courtès
  2006-11-20 18:44   ` Volkan YAZICI
  0 siblings, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2006-11-17 11:34 UTC (permalink / raw)
  Cc: guile-user

Hi,

Volkan YAZICI <yazicivo@ttnet.net.tr> writes:

> Within scm_eval(), I need to use a very simple module:
>
>   (define-module ultra-complex-thingy #:pure)
>
> (Yeah, that's the complete source code of my module.) The problem is,
> how can I create and use that module within my C code, in scm_eval()?
> Any assistance will be really appreciated.

You could write a piece of Scheme to create the relevant module.
Namely, you could start with something like this:

  (let ((m (make-module)))
    (module-use-interfaces! m
                            (module-public-interface the-root-module)))

And then bind that to some variable accessible from C (or pass it to a
Scheme procedure written in C that will just store it in a C variable
that you can later access).

Most of the module system is written in Scheme, which is why using it
from C is not always convenient.  Also, large parts are undocumented but
one should try as much as possible to avoid using them in order to be
"future-proof".

Thanks,
Ludovic.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: Creating Modules within C
  2006-11-17 11:34 ` Ludovic Courtès
@ 2006-11-20 18:44   ` Volkan YAZICI
  2006-11-22 17:43     ` Ludovic Courtès
  0 siblings, 1 reply; 5+ messages in thread
From: Volkan YAZICI @ 2006-11-20 18:44 UTC (permalink / raw)
  Cc: guile-user

Hi,

On Nov 17 12:34, Ludovic Courtès wrote:
> Volkan YAZICI <yazicivo@ttnet.net.tr> writes:
> > Within scm_eval(), I need to use a very simple module:
> >
> >   (define-module ultra-complex-thingy #:pure)
> >
> > (Yeah, that's the complete source code of my module.) The problem is,
> > how can I create and use that module within my C code, in scm_eval()?
> > Any assistance will be really appreciated.
> 
> You could write a piece of Scheme to create the relevant module.
> Namely, you could start with something like this:
> 
>   (let ((m (make-module)))
>     (module-use-interfaces! m
>                             (module-public-interface the-root-module)))
> 
> And then bind that to some variable accessible from C (or pass it to a
> Scheme procedure written in C that will just store it in a C variable
> that you can later access).

First, thanks so much for your answer. But I couldn't find any
documentation about the above make-module, module-use-interfaces! and
module-use-interfaces functions used. I looked at the source code but,
because of I'm totally green about module related stuff, couldn't figure
out anything significant.

I don't want to be lazy but... Can you please explain a bit more about
the above usage of modules? For instance, you said, I can bind that
[thing] to some variable in C. But then how will I use it?

[I'm not sure if this will be a useful information, but anyway:] I just
want to execute my individual procedures in a #:pure'ified environment
in PL/scheme. That's all. I hope I'm on the right direction.


Regards.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: Creating Modules within C
  2006-11-20 18:44   ` Volkan YAZICI
@ 2006-11-22 17:43     ` Ludovic Courtès
  2006-11-22 21:08       ` Volkan YAZICI
  0 siblings, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2006-11-22 17:43 UTC (permalink / raw)
  Cc: guile-user

Hi,

Volkan YAZICI <yazicivo@ttnet.net.tr> writes:

> Hi,
>
> On Nov 17 12:34, Ludovic Courtès wrote:
>> You could write a piece of Scheme to create the relevant module.
>> Namely, you could start with something like this:
>> 
>>   (let ((m (make-module)))
>>     (module-use-interfaces! m
>>                             (module-public-interface the-root-module)))
>> 
>> And then bind that to some variable accessible from C (or pass it to a
>> Scheme procedure written in C that will just store it in a C variable
>> that you can later access).
>
> First, thanks so much for your answer. But I couldn't find any
> documentation about the above make-module, module-use-interfaces! and
> module-use-interfaces functions used. I looked at the source code but,
> because of I'm totally green about module related stuff, couldn't figure
> out anything significant.

A "module" object is (roughly) little more than a hash table (where
symbols of global variables are looked up) and a list of modules
depended on.

`make-module' is the constructor of module objects: it creates, a new,
empty module, with no dependencies and where no bindings are defined
(not even `lambda', `let', etc.)  In turn, `module-use-interfaces!'
modifies a module (the first argument) in order to have it depend on a
number of modules (the second and following arguments).

The term "interface" refers to what a module exposes for use by other
modules, i.e., what it exports (more precisely, this is the "public"
interface).

And finally, `the-root-module' is, well, the "root" module of Guile,
i.e., the one that contains all the bindings that are visible "by
default".

> I don't want to be lazy but... Can you please explain a bit more about
> the above usage of modules? For instance, you said, I can bind that
> [thing] to some variable in C. But then how will I use it?

Say you have C variable "my_module" bound to a module created as
explained above.  Then, you can evaluate expression in the context of
that module as follows:

  SCM result, expr;

  expr = scm_list_3 (scm_from_locale_symbol ("+"),
                     scm_from_int (2), scm_from_int (2));
  result = scm_eval (expr, my_module);

This is maybe a bit terse but I hope it helps.

Thanks,
Ludovic.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

* Re: Creating Modules within C
  2006-11-22 17:43     ` Ludovic Courtès
@ 2006-11-22 21:08       ` Volkan YAZICI
  0 siblings, 0 replies; 5+ messages in thread
From: Volkan YAZICI @ 2006-11-22 21:08 UTC (permalink / raw)
  Cc: guile-user

Hi,

On Nov 22 06:43, Ludovic Courtès wrote:
> A "module" object is (roughly) little more than a hash table (where
> symbols of global variables are looked up) and a list of modules
> depended on.
> 
> `make-module' is the constructor of module objects: it creates, a new,
> empty module, with no dependencies and where no bindings are defined
> (not even `lambda', `let', etc.)  In turn, `module-use-interfaces!'
> modifies a module (the first argument) in order to have it depend on a
> number of modules (the second and following arguments).
> 
> The term "interface" refers to what a module exposes for use by other
> modules, i.e., what it exports (more precisely, this is the "public"
> interface).

Yeah, I figured those out from ice-9/boot-9.scm and modules.c too.

> And finally, `the-root-module' is, well, the "root" module of Guile,
> i.e., the one that contains all the bindings that are visible "by
> default".
> 
> > I don't want to be lazy but... Can you please explain a bit more about
> > the above usage of modules? For instance, you said, I can bind that
> > [thing] to some variable in C. But then how will I use it?
> 
> Say you have C variable "my_module" bound to a module created as
> explained above.  Then, you can evaluate expression in the context of
> that module as follows:
> 
>   SCM result, expr;
> 
>   expr = scm_list_3 (scm_from_locale_symbol ("+"),
>                      scm_from_int (2), scm_from_int (2));
>   result = scm_eval (expr, my_module);
> 
> This is maybe a bit terse but I hope it helps.

Thanks so much for your kindly help. They all really helped. (As a
proof, see CVS commits of the PL/scheme project. ;-)


Regards.


_______________________________________________
Guile-user mailing list
Guile-user@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-user


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

end of thread, other threads:[~2006-11-22 21:08 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-16 22:48 Creating Modules within C Volkan YAZICI
2006-11-17 11:34 ` Ludovic Courtès
2006-11-20 18:44   ` Volkan YAZICI
2006-11-22 17:43     ` Ludovic Courtès
2006-11-22 21:08       ` Volkan YAZICI

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