[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Dynamic binding
I've been wondering, too, what is the difference between dynamic scoping
(in the old Lispy sense) and dynamic binding in the sense that it is used
in distributed process calculi. Here's my current take.
In Nomadic Pict we used a mechanism somewhere between pi-calculus
channels and ambient-calculus ambient names. Briefly, a channel name is
created as usual by a nu-binder, and is globally unique. However, every
site has its own local read-queue for this channel, so a message sent to
c@s1 can only be read by someone listening at s1, while messages to c@s2
can only be received at s2. This is the fundamental mechanism that
migrating agents use to connect to site-specific resources (such as proxy
daemons for higher-level 'location transparent' channels -- the main
point of the Nomadic Pict experiment is to show how such high-level
communication facilities can be built out of lower-level primitives).
This intuition ("name globally, bind locally") seems common to many of
the systems that other people have mentioned here (ambients, MobileML,
etc., as well as "classical" systems like Facile).
What's the difference between this and dynamic scoping? With these
mechanisms, the binding you get when you use a name depends on where you
*are* right now. With dynamic scoping a la Lisp, it depends not on where
you are but on where you *came from* (i.e., what procedures are on your
call stack).
B
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The "models for mobility" mailing list mailto:moca@xxxxxxxxxxxxxxx
http://www-sop.inria.fr/mimosa/personnel/Davide.Sangiorgi/moca.html