Does Modeling (Reactive) Systems Require Special Languages?

Lars Frantzen writes:

In several commercial and academic projects we have struggled with the problem of the lack of a proper language to model reactive systems. Such models should be used to specify and test (in a model-based fashion) reactive systems. Currently, either no real language at all was used (like XML), or some old fashioned, hard to use or weakly supported language like LOTOS or Promela was used.

Then Lars continues on to propose a new language for specifying / modeling reactive systems.

Now I have to comment this.

The Wikipedia list of programming languages has roughly 700 mainstream programming languages listed (I do not have the exact count, and the list does not contain BASIC variants). At the same time, there are only a handful of languages with significant communities these days (see here for a recent TIOBE index). Most of the "mainstream" languages from the Wikipedia list actually belong to a long tail that is interesting mostly from technical and historical perspectives.

A programming or specification language does not succeed based on its technical merits (only), but also (and mostly) based on the community that supports it. In today's world, this means a community with a capital C. If you look at the TIOBE index, Objective-C has suddenly surged in popularity, not because of its technical merits (the language has not changed), but because of the iP(hone|ad) effect. I do not believe that LOTOS or Promela (that Lars refers to) are essentially bad languages. They are "hard to use" and "weakly supported" because they do not have a large user community. Also, how can they be old-fashioned compared to e.g. LISP that still makes rank #13 in the TIOBE index? LISP is the second oldest programming language in use these days.

We at Conformiq believe in industry standards and languages that are taught at universities and that are readily grasped by people with standard university education in computer science. We have used essentially Java since 2006 for specifying reactive systems, with great success. And it is not a surprise that Java works as a specification language for reactive systems, as it works very well for implementing them, and [system] models are just abstract, miniature system implementations.

I do not know why a new language is needed, and I do not believe it is either. The simple positive argument is that Java can be used to implement reactive systems, so it can be used also to specify them on any level of desired detailed. The simple negative argument is that most new programming languages die for lack of community support unless there is a compelling use case, a compelling code and library base, and a compelling tool chain available.

Much of what is known as modeling these days for system specification and testing purposes, was known as formal methods in the 90's. Already then, David Parnas from McMaster University wrote (IEEE Computer, 1996):

We have all of the "fundamental models of programming" we will ever need. Good sound, relational and functional models of programming have been known for decades. Much of the work on "formal methods" is misguided and useless because it continues to search for new foundations although the ground is littered with sound foundations on which nobody has erected a useful edifice. [Emphasis added]

The system specification problem is not solved by creating new languages. It new languages would be the problem, the professors and PhDs who created Lotos, Promela, Z, Petri Nets, B, and all other great formalisms and notations would have solved the problem. If there is a problem then it must be in tool support, community, and in general putting the theories into work.

 

Continue exploring
Products Case studies Demo