Language Generations

advertisement
Five Generations
Genrations of Programming Languages OKK
The five generations
• We generally count five "generations" of
programming languages
• The generations aren't formally defined
• Each generation represents technological advances
• "Advances" may just reflect changing preferences
• Don't take the distinctions too seriously
– but they do provide a good framework for discussion
Genrations of Programming Languages OKK
First generation
• Examples: FORTRAN, COBOL, BASIC
• Key concept: Language designs were based
directly on available hardware
• Efficiency was everything
• Language names are acronyms and are typically
spelled with all capital letters
Genrations of Programming Languages OKK
1G: Primitive data types
•
•
•
•
•
•
Data types reflect types defined by the hardware
Multiple types of numbers (fixed, floating, various sizes)
Characters and booleans are represented as numbers
No user-defined types
Identifiers have types, but type safety is not a big concern
Identifiers bound directly to storage locations--no
dynamic storage
Genrations of Programming Languages OKK
1G: Data structures
• Data structures are based on those of machine
language
– that is, single contiguous blocks of storage
• No nesting of data structures (just arrays, records)
– Arrays represent a block of locations (FORTRAN, BASIC)
– Records represent layout of data on a punched card
(COBOL)
Genrations of Programming Languages OKK
1G: Control structures
• Control structures are based on those of machine
language
– Multiple kinds of GOTOs
– Little nesting of control structures (exception: DO loops
in FORTRAN)
– No recursion (exception: BASIC)
– A single way to pass parameters (usually by reference)
Genrations of Programming Languages OKK
1G: Syntax
• One statement per line (line = punched card),
fixed columns
• Hardware doesn't yet support lowercase characters
• Pre-BNF, so syntax is irregular and inconsistent
• Keywords not reserved, but context-dependent
• Scopes are disjoint (because the is only enough
memory to compile one subprogram at a time)
Genrations of Programming Languages OKK
Second generation
• Algol 60 was the premier 2G language
• Key concepts: Abstraction and generalization
– Algol 60 introduced the notion of a "virtual machine," not
tied to particular hardware
– Algol 60 introduced real and integer data types not tied to
a particular bit representation, and generalized loop and
selection (if) statements
• Alan Perlis: "Algol was indeed an achievement; it
was a significant advance on most of its successors."
Genrations of Programming Languages OKK
2G: Data structures
• Machine independence seen as a valid concern
• Simplification and abstraction of numeric types
(real, integer)
• Arrays with user-defined lower bounds (not just 1)
• Dynamic (expandable) arrays
• Booleans introduced, but still not characters
– Strings could be used for output only
• Strong typing
Genrations of Programming Languages OKK
2G: Control structures
• True hierarchical (nested) control structures
• Generalized control structures
– Often overly complex and baroque (e.g. for, switch)
• "Blocks" provide fine control over nesting, scopes
• Could pass parameters by value (good idea)
• Could pass parameters by name (bad idea)
Genrations of Programming Languages OKK
2G: Syntax
• BNF used to simplify and regularize syntax
• Free-format programs (not line-oriented)
• Indentation used to show hierarchical structure of
program
• Typically used reserved keywords rather than
keyword-in-context
• Lowercase letters used (but not supported by
hardware)
Genrations of Programming Languages OKK
Third generation
• Example: Pascal
• Key concepts: Simplicity and generality
– More but simpler control structures
– Expanded and generalized data types
Genrations of Programming Languages OKK
3G: Data Structures
• Recognition that not everything is a number
• Language support for strings (or at least characters)
• New data types introduced:
– sets
– subranges
– enumeration types
• User-defined data types
• Hierarchical nesting of data types
• User-controllable memory allocation
Genrations of Programming Languages OKK
3G: Control structures
• More but simpler control structures
– three kinds of loop replace Algol's single for loop
• Case statements introduced
– called "switch" in C, Java
• Simpler control structures can be more efficient as
well as easier to understand
• "Call by name" parameter transmission was discarded
Genrations of Programming Languages OKK
Syntax
• No significant improvements over Algol 60
Genrations of Programming Languages OKK
First generation features of C
• Efficiency is primary concern
• Based on PDP-7 hardware
• "Flat" program space--no nested scopes or functions
– This weakness leads to need for make
• Some first generation syntax ("=" for assignment)
Genrations of Programming Languages OKK
Second generation features of C
• Abstractions of numeric types, pointers
• Pointer and array abstractions are lower-level than
some machine hardware
– Wrong abstraction level can hinder optimization
• Seen on a button: "C combines the flexibility of
assembly language with the power of assembly
language"
Genrations of Programming Languages OKK
Third generation features of C
• Hierarchical data structures (if not programs)
• Support for strings (sort of), and enumeration
types (almost)
• User-controllable memory allocation
• Bottom line: C mixes characteristics of three
generations
Genrations of Programming Languages OKK
Fourth generation
• Examples are Ada, Modula
• Key concept: Emphasis on data abstraction
Genrations of Programming Languages OKK
4G: Data structures
• Separation of specification and definition
– Other programmers and program parts can access the
specification, not the code
– This gives better support for information hiding
– But this leads to duplication, which is error-prone
• Name access by mutual consent
• Generic or polymorphic subprograms
• Exceptions (errors) attain the status of a data type
Genrations of Programming Languages OKK
4G: Control structures
• Concurrent programming, that is, multiple
communicating processes
• Protected or synchronized types
• Functions can be overloaded (operators, too)
• Exception handlers result in a new flow of control
Genrations of Programming Languages OKK
4G: Syntax
• Fully bracketed control structures replace
begin...end or {...}
• Examples:
– if...end if;
– loop...end loop;
– function foo ( ) ... end foo;
Genrations of Programming Languages OKK
Fifth generation, I
• Key concept: No general agreement on what 5G is
• Prolog was the basis of the Japanese "FifthGeneration Project"
– The Fifth-Generation Project was not a success
• O-O languages are now the dominant paradigm
– They are the de facto fifth generation
• But logic programming has a prior claim to the name
• Functional programming is also a contender for 5G
Genrations of Programming Languages OKK
Fifth generation, II
• O-O languages are Simula 67, Smalltalk, Java
• Yes, the first O-O language appeared in 1967!
• Almost all surviving languages now have O-O
extensions
–
–
–
–
C has Objective C, C++
Pascal has Object Pascal
Ada has Ada 95
There are O-O versions of FORTRAN, BASIC, Prolog, etc.
Genrations of Programming Languages OKK
Fifth generation, III
• Fifth generation (Smalltalk, Java)
• Key concept: Object orientation
• Three essential features:
– Abstract data types (grouping of data and methods)
– Inheritance (of types and methods, with overriding)
– Messages (dynamic binding to methods)
Genrations of Programming Languages OKK
5G: Data structures
•
•
•
•
Everything (or almost everything) is an object
All behaviors (methods) are encapsulated within objects
Objects are arranged in a hierarchy
But object space is still "flat," with little or no nesting
– Java's inner classes are too little, too late
• Data and methods are inherited
• Data and methods can be overridden
Genrations of Programming Languages OKK
5G: Control structures
• Instead of calling functions, send messages to objects
– Variables can hold different kinds of objects at different times
– Therefore, messages sent to the variable may go to different
kinds of objects
• Most O-O languages have support for GUI events
– An event is a message sent "to whom it may concern"
– Event-handling may be container-based (Mac, Java 1.0)
– Better event-handling is listener-based (Java 1.1)
Genrations of Programming Languages OKK
5G: Syntax
• First support for international alphabets
• No other improvements in syntax
• In fact, Java syntax is a throwback to the C era
Genrations of Programming Languages OKK
Advantages of O-O languages
• Most significant: best solution (so far) to code reuse
– You can inherit data and methods from predefined objects
– It's easy to override methods or to adapt them
• This changes completely the way programmers work
– Don't write from scratch; find something similar and adapt it
– Along with syntax, you must now learn vast libraries
• Additional advantage: first real support for GUIs and
for event handling
Genrations of Programming Languages OKK
Summary: Data structures
• First generation: Flat (non-nested) blocks of storage
• Second generation: Generalized numbers, strong
typing
• Third generation: New data types, user-defined data
structures, dynamic memory allocation
• Fourth generation: Non-lexical control of data access
• Fifth generation: Objects encapsulate their methods
Genrations of Programming Languages OKK
Summary: Control structures
• First generation: Based on machine instructions, with
heavy use of GOTOs
• Second generation: Machine independent, nested, but
jack-of-all-trades
• Third generation: More but simpler control structures
• Fourth generation: Concurrent programming,
exception handling
• Fifth generation: Messages to objects, event handling
Genrations of Programming Languages OKK
Summary: Syntax
• First generation: Line-oriented, inconsistent syntax,
disjoint scopes
• Second generation: Free form, uniform syntax,
nested scopes
• Third generation: No advances
• Fourth generation: Fully bracketed control structures
• Fifth generation: No advances, some losses
Genrations of Programming Languages OKK
But wait...there's more!
• Simula 67 was the first true O-O language
– This shows that it takes time to get good ideas into
mainstream languages
• Logic languages (Prolog) and purely functional
languages (ML) still have some very good ideas
• Giant, all-inclusive languages (PL/I, Algol 68) are
not the answer
• Finally, don't take this classification scheme too
seriously!
Genrations of Programming Languages OKK
The End
Genrations of Programming Languages OKK
Download