What Makes a Good Domain-speciic Language? Apostle, and Its Approach to Parallel Discrete Event Simulation

General-purpose programming languages are a Good Thing, but domain-speciic languages can be better. Such languages provide a natural vocabulary for concepts that are fundamental to the problem domain, whilst with general-purpose languages one is reduced to idiom: idiom, moreover, that is of its very nature alien to the host language | not to mention uncheckable. In addition, domain knowledge often inspires a range of optimizations that would not otherwise suggest themselves, let alone be practical. Domain-speciic languages necessarily diier from general-purpose languages in their purpose, and therefore design, but we claim that the underlying principles can and should be the same. There need be no contradiction here: one is merely enriching the conceptual basis upon which the language is grown. The principled introduction of new concepts may have profound | and sometimes unanticipated! | consequences, however, so language designers (and implementors) must be prepared to follow these to their natural conclusion. We illustrate these ideas more concretely by reference to apostle, a language for (parallel) discrete event simulation. Here the new concepts are time and concurrency, but apostle's real power comes from the orthogonality of their introduction. The use of these and other features are easily checked in a precise yet general manner by means of anèeect' system, which also serves to determine the applicability of optimizations, both general-purpose and domain-speciic.

[1]  K. Mani Chandy,et al.  Distributed Simulation: A Case Study in Design and Verification of Distributed Programs , 1979, IEEE Transactions on Software Engineering.

[2]  Sten Fredrik Andler,et al.  Predicate path expressions: a high-level synchronization mechanism , 1979 .

[3]  K. Mani Chandy,et al.  Asynchronous distributed simulation via a sequence of parallel computations , 1981, CACM.

[4]  David P. Reed,et al.  Implementing atomic actions on decentralized data , 1983, TOCS.

[5]  Henry Lieberman,et al.  Using prototypical objects to implement shared behavior in object-oriented systems , 1986, OOPLSA '86.

[6]  Jayadev Misra,et al.  Distributed discrete-event simulation , 1986, CSUR.

[7]  Liuba Shrira,et al.  Promises: linguistic support for efficient asynchronous procedure calls in distributed systems , 1988, PLDI '88.

[8]  Pierre Jouvelot,et al.  Reasoning about continuations with control effects , 1989, PLDI '89.

[9]  R. M. Fujimoto,et al.  Parallel discrete event simulation , 1989, WSC '89.

[10]  Jeff S. Steinman,et al.  SPEEDES - A multiple-synchronization environment for parallel discrete-event simulation , 1992 .

[11]  Rajive L. Bagrodia,et al.  Transparent implementation of conservative algorithms in parallel simulation languages , 1993, WSC '93.

[12]  Richard E. Nance,et al.  A history of discrete event simulation programming languages , 1993, HOPL-II.

[13]  T. W. Lake,et al.  Cooperative acceleration: robust conservative distributed discrete event simulation , 1994, PADS '94.

[15]  Peter A. Buhr Are Safe Concurrency Libraries Possible? , 1995, Commun. ACM.

[16]  David Bruce The treatment of state in optimistic systems , 1995, PADS.

[17]  David M. Nicol Principles of conservative parallel simulation , 1996, Winter Simulation Conference.

[18]  Darrin West,et al.  Automatic incremental state saving , 1996, Workshop on Parallel and Distributed Simulation.

[19]  Chris J. M. Booth,et al.  Stack-Free Process-Oriented Simulation , 1997, Workshop on Parallel and Distributed Simulation.