5 min. reading time

Some of you might have heard that at itemis we are working on a new web-based language workbench called Convecton.

If you’re not familiar: Convecton enables domain experts to model their Fachlichkeit, i.e. the knowledge, expertise, rules, and constraints that underlie a business, directly in the browser. Domain experts can collaboratively create models, understand them through analysis, simulation and tests and then finally transform them into artifacts that can be executed in backend systems via code generation or interpretation.

Convecton emphasizes usability for non-programmers. For the languages themselves this means that they are tailored to the particular domain in terms of their core abstractions, but also in terms of the notation. Convecton supports a wide range of notations including text, tables, mathematical symbols, and diagrams. This is very much in the tradition of what we have been doing over the last few years, as you can see from these success stories built with MPS:

Usability, however, also means that the tool itself cannot be too complex. Today’s language workbenches such as MPS or Xtext have been developed in the tradition of IDEs. They are really too complex for non-programmers in terms of the UI and feature set, but also in how they approach collaboration: file-based storage and git-based version control is not the way forward.

Language Engineering and Language Workbenches

Language engineering refers to developing software languages, i.e., languages with which one instructs computers to perform tasks, plus associated analysis, processing and productivity tools. Software languages can roughly be separated into general purpose languages (also known as programming languages, such as Java, C, or Scala) and domain-specific languages (DSLs), which are optimized towards particular domains.

For DSLs, it is critically important that the effort for implementing the languages and their tools is as low as possible, because, by definition, DSLs are used by smaller groups of people and a huge development effort is hard to justify. Thus, over the last 20 years, a category of tools dedicated for language engineering has evolved: language workbenches [https://en.wikipedia.org/wiki/Language_workbench]. The term was first introduced by Martin Fowler in 2004, but tools that fit this description have already appeared in the 1980s.

The Meta Programming System (MPS) by Jetbrains is such a tool. It has proven especially suitable for DSL implementation because of its wide range of supported notations, its focus on integrating multiple languages and its maturity. These features of MPS are enabled by its reliance on projectional editing, which unifies the editor architecture for notations as diverse as text and diagrams. In particular, no parsers are necessary for textual notations. This hugely simplifies the task of developing modular, multi-notation languages.

Conceptually, Convecton can be seen as a descendant of MPS. Like MPS, it relies on projectional editing. But it also approaches a couple of things quite differently to make it more suitable for non-technical business users:

  • The Convecton client, the part used for modeling by domain experts, is a modern web application and not an IDE optimized for developers.
  • Collaboration among multiple end users is achieved via a central repository and real-time synchronization (like Google Docs) instead of files, git, and diff/merge.
  • Realizing that the value of models to domain experts is often more in their ability to run/test/simulate them, Convecton puts a much bigger emphasis on execution of models (think: live programming) in the sense that interpreters and upstream dependency tracking are built-in.
  • And finally, the deployment effort is reduced, because everything runs in the browser and on servers, in contrast to rich clients apps (like MPS).

Like any language workbench, Convecton also ships with facilities that allow software engineers to efficiently build the necessary languages. Convecton’s workbench is based on MPS and offers a set of DSLs for defining structure, notations, scopes, validation rules, type checks, and interpreters.


Read more about Convecton