Software, which is expressed in a programming language, seeks to solve real-world problems, which are expressed in terms of physical objects and laws. Thus, software, unlike traditionally-engineered artifacts, uses quite disjoint concepts in the problem and solution spaces. A key difficulty of software comprehension is understanding the relationship between these levels. We argue that we can nevertheless bridge certain aspects of this gap in software design and construction. This is particularly important when the software is safety-critical. Our strategy is to make explicit the connection between the physical world and the machine implementation, by using formally-defined domain-specific languages, based on program transformations. The design criteria for such languages are described, a simple language is shown as an example, and comparisons are made with similar work.
展开▼