[Top][All Lists]

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

Re: to serialize/deserialize closures; and multithreading

From: Lynn Winebarger
Subject: Re: to serialize/deserialize closures; and multithreading
Date: Thu, 25 Mar 2004 13:11:32 -0500
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830

On the other hand, you could just rely on guile's printer/reader
syntax and use that on the environment to export it and the
global variables.  I don't know if it prints everything in a
uniquely readable way, but it should handle standard scheme
that way.
   And environments in guile (last time I looked at the
evaluator) really are just binding lists. With deBruijn indices.
I can't remember exactly.  Use the source.


Lynn Winebarger wrote:
It's an interesting question all right.  What's the purpose of the
Technically speaking, a closure is just a pair of pointers to its code and its environment. You could create a new "foreign reference" type (tag) that would cause these to be looked up on the original computer whenever you needed them. That would handle synchronization. Of course, you could also make copies of everything. I think tags are constant over all architechtures (last I looked)
but there are run-time allocated types that you'd have to do some work for
(I think - I don't remember what they're called).
Anyway, besides taking care of the tags/synchronizing run-time allocated types/ handling endianness issues, you'd need to munge pointers according to whereever they would be newly allocated on the new machine. It would probably be easiest to just number copies of the cells from 0 to whatever for the transport over and the
allocator on the other end could relabel them to the actual values.
Also, you'd need to check that any symbols referenced by the code or variables were actually in existence in the new guile instance's symbol table. And that global variables referenced by the code got copied (as well as the lexical variables).
So will be recursively nasty.

Good Luck.


Greg Troxel wrote:

1. If I have a scheme value that is a closure, is there any way that I can
  serialize this closure (from C code) into a form that it can be
deserialized back into a SCM closure variable (again, by C code)? I can assume for this question that both ends of the serial line are running the
  same version of gnu guile and my software, but cannot assume that both
  ends are running on the same computer architecture.  Would it instead
  only be possible for me to transfer closures as their scheme source.

I'm not even sure it is well-defined what it means to migrate a
closure.  Should a mutation on the new computer of a captured variable
affect the old computer?

Guile-user mailing list

reply via email to

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