Terminology:
Expressions are evaluated and yield values (and may or may
not perform side effects).
Commands are executed and perform side
effects.
Declarations are elaborated to produce
bindings.
Side effects:
• change the values of variables
• perform input/output