Patterns Working Group

(Rough) Notes from Ada Europe '96 Meeting

A first meeting of the (proposed) Patterns Working Group was held in conjunction with the Ada Europe conference on 10 June 1996. The original emphasis of the meeting was to be concurrent patterns and their Ada 95 implementation.

Present at the first meeting were: Mark Gerhardt, Ed Colbert, Brad Balfour, Patrick de Bondeli, Bo Sanden, Drasko Sotirovski, and Rich Hilliard (in spirit). Ed Colbert has volunteered to take the lead in organizing the group and chartering it as an official SIGAda Working Group.

A second meeting will be held at Tri-Ada '96 on Wednesday 4 December 1996 from 7:00-9:00PM in room 412. Additionally, members of this forming WG will address the Reuse Working Group about coordination issues and whether or not to become a subgroup of the ReuseWG.

About these notes:

These notes are a rough recollection of some of the more important points that were made. I didn't take very extensive notes, so these are mostly based on just topic headers, sentences or phrases, and partial diagrams. Others will, hopefully, add their notes to these.

- Brad

Main goals & discussion areas:

  1. Template for concurrent patterns and examples of those patterns (with Ada 95 implementations)
  2. An enumeration of possible pattern titles.

It is worth noting that the discussion strayed far & wide from these two topics.

Temporal behavior

Lots of discussion focused on how patterns ought to communicate the temporal behavior the involve and/or how components ought to note this. The discussion also ranged into notation and naming. Two fundamental distinctions were noted:

  1. Blocking vs. non-blocking behavior
  2. Atomic behavior vs. Guarded behavior - the former requires no client work to ensure concurrent protection, the latter requires work on the part of the client (e.g., seize/release)

Concurrent/Parallel communication

During a discussion of concurrency, it was proposed that how concurrent components communicate is a fundamental architectural principle. This became the basis of a potential set of patterns. The group proposed several kinds of communication & attempted to name and define them:

An attempt was made to create a scale or graph:


The old Booch Actor/Agent/Server taxonomy was revisited. During this discussion, it was clarified among the group that an "actor" must have an active thread of control and must initiate communication. A "sever" was a reactor and does not initiate communication; it might have a thread of control, but did not have to. An "agent" was both an actor and server. It reacted to communication and also initiated communication. It might have a thread of control but need not.

From this discussion, it was proposed to rework the old Actor/Agent/Server taxonomy in light of the '90s. This would now become the Dilbert Taxonomy. Focusing on communication among objects, the taxonomy contains: CEO/Middle Manager/ Programmer.

Multi-Dimensional Terminology

Continuing the focus on terminology an attempt was made to diagram/illustrate the following three dimensions:

  1. Exported Services or Interfaces (some or none)
  2. Threads (yes or no) or (zero, one, >one)
  3. Arbitration (none, guarded/mutex, protected/atomic)

For some of the combinations of values, a short Ada 95 code pattern was given to illustrate the dimensions. The result was the following diagram:

A fourth dimension, Blocking vs. Non-Blocking was discussed but not added to the diagram.