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. 