Maclennan Generations
Maclennan Generations
! There are numerous "takes" in this! ! Here, we are using MacLennan's take, from the course text;
3 - First-Generation (page 2)
" "This machine orientation is especially apparent in first generation control structures" ! non-nested ! "depend heavily on the GOTO for building any but the simplest control structures" ! "One exception ... the definite iteration statement [FORTRAN's DO-loop] ... which IS hierarchical in first-generation languages." " "Recursive procedures are not permitted in most first-generation languages (BASIC is an exception)" " "there is generally only one parameter passing mode (typically, pass by reference)"
4 - First-Generation (page 3)
" "machine orientation ... can also be seen in the types of data structures provided ... patterned after the layout of memory on the computers available around 1960." ! "data structure primitives ... are fixed and floating point numbers of various precisions, characters, and logical values -! ...just the kinds of values manipulated by the instructions on these computers" " "The data structure constructors are arrays and, in business-oriented languages, records, which are the ways storage was commonly organized." " "As with control structures, first-generation languages provide little facility for hierarchical data organization (an exception is COBOL's record structure). That is, data structures cannot be nested."
5 - First-Generation (page 4)
" "characterized by a relatively weak type system; ! that is, it is easy to subvert the type system or do representation-dependent programming." ! "(Machine independence and portability were not major concerns in the first generation.) " "Hierarchical structure is also absent from first-generation name structures, with disjoint scopes being the rule." ! "variable names are bound directly and statically to memory locations since there is no dynamic memory management."
6 - First-Generation (page 5)
" "syntactic structures ... are characterized by a card-oriented, linear arrangement of statements patterned after assembly language" ! "...most of these languages had numeric statement labels that are suggestive of machine addresses" " BUT they "go significantly beyond assembly languages ... in their provision of algebraic notation" " "Their usual lexical conventions are to ignore blanks and to recognize keywords in context."
7 - First-Generation (page 6)
" "In summary, the salient characteristics of the first generation are: ! machine orientation and ! linear structures." " ... "second generation makes important moves in the directions of ! application orientation and ! hierarchical structure."
9 - Second-Generation (page 2)
" "usually have strong-typing of the built-in types" " name structures: one of the 2nd generation's biggest contributions is here: hierarchical nesting! ! better control of name space ! permits efficient dynamic memory allocation " "The introduction of block structure is perhaps the most characteristic attribute of this language generation."
10 - Second-Generation (p. 3)
" structured control structures - "which, by hierarchically structuring the control flow, eliminate the need for confusing networks of goto's" " "also elaborated many of the first generation's control structures" -" sometimes with good results: ! recursive procedures, ! the idea of a choice of parameter-passing modes " sometimes, not (or at least with more questionable results)! ! the proliferation of baroque and expensive constructs
11 - Second-Generation (p. 4)
" syntactic structures: ! "saw a shift away from fixed formats, ! toward free-format languages with machine-independent lexical conventions" " "a number of languages shifted to keyword or reserved word policies, although the keyword-in-context rule was also used (PL/I)"
12 - Second-Generation (p. 5)
" "In general, the second generation can be seen as the full flowering of the technology of language design and implementation. " The many new techniques developed in this period encouraged unbridled generalization with both desirable and undesirable consequences." " "We will see that the third generation tried to compensate for the excesses while retaining the accomplishments."
14 - Third-Generation (page 2)
" data structures: shift of emphasis from the machine to the application ! provision of user-defined data types -now users can create the data types needed by their applications; ! also exemplified by application-oriented type constructors, like sets, subranges, and enumeration types " also characterized by the ability to nest data structures to any depth! (to organize data hierarchically) " name structures: generally some simplification of Algol-60 block structure ! BUT, also "typically have new binding and scope-defining constructs, often associated with data type constructors, such as records and enumeration types"
15 - Third-Generation (page 3)
" control structures: simplified, efficient versions of those found in the second generation; ! especially apparent in Pascal's for-loop ! Pascal also provided two separate constructs for indefinite iteration: whileloop, repeat-loop ! rejection of name parameters and similar delayed-evaluation mechanisms " also often include application-oriented control structures, such as Pascal's casestatement
16 - Third-Generation (page 4)
" in summary: combines practical engineering principles with the technical achievements of the 2nd generation -! the result, especially in the case of Pascal, is a simple, efficient, secure tool for many applications
18 - Fourth-Generation (page 2)
" some characteristics are just a consolidation and correction of certain third generation characteristics; " others are important new facilities; " most important contribution: in name structures ! MacLennan's fourth generation is essentially synonymous with data abstraction language ! " primary characteristic: provision of an encapsulation facility supporting: ! the separation of specification and definition ! information hiding ! name access by mutual consent
19 - Fourth-Generation (page 3)
" "Most of these languages allow encapsulated modules to be generic (or polymorphic)", which can lead to operator identification issues;" " control structures: "It is characteristic of this generation to provide for concurrent programming" ! "Most ... use some form of messagepassing as a means of synchronization and communication among concurrent tasks" ! "Protected data structures ... are also typical." ! "On the other hand, the basic framework of these languages is still sequential." " "typically also have a dynamically-scoped exception mechanism for handling both system- and user-defined errors"
20 - Fourth-Generation (page 4)
" data structure constructors : similar to those of the third generation, except some problems (array parameters!) have been corrected; " "primitive data structures tend to be more complicated than the third generation, because of the desire to control accuracy and precision in numeric types" " "syntactic structures ... are largely those of the second and third [generations]... in the Algol/Pascal tradition. ! The major exception is a preference for fully-bracketed structures ." ! ^ ...which, for example, are another solution to the dangling-else problem!