- Orthogonality (programming)
-
Orthogonality in a programming language means that a relatively small set of primitive constructs can be combined in a relatively small number of ways to build the control and data structures of the language. The term is most frequently used with regards to assembly instruction sets, as orthogonal instruction set.
Orthogonality Concept
Orthogonality is a very important concept. It addresses how relatively small number of components that can be combined in a relatively small number of ways to get the desired results. It is closely associated with simplicity: the more orthogonal the design the fewer exceptions and it makes it easier to learn, read, and write programs in a programming language. The meaning of an orthogonal feature is independent of the context. The key parameters are symmetry and consistency. For example pointers is an orthogonal concept.
Here is one example from IBM Mainframe and VAX that highlights this concept. In IBM main frame has two different instructions for adding the contents of a register to a memory cell or another register. These statements are shown below:
- A Reg1, memory_cell
- AR Reg1, Reg2
In the first case, contents of Reg1 are added to the contents of a memory cell and the result is stored in Reg1; in the second case contents of Reg1 are added to the contents of another register (Reg2) and the result is stored in Reg1.
In contrast to the above set of statement, VAX has only one statement for addition as shown below:
ADDL operand1, operand2
In this case the two operands, operand1 and operand2, can be registers, memory cells, or a combination of both and the instruction simply adds the contents of operand1 to the contents of operand2 and store the result in operand1.
It can be easily seen that the VAX’s instruction for addition is more orthogonal than the instructions provided by IBM and hence it is easier for the programmer to remember and use it as compared to the one provided by IBM.
Let us now study the design of C language from the perspective of orthogonality. We can easily see that C language is not very consistent in its treatment of different concepts and language structure and hence makes it difficult for the user to learn and use the language. Here are a few examples of exceptions:
• You can return structures but not arrays from a function • An array can be returned if it is inside a structure • A member of a structure can be any data type except void or the structure of the same type • An array element can be any data type except void • Everything is passed by value except arrays • void can be used as type in a structure but you cannot declare a variable of this type in a function.
Orthogonality The Other side
Too much orthogonality is also troublesome. Let us again have a look at C language and try to understand this concept:
In C Language
- All statements (including assignment, if, while, etc) return some value and hence can be used in expressions.
- Logic and arithmetic expressions can be intermixed.
This can cause side effects and cryptic code.
Since languages need large number of components, too much orthogonality can cause problems. From a language designer’s point of view, the most difficult task is to strike a balance which obviously is not trivial.
Links
- "The Art of Unix Programming", chapter about Orthogonality, Orthogonality concept well explained in this book, with link to other source on matter, the book "The Pragmatic Programmer" Hunt, Thomas
- "The Pragmatic Programmer: From Journeyman to Master" by Andrew Hunt and David Thomas. Addison-Wesley. 2000. ISBN 0-201-61622-X.
Categories:- Programming language topics
Wikimedia Foundation. 2010.