Synchronous vs. Reactive Languages

A synchronous language is one based on the synchrony hypothesis: communication occurs in zero time. A reactive language is one which reacts to the environment at the speed of the environment. This page discusses several issues about the relationships between these two types of languages. The answers to the four questions posed are given by Prof. Stephen A. Edwards from the Dept. of Computer Science at Columbia University.
Question #1: Can a language be synchronous and not be reactive?

Prof. Stephen Edwards: So I'm not sure about an appropriate definition for "reactive." Perhaps it's something like "only does something in response to external events." Depending on how you define external events, languages such as Esterel may or may not be reactive. Esterel can only do something when the "clock" fires, but there doesn't have to be any events at that time for it to do something. So is Esterel reactive or not? I think it's a moot point, but I think you can argue either way on the answer to your first question.

For example, in Esterel you can write

  emit A ; pause ; emit B ; pause ; emit C ; pause
and have A B C A B C ... be emitted in response to no external events except the master clock.
Question #2: Would Argos, Lustre, and/or Signal fall into this category of a synchronous language that is not reactive?

Prof. Stephen Edwards: The synchronous language community, incidentally, has all but dropped "reactive" from any of its titles.

Synchronous, however, is much easier to define: no event arrives before the previous ones have been dealt with.

Question #3: Are there FSM models that are synchronous but not reactive?

Prof. Stephen Edwards: A common thing in verification is to build a "Kripke structure," which is a nondeterministic FSM with no inputs. The nondeterminism models the effect of inputs, however, but they're interested in its behavior under all inputs. So I think the answer to the third question is yes.

Question #4: How would you justify the synchrony hypothesis if the model were not reactive?

Prof. Stephen Edwards: The fourth question is thought-provoking: how do you justify the synchrony hypothesis in general? You can insist that the circuit is stable before the next event comes in, but that's too restrictive: what about pipelined behavior?

I think the answer is that under some timing assumption there exists some mapping function from the state of the actual system to the model that shows the system's behavior matches the model's. A similar, very thorny problem arises when you're trying to verify pipelined microprocessors.

The reason I think this is so complicated is that I can envision synchronous models implemented with self-timed circuits. The trick becomes what does "the previous ones have been dealt with" in such a context because the "mouth" of such a circuit could be ready to accept the next even if the "stomach" is still digesting the last one.

Updated 02/14/02.