You will seldom have the opportunity to choose among all three of these passing modes for a particular parameter. The choice of passing modes is restricted on the basis of several different considerations, including parameter type, language, and process type.
Though there are many different parameter types, these types fall into two basic categories: word and descriptor. Boolean variables, integer variables, and real variables are examples of word types. Strings, arrays, files, and other complex data structures are descriptor types.
Word-type parameters can be passed by value, by name, or by reference.
In most languages, descriptor-type parameters must be passed by name or by reference. Exceptions are Pascal, which allows descriptor type parameters to be passed by value, and WFL, which can pass strings by value. Also, message control systems (MCSs) and Host Services tasking can pass descriptor type parameters by value. Host Services tasking makes it possible to write a program that passes an array to a remote process by value. (Remote processes are discussed in Tasking Across Multihost Networks.)
Each language imposes a different set of restrictions on the passing mode. For example, ALGOL passes descriptor types by name or by reference and word types by name, by reference, or by value. COBOL passes all library parameters by reference, and parameters to tasks or bound-in procedures by reference or by value. WFL passes parameters either by reference or by value. For details about these language restrictions, refer to the programming language reference manuals.
One additional restriction is based on the process type. A statement that initiates an independent process can pass parameters only by value, not by name or by reference.

