at:tutorial:actors
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
at:tutorial:actors [2007/04/07 20:10] – tvcutsem | at:tutorial:actors [2007/04/24 21:02] – added tvcutsem | ||
---|---|---|---|
Line 33: | Line 33: | ||
So what exactly is a far reference to an object? The terminology stems from the E language: it is an object reference that refers to an object hosted by another actor. The main difference between regular object references and far references is that regular references allow direct, synchronous access to an object, while far references disallow such access. This is enforced by the kind of messages that these references can carry, as will be explained below. | So what exactly is a far reference to an object? The terminology stems from the E language: it is an object reference that refers to an object hosted by another actor. The main difference between regular object references and far references is that regular references allow direct, synchronous access to an object, while far references disallow such access. This is enforced by the kind of messages that these references can carry, as will be explained below. | ||
+ | |||
+ | Note that, if the object referred to by a far reference is striped with one or more stripes, the far reference itself is striped with the same stripes. Hence, an object located on a remote actor can be tested for its stripes // | ||
==== Asynchronous Message Sending ==== | ==== Asynchronous Message Sending ==== | ||
Line 332: | Line 334: | ||
==== Nesting Actors ==== | ==== Nesting Actors ==== | ||
- | lexical scoping rules for nested actors | + | In AmbientTalk, |
+ | |||
+ | < | ||
+ | def outer := actor: { | ||
+ | def x := 1; | ||
+ | def get() { x }; | ||
+ | def set(v) { x := v }; | ||
+ | |||
+ | def inner := actor: { | ||
+ | def get() { x }; | ||
+ | def set(v) { x := v }; | ||
+ | }; | ||
+ | }; | ||
+ | </ | ||
+ | |||
+ | If both the '' | ||
+ | |||
+ | Recall that isolates could be given selective access to their enclosing lexical scope by specifying accessed variables as formal parameters to their initializing closure, which gave rise to copying the variable into the isolate. We allow actors to do the same. Hence, the above example can be written properly as: | ||
+ | |||
+ | < | ||
+ | def outer := actor: { | ||
+ | def x := 1; | ||
+ | def get() { x }; | ||
+ | def set(v) { x := v }; | ||
+ | |||
+ | def inner := actor: { |x| | ||
+ | def get() { x }; | ||
+ | def set(v) { x := v }; | ||
+ | }; | ||
+ | }; | ||
+ | </ | ||
+ | |||
+ | It still makes sense to nest actors, but each actor will have its own local copy of lexically shared variables. Furthermore, |
at/tutorial/actors.txt · Last modified: 2020/02/05 21:26 by elisag