guile-user
[Top][All Lists]
Advanced

[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 12:18:03 -0500
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.0.1) Gecko/20020830

It's an interesting question all right.  What's the purpose of the
"migration"?
   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.

Lynn

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?







reply via email to

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