## 8 Pascal User Manual 

12. Procedures and functions may be called recursively. 

13. There is no "own" attribute for variables (as in Algol). 

14. Parameters are passed either by value or by reference; there is no "call by name." 

15. The "block structure" differs from that of Algol and PL/I insofar as there are no anonymous blocks; i.e., each block is given a name and thereby is made into a procedure or function. 

16. All objects - constants, variables, etc. - must be declared before they are referenced. The following two exceptions are however allowed: 

a. the type identifier in a pointer type definition (Chapter 10) 

b. procedure and function identifiers when there is a forward declaration (Section 11.C). 

17. The conform ant-array parameter offers facilities similar to the Fortran "adjustable dimension" array argument. 

Upon first contact with Pascal, some programmers tend to bemoan the absence of certain "favorite features." Examples include an exponentiation operator, concatenation of strings, dynamic arrays, arithmetic operations on Boolean values, automatic type conversions, and default declarations. These were not oversights, but deliberate omissions. In some cases their presence would be primarily an invitation to inefficient programming solutions; in others, it was felt that they would be contrary to the aim of clarity and reliability and "good programming style." Finally, a rigorous selection among the immense variety of programming facilities available had to be made in order to keep Pascal compilers relatively compact and efficient - efficient and economical for both the user who writes only small programs using a few constructions of the language and the user who writes large programs and tends to make use of the full language. 

