Generations of Programming Languages

img


What is a computer?
Since the objective of this course is to learn how to design 3GL programs it might be helpful to try to understand what is meant by some of the terms used. For instance what is a computer, what is a computer program and what is a generation in the computer programming language sense?
A computer is a machine, probably the most complex machine yet devised by man. If I were to define a computer I might say that:
* A computer has input and output circuitry.

* A computer has a central processing unit for carrying out arithmetical and logical operations.

* A computer has memory for the storage of programs and data.

* A computer can execute sequences of instructions.
What is a computer program?
If you look at the computer definition in reverse order - starting with "A computer can execute sequences of instructions" - you have a definition of a computer program - it is a sequence of instructions which the CPU interprets as arithmetical and logical operations.
A computer program is stored in memory and also consists of data and instructions. The input-output circuits (I/O) enable the machine to transfer data between the machine and the external world.
Instructions and programs imply that there is some order in what the computer does, that is, there is an element of design. A program designer determines what instructions and data structures are required in order to get the machine, the computer, to complete some given task.
Most significantly the designer determines the sequence in which the instructions will be carried out (executed) in order to successfully complete the program. We have some idea of what a computer is and what a computer program is, what about generations of languages?
img
The notion of generation implies growth and Figure above depicts the growth in computer languages since the 1940's. This figure is not meant to be exact, just to give some idea of the times that the different generations appeared, time scales and the relativity of computer languages to each other and the world of problem-solving.
The vertical axis represents problem-definition in computer terms; in other words it represents how we state or write computer programs. At the bottom of the scale is the machine-oriented definition.
This means that a computer program is stated in a language which is closer to the native language of the computer than it is to the native language of the program designers - you and me. At the top of this axis is the human-oriented problem definition.
This means that the problem definition - the computer program - is stated in terms that are closer to the language of the designer than the language of the machine. This obviously is the preferred way of programming.
The machine understands problems stated in terms of 1's and 0's, for example:
101011110001010001000101111010010101010
but humans prefer to state problems in a human language, like this:
ADD this week's total to last weeks
The horizontal axis of Figure 1 shows time and represents the approximate time at which a given generation of computer language came into use and the period over which the language generation was or is in use.
Keep in mind that this figure is an approximation and just because it shows 3GL's finishing in the late 1980's it doesn't mean that 3GL's are no longer used. If only life was so simple! In practice there are no well-defined leaps from one generation to another and no well-defined times when one generation comes into general use.
You could look into almost any significant programming project and probably find that there may be three generations of computer language being used at the same time. It is quite common to find projects that use some assembly language, some 3GL and some 4GL.
The later generations of computer language enable program designers and programmers to write programs which use approximations to human language. A computer program model
Since a computer program is a sequence of instructions which operate on data we can show this in a simple model:
The model implies that the program processes data which comes from a source and goes to a destination - the data sink. Although it isn't always the case, in larger programs and programming systems the source and sink are usually external to the program.
A data source will be an input or storage device like a keyboard, disk drive, scanner, tape drive, a data sink will be an output or storage device like a computer screen, printer, disk drive, tape drive, plotter etc. Data and information
The last topic in this section is a brief explanation of the terms data and information. These terms tend to be used interchangeably but should not be, even "reliable" dictionaries tend to use data as a synonym for information. Data represents a value which in the absence of a context has no specific meaning. Information is data with meaning. For example, assume we have the list of numbers:
24.56, 11.94, 27.23, 40.11
What do they mean? The meaning of the numbers depends on the context in which they are used. They might represent average temperatures in a room, or hourly payrates in a small business.
The numbers might be stored on a disk drive and it would be possible to write a computer program which read the numbers from the disk drive - the data source - and treated them as temperatures. Another program could read the same numbers and treat them as dollar values. The program determines the context.

1GL?
What is 1Gl
1GL or first-generation language was (and still is) machine language or the level of instructions and data that the processor is actually given to work on (which in conventional computers is a string of 0s and 1s).
A first-generation programming language is a machine-level programming language.
Originally, no translator was used to compile or assemble the first-generation language. The first-generation programming instructions were entered through the front panel switches of the computer system.
Advantages of First Generation Language
The main benefit of programming in a first-generation programming language is that the code a user writes can run very fast and efficiently, since it is directly executed by the CPU.
Disadvantages of First Generation Language
However, machine language is somewhat more difficult to learn than higher generational programming languages, and it is far more difficult to edit if errors occur.
In addition, if instructions need to be added into memory at some location, then all the instructions after the insertion point need to be moved down to make room in memory to accommodate the new instructions.
Doing so on a front panel with switches can be very difficult. Furthermore, portability is significantly reduced - in order to transfer code to a different computer it needs to be completely rewritten since the machine language for one computer could be significantly different from another computer.
Architectural considerations make portability difficult too. For example, the number of registers on one CPU architecture could differ from those of another.

2GL?
What is 2Gl
2GL or second-generation language is assembler (sometimes called "assembly") language. A typical 2GL instruction looks like this:
ADD 2,8
An assembler converts the assembler language statements into machine language.
A second-generation programming language is a term usually used to refer to some form of assembly language, which were first introduced in the 1950s.
Unlike first-generation programming languages, the code can be read and written fairly easily by a human, but it must be converted into a machine readable form in order to run on a computer.
The conversion process is simply a one-to-one mapping of the assembly language mnemonics into binary machine code (the first-generation language), each known as an opcode.
The language is specific to and dependent on a particular processor family and environment. Since it is a one-to-one mapping to the native language of the target processor it has significant speed advantages, but it requires more programming effort and is difficult to use effectively for large applications.
Second-generation languages are sometimes used in kernels and device drivers (though C is generally employed for this in modern kernels), but more often find use in extremely intensive processing such as games, video editing, graphic manipulation/rendering, emulation/virtualization, simulation, encryption and compression.
Often, the "skeleton" of such programs is constructed in a higher-level language and individual functions are implemented in lower-level language. These functions typically exist at the core of the tightest loops, being executed many times per second. This assures the greatest gain from the painstaking hand optimization process, as every bit of time shaved off is multiplied.

3GL?
What is 3Gl
3GL or third-generation language is a "high-level" programming language, such as PL/I, C, or Java. Java language statements look like this:
public boolean handleEvent (Event e) {
switch (e.id) {
case Event.ACTION_EVENT: {
if ("Try me" .equald(e.arg)) {
A compiler converts the statements of a specific high-level programming language into machine language. (In the case of Java, the output is called bytecode, which is converted into appropriate machine language by a Java virtual machine that runs as part of an operating system platform.) A 3GL language requires a considerable amount of programming knowledge.
First introduced in the late 1950s, Fortran, ALGOL and COBOL are early examples of this sort of language. Most "modern" languages (BASIC, C, C++, Delphi, and Java) are also third-generation languages. Most 3GLs support structured programming.
Some Popular 3GL Languages
1. Fortran (formula Translation)
2. ALGOL
3. COBOL (Common Business Oriented Language)
4. BASIC 5. C/C++
6. Delphi
7. Java and many others

4GL
What is 4Gl
4GL or fourth-generation language is designed to be closer to natural language than a 3GL language. Languages for accessing databases are often described as 4GLs. A 4GL language statement might look like this:
EXTRACT ALL CUSTOMERS WHERE "PREVIOUS PURCHASES" TOTAL MORE THAN Rs.100
A fourth-generation programming language (1970s-1990) (abbreviated 4GL) is a programming language or programming environment designed with a specific purpose in mind, such as the development of commercial business software.
In the evolution of computing, the 4GL followed the 3GL in an upward trend toward higher abstraction and statement power. The 4GL was followed by efforts to define and use a 5GL.
The natural-language, block-structured mode of the third-generation programming languages improved the process of software development. However, 3GL development methods can be slow and error-prone.
It became clear that some applications could be developed more rapidly by adding a higher-level programming language and methodology which would generate the equivalent of very complicated 3GL instructions with fewer errors.
In some senses, software engineering arose to handle 3GL development. 4GL and 5GL projects are more oriented toward problem solving and systems engineering
Some successful fourth-generation languages
* General Use / Versatile

o IBM VisualAgen/VisualAge Generator
o SQLWindows/Team Developer
o SheerPower4GL (Microsoft Windows Only)
o PowerBuilder
o DataFlex
* Database query languages

o Informix-4GL
o Progress 4GL
o SQL
o SB+/SystemBuilder
* Report generators

o Quest
o Report Builder
o Oracle Reports
o PostScript
o Progress 4GL Query/Results
* Data manipulation, analysis, and reporting languages

o ABAP
o ADS/Online (plus transaction processing)
o Aubit-4GL
o Audit Command Language
o Genero
o GraphTalk
o Informix-4GL

5GL
What is 5Gl
5GL or fifth-generation language is programming that uses a visual or graphical development interface to create source language that is usually compiled with a 3GL or 4GL language compiler.
Microsoft, Borland, IBM, and other companies make 5GL visual programming products for developing applications in Java, for example. Visual programming allows you to easily envision object-oriented programming class hierarchies and drag icons to assemble program component.
A fifth-generation programming language (abbreviated 5GL) is a programming language based around solving problems using constraints given to the program, rather than using an algorithm written by a programmer. Most constraint-based and logic programming languages and some declarative languages are fifth-generation languages.
Advantages of 5GL Programming Languages
While fourth-generation programming languages are designed to build specific programs, fifth-generation languages are designed to make the computer solve the problem for you.
This way, the programmer only needs to worry about what problems need to be solved and what conditions need to be met, without worrying about how to implement a routine or algorithm to solve them.
Fifth-generation languages are used mainly in artificial intelligence research. Prolog, OPS5, and Mercury are the best known fifth-generation languages.
These types of languages were also built upon Lisp, many originating on the Lisp machine. ICAD is a good example. Then, there are many frame languages, such as KL-ONE.
In the 1990s, fifth-generation languages were considered to be the wave of the future, and some predicted that they would replace all other languages for system development, with the exception of low-level languages.
Most notably, from 1982 to 1993 Japan put much research and money into their fifth generation computer systems project, hoping to design a massive computer network of machines using these tools.