One big issue to note is that, because of Refs, Clojure agent
semantics can't simply be remoted the way Erlang processes can be.
This is because a message send could include a references to a Ref,
thus exposing mutable state remotely.  This breaks, well, just about
everything.

If you restrict the acceptable arguments to message sends to include
only fully functional values (no passing Refs), then your agent-proxy
idea could probably be made to work.  I'm guessing the tricky code
won't be the remote equivalent of "send", but rather the remote
equivalent of "wait", as that requires keeping track of where the
remote sends come from, in a stable and machine-independent way.  The
current Clojure implementation seems to do that internally via uuids,
but accessing those remotely could be tricky.

For extra bonus points, allow for multiple pluggable protocol stacks
and automatic protocol negotiation (which Erlang has, IIRC).

Unlike some of the other comments in this thread, I'll say I believe
that remote agents in Clojure could be a very powerful idea,
particularly due to integration with the STM.   Orchestrating in-
memory and eternal communications takes an enormous amount of effort
in many systems.  Having a software transaction which automatically
queues up remote agent sends so that they only occur once the
transaction completes sucessfully would be a very powerful language-
level primitive.

Code it up and give it a try!

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to