This site contains older material on Eiffel. For the main Eiffel page, see


  • Concurrency and distribution are playing an increasing role in most application areas of computer.

  • It is possible to use the fundamental schemes of object technology --- classes, encapsulation, multiple inheritance, deferred classes, assertions and so on --- for the greatest benefit of developers of concurrent and distributed applications.

  • No active-passive object distinction is necessary or desirable. Objects are by nature able to perform many operations; making them active would restrict them to just one.

  • A simple extension of the sequential object-oriented notation, using a single keywords (separate), makes it possible to cover the major application areas of concurrency, distribution and real time.

  • Each object is handled by a processor. Processors are an abstract notion describing threads of controls; a system can use as many processors as it wants regardless of the number of available computing devices (CPUs). The mapping from processors to CPUs should be done outside of the software proper.

  • An object handled by a different processor is said to be separate.

  • Calls on separate targets have a different semantics, asynchronous rather than synchronous. For that reason, any entity representing separate objects must be declared as such, using the keyword separate.

  • Consistency rules, implying in particular that a separate entity may not be assigned to a non-separate one, ensure that there are no "traitors" --- that no non-separate entity becomes attached to a separate object.

  • To achieve exclusive access to a separate object, it suffices to use the corresponding reference as argument to a separate call (a call with separate target).

  • The target of a separate call must itself be a separate formal argument of the enclosing routine.

  • Preconditions on separate targets cannot keep their usual semantics as correctness conditions (this is the "concurrent precondition paradox"). They serve as wait conditions.

  • The mechanism developed in this chapter covers multitasking, time-sharing, multi-threading, client-server computing, distributed processing on networks such as the Internet, coroutines and real-time applications.

Table of Contents Next section