Week 2 Evolution of Programming Languages: IPT101 Integrative Programming Technologies I
Week 2 Evolution of Programming Languages: IPT101 Integrative Programming Technologies I
Week 2 Evolution of Programming Languages: IPT101 Integrative Programming Technologies I
Evolution of
Programming languages
IPT101
INTEGRATIVE PROGRAMMING TECHNOLOGIES I
WEEK 2 Evolution of Programming languages
Fortran
• IBM Mathematical Formula Translating System, later popularly know as Fortran.
• Originally developed by a team lead by John Backus at IBM in the 1950s for scientific
and engineering applications on the IBM704, introduced in 1954.
COBOL
• Acronym for COmmon Business-Oriented Language
• The specifications were to a great extent inspired by the Grace Hopper’s FLOW-MATIC
and IBM’s COMTRAN languages.
LISP
• Lisp was created by John McCarthy in 1958 as a practical mathematical notation for
computer programs, influenced by the notation of Alonzo Church's lambda calculus.
• Lisp pioneered many ideas in computer science, including:
• functional programming
• tree data structures
• automatic storage management
• dynamic typing
• self-hosting compiler
• LISP was designed by McCarthy as a language to express symbolic computations, i.e. programs that
aim at manipulating mathematical expressions, for example:
• simplification of expressions
• differentiation and integration
• polynomial factorization
• Some of the requirements for such a language was the availability of:
• recursion: lambda calculus uses recursion pervasively
• linked lists: to implement lambda calculus, which implied dynamic memory allocation and deallocation.
ALGOL
• ALGOL (ALGOrithmic Language) is a family of imperative computer programming
languages originally developed in the mid 1950s that greatly influenced many other
programming languages.
• Introduced by a joint committee of American (ACM) and European (GAMM) experts .
• GAMM: Gesellschaft für Angewandte Mathematik und Mechanik ("Society of Applied
Mathematics and Mechanics")
• ACM: Association for Computing Machinery
• According to John Backus, the original goals of the original meeting in ETH Zurich were:
• To provide a means of communicating numerical methods and other procedures between people
• To provide a means of realizing a stated process on a variety of machines.
PL/I
• With Fortran and Cobol, there were two distinct “kinds” of programmers. Fortran
emphasized floating point arithmetic, arrays, procedures, fast computation. Cobol
emphasized decimal arithmetic, fast asynchronous input/output, string handling,
efficient search/sort routines.
• When IBM designed the famous IBM360 computer, it saw the opportunity to design a
new general-purpose language designed specifically for it.
• This language was named PL/I (Programming Language 1). It was originally developed
in 1964-1966.
• This created a language with very numerous features and requirements, including many innovative
ones:
• Reference data types
• User-defined data types
• Concurrency
• Dynamic arrays
• Auto-correcting compiler
• String handling
• Machine independence
• Efficiency
• Exception handling
• I/O control system
• Report-generation
• Recursion
PASCAL
• Pascal is a very influential imperative and procedural programming language,
designed in 1968-1969 and published in 1970 by Niklaus Wirth.
• Pascal, in its original form, is a purely procedural language and includes the traditional array of ALGOL-
60 control structures.
• Pascal also has many data structuring facilities and other abstractions which were not included in the
original ALGOL 60, such as:
• user-defined type definitions
• records
• case statement
• pointers
• enumerations
• sets
• Such constructs were inspired from Simula 67, ALGOL 68, and Wirth and Hoare’s ALGOL W.
SIMULA
• Simula was developed in the 1960s at the Norwegian Computing Center in Oslo, by
Ole-Johan Dahl and Kristen Nygaard.
• Syntactically, it is a superset of Algol 60.
• Simula 67 introduced objects, classes, subclasses, virtual methods, coroutines,
discrete event simulation, and featured garbage collection.
ISWIM
• ISWIM is an abstract computer programming language devised by Peter J. Landin and
first described in his article, The Next 700 Programming Languages, published in the
Communications of the ACM in 1966.
• The acronym stands for "If you See What I Mean".
C
• C is a general-purpose programming language developed between 1969 and 1973 by
Dennis Ritchie at the Bell Telephone Laboratories for use with the Unix operating
system.
• C has become one of the most popular programming languages. It is widely used on
many different software platforms, and there are few computer architectures for
which a C compiler does not exist. C has greatly influenced many other programming
languages, most notably C++, which originally began as an extension to C.
• C was influenced by the languages BCPL and B (systems languages), who were
influenced by Algol and Fortran.
• In 1977-1979, portability emerged when portability of the Unix operating system was being
demonstrated.
• C does not have some features that are available in some other programming languages:
• No direct assignment of arrays or strings
• No automatic garbage collection
• No requirement for bounds checking of arrays
• No operations on whole arrays
• No syntax for ranges, such as the A..B notation used in several languages
• No functions as parameters (only function and variable pointers)
• No exception handling
• Only rudimentary support for modular programming
• No compile-time polymorphism
• Only rudimentary support for generic programming (using macros)
• Limited support for encapsulation
• No native support for multithreading and networking
Smalltalk
• Smalltalk is an object-oriented, dynamically typed, reflective programming language.
• It was designed and created in part for educational use at the Learning Research
Group of Xerox PARC by Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaehler, Scott
Wallace, and others during the 1970s.
• Smalltalk emerged with Alan Kay’s great “Dynabook” insight, predicting the creation
of desktop and portable computers, and their availability to everyone.
• Other objects can query or change that state only by sending requests (messages) to the object to do
so.
• Alan Kay has commented that despite the attention given to objects, messaging is the most important
concept in Smalltalk.
Ada
• Ada is a structured, statically typed, imperative, wide-spectrum, and object-oriented
high-level programming language, extended mainly from Pascal.
• Ada was originally designed by a team led by Jean Ichbiah of CII Honeywell Bull in
France under contract to the United States Department of Defense from 1977 to
1983.
• Notable features include: strong typing, packages, run-time checking, concurrency,
exception handling, and generics. Ada 95 added support for object-oriented
programming, including dynamic dispatch.
C++
• C++ is a statically typed, multi-paradigm, compiled, general-purpose programming language.
• It is a middle-level language, as it comprises a combination of both high-level and low-level
language features.
• It was developed by Bjarne Stroustrup starting in 1979 at Bell Laboratories as an
enhancement to the C programming language following the object-oriented principles
pioneered by Simula.
• Goals:
• Augment C with the notion of classes and inheritance
• Keep the same performance as C
• Keep same applicability as C
• Bjarne Stroustrup describes some rules that he used for the design of C++:
• Statically typed, general-purpose language, as efficient and portable as C
• Direct and comprehensive support for multiple programming styles (procedural programming, data abstraction, object-
oriented programming, and generic programming)
• Give the programmer choice, even if this makes it possible for the programmer to choose incorrectly
• As compatible with C as possible, providing a smooth transition from C
• Avoid features that are platform specific or not general purpose
• Not incur overhead for features that are not used
• Function without a sophisticated programming environment
Java
• Java is a programming language originally developed by James Gosling at Sun
Microsystems and released in 1995 as a core component of Sun Microsystems' Java
platform.
• Java is a general-purpose, concurrent, class-based, and object-oriented, and is
specifically designed to have as few implementation dependencies as possible.
• It is intended to let application developers "write once, run anywhere“, meaning that
once it has been compiled, it can be executed on any platform.
Introduction
• A programming paradigm is a fundamental style of computer programming.
• Compare with a software development methodology, which is a style of solving specific software
engineering problems.
• Different methodologies are more suitable for solving certain kinds of problems or applications domains.
• Programming paradigms differ in:
• the concepts and abstractions used to represent the elements of a program (such as objects, functions, variables,
constraints, etc.)
• the steps that compose a computation (assignation, evaluation, data flow, control flow, etc.).
Low-level
programming paradigm
• Initially, computers were hard-wired or soft-wired and then later programmed using
binary code that represented control sequences fed to the computer CPU.
• This was difficult and error-prone. Programs written in binary are said to be written in
machine code, which is a very low-level programming paradigm. Hard-wired, soft-
wired, and binary programming are considered first generation languages.
OOP: Variations
• There are different ways to view/implement/instantiate objects:
• Prototype-based
• objects - classes + delegation
• no classes
• objects are a set of members
• create ex nihilo or using a prototype object (“cloning”)
• Hierarchy is a "containment" based on how the objects were created using
prototyping. This hierarchy is defined using the delegation principle can be changed
as the program executes prototyping operations.
• object-based
• objects + classes - inheritance
• object-oriented
• objects + classes + inheritance + polymorphism
Functional
programming paradigm
• Functional programming is a programming paradigm that treats computation as the
evaluation of mathematical functions and avoids state changes and mutable data.
• It emphasizes the application of functions, in contrast to the imperative programming
style, which emphasizes changes in state.
1. Higher-Order Functions
2. Pure Functions
3. Recursion
4. Eager vs. Lazy Evaluation
5. Type Inference
6. In Non-functional Languages
Reflective
programming paradigm
• Reflection is the process by which a computer program can observe and modify its
own structure and behavior at runtime.
• In most computer architectures, program instructions are stored as data - hence the
distinction between instruction and data is merely a matter of how the information is
treated by the computer and programming language.
Scripting
programming paradigm
• A scripting language, historically, was a language that allowed control of software
applications.
• "Scripts" are distinct from the core code of the application, as they are usually written
in a different language and are often created by the end-user.
• Scripts are most often interpreted from source code, whereas application software is
typically first compiled to a native machine code or to an intermediate code.
Scripting Languages:
Types of Scripting Languages
1. Job control languages and shells
2. GUI scripting
3. Application-specific scripting languages
4. Web scripting languages (server-side, client-side)
Aspect-oriented
programming paradigm
• Aspect-oriented programming entails breaking down program logic into distinct parts
(so-called concerns or cohesive areas of functionality).
• AOP includes programming methods and tools that support the modularization of
concerns at the level of the source code, while "aspect-oriented software
development" refers to a whole engineering discipline.
Compilation process
Weaving process
base code
aspect code
woven code
Performance Exercise 1
Create a simple program using three programming languages.
Assignment 2
1. Integrative Coding