Expression-oriented programming languages
Encyclopedia
An expression-oriented programming language is a programming language
where every (or nearly every) construction is an expression
and thus yields a value. The typical exceptions are macro definitions, preprocessor
commands, and declarations, which expression-oriented languages often treat as statement
s rather than expressions. Some expression-oriented languages introduce a void return type to be yielded by expressions that merely cause side-effects
.
ALGOL 68
and Lisp are examples of expression-oriented languages. Pascal is not an expression-oriented language. All functional programming languages are expression-oriented.
wherein a programmer introduces an assignment expression
where they meant to test for equality. For example, the designers of Ada
and Java
were so worried about this type of mistake, they restricted control expressions to those that evaluate strictly to the boolean data type. The designers of Python
had similar worries but took the alternative strategy of implementing assignment as a statement rather than an expression, thus prohibiting assignment from nesting inside of any other statement or expression.
However, notation
provokes such errors, not semantics
. From the perspective of expression-orientation, the choice of assignment notation
made by C-style languages, the equals sign
,
, the minimum string distance between
, S, and R
, or
Programming language
A programming language is an artificial language designed to communicate instructions to a machine, particularly a computer. Programming languages can be used to create programs that control the behavior of a machine and/or to express algorithms precisely....
where every (or nearly every) construction is an expression
Expression (programming)
An expression in a programming language is a combination of explicit values, constants, variables, operators, and functions that are interpreted according to the particular rules of precedence and of association for a particular programming language, which computes and then produces another value...
and thus yields a value. The typical exceptions are macro definitions, preprocessor
Preprocessor
In computer science, a preprocessor is a program that processes its input data to produce output that is used as input to another program. The output is said to be a preprocessed form of the input data, which is often used by some subsequent programs like compilers...
commands, and declarations, which expression-oriented languages often treat as statement
Statement (programming)
In computer programming a statement can be thought of as the smallest standalone element of an imperative programming language. A program written in such a language is formed by a sequence of one or more statements. A statement will have internal components .Many languages In computer programming...
s rather than expressions. Some expression-oriented languages introduce a void return type to be yielded by expressions that merely cause side-effects
Side effect (computer science)
In computer science, a function or expression is said to have a side effect if, in addition to returning a value, it also modifies some state or has an observable interaction with calling functions or the outside world...
.
ALGOL 68
ALGOL 68
ALGOL 68 isan imperative computerprogramming language that was conceived as a successor to theALGOL 60 programming language, designed with the goal of a...
and Lisp are examples of expression-oriented languages. Pascal is not an expression-oriented language. All functional programming languages are expression-oriented.
Criticism
Critics, including language designers, blame expression-orientation for an entire class of programming mistakeSoftware bug
A software bug is the common term used to describe an error, flaw, mistake, failure, or fault in a computer program or system that produces an incorrect or unexpected result, or causes it to behave in unintended ways. Most bugs arise from mistakes and errors made by people in either a program's...
wherein a programmer introduces an assignment expression
Assignment (computer science)
In computer programming, an assignment statement sets or re-sets the value stored in the storage location denoted by a variable name. In most imperative computer programming languages, assignment statements are one of the basic statements...
where they meant to test for equality. For example, the designers of Ada
Ada (programming language)
Ada is a structured, statically typed, imperative, wide-spectrum, and object-oriented high-level computer programming language, extended from Pascal and other languages...
and Java
Java (programming language)
Java is a programming language originally developed by James Gosling at Sun Microsystems and released in 1995 as a core component of Sun Microsystems' Java platform. The language derives much of its syntax from C and C++ but has a simpler object model and fewer low-level facilities...
were so worried about this type of mistake, they restricted control expressions to those that evaluate strictly to the boolean data type. The designers of Python
Python (programming language)
Python is a general-purpose, high-level programming language whose design philosophy emphasizes code readability. Python claims to "[combine] remarkable power with very clear syntax", and its standard library is large and comprehensive...
had similar worries but took the alternative strategy of implementing assignment as a statement rather than an expression, thus prohibiting assignment from nesting inside of any other statement or expression.
However, notation
Notation
-Written communication:* Phonographic writing systems, by definition, use symbols to represent components of auditory language, i.e. speech, which in turn refers to things or ideas. The two main kinds of phonographic notational system are the alphabet and syllabary...
provokes such errors, not semantics
Semantics
Semantics is the study of meaning. It focuses on the relation between signifiers, such as words, phrases, signs and symbols, and what they stand for, their denotata....
. From the perspective of expression-orientation, the choice of assignment notation
Assignment (computer science)
In computer programming, an assignment statement sets or re-sets the value stored in the storage location denoted by a variable name. In most imperative computer programming languages, assignment statements are one of the basic statements...
made by C-style languages, the equals sign
Equals sign
The equality sign, equals sign, or "=" is a mathematical symbol used to indicate equality. It was invented in 1557 by Robert Recorde. The equals sign is placed between the things stated to have the same value, as in an equation...
,
=
, can be considered a poor choice due to the equals sign's similarity to, and hazardously small typing distanceIn fact, considering the automatic repetition feature of typical computer keyboardsKeyboard (computing)
In computing, a keyboard is a typewriter-style keyboard, which uses an arrangement of buttons or keys, to act as mechanical levers or electronic switches...
, the minimum string distance between
=Assignment (computer science)In computer programming, an assignment statement sets or re-sets the value stored in the storage location denoted by a variable name. In most imperative computer programming languages, assignment statements are one of the basic statements...
and
is effectively zero, the worst possible collision. from the notation C-style languages choose for the equality operator,
, make it an occasion for error. The expression-ness of assignment is not the root cause. Other language families make different notational choices for assignment that do not have this problem, such as variable ← expression
in APL, variable <- expression
in Objective CamlObjective Caml
OCaml , originally known as Objective Caml, is the main implementation of the Caml programming language, created by Xavier Leroy, Jérôme Vouillon, Damien Doligez, Didier Rémy and others in 1996...
, S, and R
R (programming language)
R is a programming language and software environment for statistical computing and graphics. The R language is widely used among statisticians for developing statistical software, and R is widely used for statistical software development and data analysis....
, or
(setq variable expression)
in Lisp and Scheme.