Execution model
Program execution |
---|
General topics |
Compilation strategies |
Notable runtimes |
|
An execution model specifies how work takes place. Every programming language has an execution model, which is specified as part of the language specification, and is implemented as part of the language implementation. Execution models can also exist independently from programming languages, an example of which would be the POSIX Threads library. The details in the specification of an execution model cover things such as what is an indivisible unit of work and what are the constraints on the order in which those units of work take place. For example, the addition operation is an indivisible unit of work in many languages, and in sequential languages such units of work are constrained to take place one after the other.
In particular, the C programming language, defines statements, which are terminated by a ";". This can be viewed as defining one level of indivisible unit of work. The language spec goes on to say that statements proceed in-order. This can be viewed as defining constraints on the order of performing those units of work. It also specifies the order of precedence, which can be viewed as defining another level of indivisible work unit, while at the same time stating the constraints on the order of performing those work units. So, order of precedence covers constraints on work within a statement, and ";" covers constraints on the order of those statements.
An implementation of an execution model controls the order in which work takes place during execution. This order may be chosen ahead of time, in some situations, or it can be dynamically determined as the execution proceeds. Most execution models allow varying degrees of both. For example, the C language fixes the order of work within a statement and it fixes the order of all statements, except ones that involve an IF statement or a form of loop statement. Hence, most of the order of execution may be chosen statically, before execution begins, but a small portion must be chosen dynamically, as execution proceeds.
The static choices are most often implemented inside a compiler, in which case the order of work is represented by the order in which instructions are placed into the executable binary. The dynamic choices would then be implemented inside the language's runtime system. The runtime system may be a library, which is called by instructions inserted by the compiler, or the runtime system may be embedded into the executable directly, such as by inserting branch instructions, which make dynamic choices about which work to perform next.
However, an interpreter may also be constructed for any language, in which case all decisions on order of execution are dynamic. An interpreter can be viewed as being part translator, and part execution model implementation.
Each and every programming language has an execution model, which determines the manner in which the units of work (that are indicated by program syntax) are scheduled for execution. Detailed examples of the specification of execution models of a few popular languages include those of Python, [1] the execution model of the Unified Parallel C (UPC) programming language, [2] a discussion of various classes of execution model such as for imperative versus functional languages, [3] and an article discussing execution models for real-time embedded languages. [4]
Overview
As a simple example of a basic execution model, that of the C language is described in the book by Kernighan and Richie. [5] The book describes that work takes places in units called statements, which are syntactically indicated by a terminating ";". It specifies that statements are completed in order, one at a time, and a previous statement completes before the next statement begins. Details such as this are part of the execution model.
In the modern age, parallel programming is an increasingly important topic. Parallel execution models are much more complex. For example, the C++11 standard includes sizeable wording that deals with the parallel execution model of the language.
See also
Look up run-time in Wiktionary, the free dictionary. |
References
- ↑ "Python Documentation: Execution Model".
- ↑ "UPC Language Features".
- ↑ Cardoso, J.M.P. and Diniz, P.C. (2011). "Programming Languages and Execution Models". Springer US. ISBN 9780387096711.
- ↑ PELLIZZONI, R., BETTI, E., BAK, S., YAO, G., CRISWELL, J., CACCAMO, M., AND KEGLEY, R (2011). "A Predictable Execution Model for COTS-based Embedded Systems" (PDF). Real-Time and Embedded Technology and Applications Symposium. IEEE.
- ↑ Kernighan, Brian W.; Dennis M. Ritchie (February 1978). The C Programming Language (1st ed.). Englewood Cliffs, NJ: Prentice Hall. ISBN 0-13-110163-3.