Difference between revisions of "Agents in SCOOP"

m (Agent classes: Changed separateness status of TUPLE to be non-separate.)
(Improved phrasing)
Line 8: Line 8:
 
'''Agent argument types validity rule.''' Formal arguments of a feature used in an agent expression with a separate target are separate.
 
'''Agent argument types validity rule.''' Formal arguments of a feature used in an agent expression with a separate target are separate.
 
: Because an agent is created on a processor of a target, without processor tags it's impossible to create an agent on an open target of separate type and then pass the corresponding target object at the agent call. Also there is no way to make an open target controlled.
 
: Because an agent is created on a processor of a target, without processor tags it's impossible to create an agent on an open target of separate type and then pass the corresponding target object at the agent call. Also there is no way to make an open target controlled.
'''Agent open target type validity rule.''' An open target of an agent is not separate.
+
'''Agent open target type validity rule.''' If the target of an agent is open, it may not be separate.
  
 
'''Example.''' <e>
 
'''Example.''' <e>

Revision as of 23:52, 6 May 2013

The page reflects current decisions taken for the current SCOOP implementation, in particular without support for processor tags. So it may change in the future.

Status of a target

Because a agent object is created on a processor associated with a target, this processor needs to be controlled.

Agent target validity rule. A target of an agent is controlled.

Types

Agent argument types validity rule. Formal arguments of a feature used in an agent expression with a separate target are separate.

Because an agent is created on a processor of a target, without processor tags it's impossible to create an agent on an open target of separate type and then pass the corresponding target object at the agent call. Also there is no way to make an open target controlled.

Agent open target type validity rule. If the target of an agent is open, it may not be separate.

Example.
f (p: separate P; q: separate Q): R
t: separate T
...
r := agent t.f (c, ?)
x := r.item ([a])
The type t of agent t.f (c, ?) is
separate FUNCTION [ANY, TUPLE [separate Q], separate R]
The first parameter is not separate because both a target and an agent object run on the same processor.
The separateness status of the type TUPLE used for arguments does not matter, what matters is the types of arguments. In many cases when TUPLE is used, it is used as a value type, i.e. it could even be an expanded type, so that a separate mark is not required. But then we need some conversion rules to attach different types of TUPLE. In order to avoid unnecessary processor dependency, it's going to be created on the target processor (as a routine object itself), therefore it is not separate.

Agent classes

The first parameter in the class ROUTINE and descendants is not used, so in the future it will be dropped altogether.

Example. The agent type from the example above becomes
separate FUNCTION [TUPLE [separate Q], separate R]

Correctness and wait conditions

The feature {ROUTINE}.precondition should be split into 2 parts: correctness_condition and wait_condition. Then the routine call looks like
call (a: OPEN_ARGS)
          require
              correctness_condition (a)
          do
              from
              until
                  not wait_condition (a)
              loop
                  execute_body (a)
              end
          end

The same change applies to the feature item.