Characteristic domains
One possible way to classify a programming language is through its characteristic domains. These are the abstract sets from which the values that the language can manipulate are drawn.
Traditionally, there are three such domains:
- The domain of expressible values. These are the values that can be obtained as the result of the evaluation of an expression. For example, given enough memory all integers are expressible in Haskell.
- The domain of denotable values. These are the values that may be attached to a name. For example, functions are denotable in OCaml, as
let f x = x + 1;;declares the identifierfto a be function. - The domain of storable values. These are the values that may be put in the store (i.e. memory). For example, functions are not storable in C. However, they are storable in OCaml, as we can create a reference that holds a function (in other words, OCaml has a higher-order store).
This classification of programming languages comes from an influential 1973 paper by Christopher Strachey.
References
-
Lecture notes on characteristic domains by David Schmidt.
-
The notion of characteristic domains appeared in the following 1973 paper by Christopher Strachey:
@techreport{strachey_1973,
address = {Oxford},
type = {Technical {Monograph}},
title = {The {Varieties} of {Programming} {Language}},
url = {https://www.cs.ox.ac.uk/publications/publication3727-abstract.html},
number = {PRG-10},
institution = {Oxford University Computing Laboratory},
author = {Strachey, Christopher},
year = {1973}
}
The same paper is reprinted in the volume on Algol-like languages:
@incollection{strachey_1997,
address = {Boston, MA},
title = {The {Varieties} of {Programming} {Language}},
isbn = {978-1-4612-8661-5 978-1-4612-4118-8},
language = {en},
booktitle = {Algol-like {Languages}},
publisher = {Birkhäuser Boston},
author = {Strachey, Christopher},
editor = {O’Hearn, Peter W. and Tennent, Robert D.},
year = {1997},
doi = {10.1007/978-1-4612-4118-8_3},
pages = {51--64},
}