Concepts of Programming Languages

(Sean Pound) #1

74 Chapter 2 Evolution of the Major Programming Languages


2.11.2 Language Overview


One important result of orthogonality in ALGOL 68 was its inclusion of user-
defined data types. Earlier languages, such as Fortran, included only a few basic
data structures. PL/I included a larger number of data structures, which made
it harder to learn and difficult to implement, but it obviously could not provide
an appropriate data structure for every need.
The approach of ALGOL 68 to data structures was to provide a few primi-
tive types and structures and allow the user to combine those primitives into
a large number of different structures. This provision for user-defined data
types was carried over to some extent into all of the major imperative languages
designed since then. User-defined data types are valuable because they allow
the user to design data abstractions that fit particular problems very closely. All
aspects of data types are discussed in Chapter 6.
As another first in the area of data types, ALGOL 68 introduced the
kind of dynamic arrays that will be termed implicit heap-dynamic in Chapter 5.
A dynamic array is one in which the declaration does not specify subscript
bounds. Assignments to a dynamic array cause allocation of required storage.
In ALGOL 68, dynamic arrays are called flex arrays.

2.11.3 Evaluation


ALGOL 68 includes a significant number of features that had not been previ-
ously used. Its use of orthogonality, which some may argue was overdone, was
nevertheless revolutionary.
ALGOL 68 repeated one of the sins of ALGOL 60, however, and it was an
important factor in its limited popularity. The language was described using an
elegant and concise but also unknown metalanguage. Before one could read the
language-describing document (van Wijngaarden et al., 1969), he or she had
to learn the new metalanguage, called van Wijngaarden grammars, which were
far more complex than BNF. To make matters worse, the designers invented
a collection of words to explain the grammar and the language. For example,
keywords were called indicants, substring extraction was called trimming, and
the process of a subprogram execution was called a coercion of deproceduring,
which might be meek, firm, or something else.
It is natural to contrast the design of PL/I with that of ALGOL 68, because
they appeared only a few years apart. ALGOL 68 achieved writability by the
principle of orthogonality: a few primitive concepts and the unrestricted use
of a few combining mechanisms. PL/I achieved writability by including a large
number of fixed constructs. ALGOL 68 extended the elegant simplicity of
ALGOL 60, whereas PL/I simply threw together the features of several lan-
guages to attain its goals. Of course, it must be remembered that the goal
of PL/I was to provide a unified tool for a broad class of problems, whereas
ALGOL 68 was targeted to a single class: scientific applications.
PL/I achieved far greater acceptance than ALGOL 68, due largely to IBM’s
promotional efforts and the problems of understanding and implementing
Free download pdf