Evolution of Programming languages
- Plankalkül – 1945
- Never implemented
- published only in 1972
- Advanced data structures: floating point, arrays, records
- I (1957), II(1958), IV(1962),77, 90
- First implemented language
- Focus on scientific applications
- Arrays, floating point, counting loops
Languages of the Sixties
- Algol 60 (1960)
- block structure
- call-by-value, call-by-name
- dynamic arrays: the size of the array is set at the time storage is allocated to the array.
- BNF syntax
- All subsequent procedural languages based on it
- Algorithm publication language for over 40 years
- COBOL (1960):
- Business oriented:
- Elaborate reports, decimals
- Provides more precision with data formats than other languages
- Very English like
- Still in use today
- LISP (LISt Processing language):
- Functional programming
- No need for variables or assignment
- Control via recursion and conditional expressions
- Still the dominant language for AI
Languages of the Seventies
- Pascal: simplified/improved Algol
- C: systems programming
- First full implementation of an object-oriented language (data abstraction, inheritance, and dynamic type binding)
- Pioneered the graphical user interface everyone now uses
Languages of Eighties and Beyond
- Packages, exceptions
- Developed at Bell Labs
- Evolved from C and SIMULA 67
- Also has exception handling
- A large and complex language, in part because it supports both procedural and OO programming Java:
- Developed at Sun in the early 1990s
- Based on C++
- Significantly simplified (does not include struct, union, pointer arithmetic)
- Supports only OOP
- Has references, but not pointers.
There are several “branches” of computer languages that emerged over the decades. Many, many languages have been invented over the decades but only a small percentage endure for different reasons.
Language Evaluation Criteria
Evaluate features of languages, focusing on their impact on the software development process, including maintenance.
- Readability: the ease with which programs can be read and understood.
- Control structures
- Data types and structures
- Writability: the ease with which a language can be used to create programs.
- Support for subprograms
- Support data abstractions and encapsulation constructs
- Expressions and assignment statements
- Type checking
- Exception handling
- Training programming to use the language
- Language closeness to the particular application.
- The cost of maintaining program
On the left side of the figure above are mostly functional programming languages. As you can see, the languages tend to continue evolving in their paradigm. Sometimes you’ll see different kinds of evolution patterns such as Rust, which is a multi-paradigm language.