The Return of Domain Specific Languages

February 21, 2009

Domain Specific Languages (DSL) are among the hottest new trends in computer science. A DSL is a programming language designed for a specific problem domain. This topic is getting a lot of attention these days because a DSL can greatly simplify programming by providing semantics that more naturally express automated solutions for the associated domain. A DSL can be thought of as a domain-specific 4GL, much easier to program in than a general purpose programming language, or 3GL, such as Java, C++, etc. But is this really a new idea?

In the late 1950s, when computing was in its infancy, DSLs were actually state of the art. In 1957, my father, the late William Joseph Turanski and his colleage, Anatol W. Holt, were employed at the Univac Applications Research Center of the Remington Rand Univac division of the Sperry Rand Corporation (now Unisys). Their primary focus was the development of a Generalized Programming (GP) system (renamed FLEXIMATIC by the marketing dudes). This was basically the first general high level language compiler. Being a completely new field, computer scientists were still trying to devise basic “naming aids” such as symbolic addressing, mnemonic devices, and convenient notations, that could be efficiently parsed by a computer and correctly mapped to computer instructions. However, compilers for specific types of computing problems were commonplace.

Holt describes the situation in General Purpose Programming Systems, a technical report he authored, dated October 30, 1957, based on a talk given before the ACM in Houston, in June 1957 (I own a hard copy). In reference to GP, he states:

General Purpose Programming Systems by Anatol W. Holt October 30, 1957

General Purpose Programming Systems by Anatol W. Holt October 30, 1957

“The system differs from other compilers,…, in that it aims to provide the programmer with a set of services equally applicable to the solution of any problem – services, in other words, which are claimed to be altogether “general purpose”. Therefore the system contains no special design features which make it better adapted to one area of computation than another.”

One can infer from this, that designing a general purpose language was a very challenging proposition. Similar to developing a general solution in mathematics or science, you first start with specific working examples and try to determine what they have in common to arrive at a generalization. Such was the state of computing in 1950s. There were specific language compilers developed for commercial use in various mathematics and business domains, but the general solution was still being worked out. Holt describes the state of the art:

“In the development of most compiling systems, the designers begin with a special range of problems for which they intend their systems to be useful. They invent special notations which they consider naturally adapted to the area of problems in question, and they construct a translating mechanism with just enough generality to cope with these notations.”

This is a pretty fair description of a modern DSL. But of course this model didn’t scale very well. As Holt observes,

“While…special notation for a given area of problems… may be very useful and important…, the ability to add arbitrary, new notation is even more important than any given set of special notations. … we cannot even hope…to subdivide the entire universe of problems into fixed areas, each with a well-adapted notation. For example, if I have devised on notation satisfactory for business problems and another notation satisfactory for algebra, I am still unable to write convenient coding for problems which…involve a lot of data handling and algebraic computation.”

William Turanski and Anatol Holt at the Univac 1, circa 1957

William Turanski and Anatol Holt at the Univac 1, circa 1957

In the conclusion, Holt writes:

“In summary, …I claim that it is possible to construct a general purpose compiler…The theoretical foundations for such compiling systems are now being developed at Remington Rand. Early examples, such as GP for UNIVAC 1, demonstrate the practical utility of a system designed from this point of view.”

The rest is history. Sadly my father died as a result of an automobile accident while en route to the Algol 60 conference in Paris. Algol was of course a forerunner to modern languages such as C and Java. I’m sure, if alive today, he would have appreciated that the wheel has once again come full circle.