A class of programming languages. These languages have the appearance of traditional imperative languages in that they incorporate the assignment statement and typical control flow constructs such as if statements and loops. They impose the limitation, however, that no variable may be assigned a value more than once. (Special provision must be made for assignment statements within loops.) This limitation significantly alters the nature of the assignment statement, which can then be viewed as statically associating a name with a value rather than as a dynamic destructive operation. This static nature allows the normal ordering restrictions of imperative languages to be relaxed, and assignment statements can be executed as soon as the expression on the right-hand side can be evaluated. Because of this property, single-assignment languages are closely associated with dataflow computing (see dataflow machine).