Minimum
requirements for programming languages
•Universal - if can solve on computer then can program it
in the language
•Natural (expressive) - easy to express ideas.
•Implementable
•Efficient (for writing, compilation, or execution?)
•Reliable - writeable (high-level), readable, ability to
deal with exceptional behaviour)
•Maintainable - Easy to make changes, decisions
compartmentalized, clean interfaces.
FORTRAN
- numerical problems, very efficient compiler, separate compilation
•Fortran: the first
"mainstream" imperative programming language, designed to
facilitate scientific programming.
•Versions
II through IV came out 1958-1962.
•Aimed
at efficient calculation, good handling of arrays and loops, but not geared
towards effective programming support, I/O, or dynamic allocation. •Fortran
I was (arguably) the first compiled high level language, and introduced
"if" statements, iterative "do" loops, and more flexible
variable names. •Fortran
IV was extensively used throughout the 1960's and 1970's, and fixed or
included many more features (explicit type declarations, enhanced logic
control and parameter passing)
LISP
- List processing and symbolic manipulation, AI
•
•LISP (1959) the first functional programming language -
the goal was to create a programming language which could be used to
efficiently carry out symbolic computation (rather than numeric) and to
operate effectively on lists of data - with an orientation towards AI
applications.
•Evolved from the recognition that the existing high level
language (Fortran I) could handle neither recursion nor conditional
expressions nor dynamic allocation and de-allocation of list storage.
•Pure LISP would have only two types of data structure:
atoms and lists, and all computation would be accomplished by applying
functions to arguments.
•LISP and its descendants (including Scheme) have been the
dominant AI programming languages for the past 40 years.
•Scheme is a small dialect of LISP, which exclusively uses
static scoping rules and which allows functions to be treated as "first
class" entities (i.e. can be passed as parameters, returned as values,
etc).
•ALGOL
(1958-1960) - numeric, block structure, recursion, elegant, very influential
•
•Was designed by international groups to be the first
machine-independent language, but that very flexibility made it hard to
implement and led to its failure as a "practical" language.
•
•ALGOL
was designed to be an effective language for describing algorithms through
semi-mathematical notation: it became a standard basis for publishing
algorithms, and served as a basis for many later programming languages.
•ALGOL
60 introduced
•the
block concept for scope environments,
•distinction
between parameter passing "by name" and "by value",
•formal
description of a language syntax (through BNF forms)
•Later,
ALGOL 68 (which also failed to achieve any sort of widespread use)
introduced a few primitive data types and structures which the user could
combine to create more desired complex types as desired.
•Unfortunately
(as with ALGOL 60) the language was described using a metalanguage, which
the user had to learn before they could read the document describing the
language itself!
•COBOL
(1960): - business data
processing, records
•
•Was designed for a business orientation, with the aim that
it should be easy to read and understand (close to simple English).
•It is still the most widely used business applications
language, yet it has had very little impact on the development of
subsequent programming languages.
•The
language design was carried out by a committee sponsored by the Department
of Defence in 1959. Indeed, the original survival of the language is likely
due to the fact that the DoD mandated the use of COBOL in spite of its early
poor performance.
•The
decision was to categorize language statements into two categories,
depending on whether they describe data or represent executable operations,
and to separate these groups of statements within the program.
•COBOL
60 was one the first high level language to implement the macro concept and
also the use of hierarchical data structures.
•COBOL
includes extensive definition of variables and file records, but is impaired
by its lack of functions.
•BASIC
(1964): designed to be an easy programming language for
"non-science" students, it placed less emphasis on execution
efficiency and more on programming time
•
•Early versions were designed for remote terminal access
to a computer, and programs had to be run in batch mode.
•The language was very limited both in control statements
and in data types, but was very easy to learn.
•More recent versions (e.g. Visual Basic) represent
substantial improvements over the early days.
•PL/I
(1963-5): was one of the few languages that attempted to be a general purpose
language, rather than aiming at a particular category of programming.
•
•PL/I incorporated a blend of features from FORTRAN,
ALGOL, and COBOL, plus allowed programmers to create concurrent tasks,
handle run-time exceptions, use recursive procedures, and use pointers.
•The language development was closely tied to the
development of the IBM/360, a line of "general use" computers.
•The main problems with the language were its large size
and the interaction of so many complex features.
•SIMULA
67: yet another descendant of ALGOL, SIMULA was the first language to
support data abstraction, through the class concept.
•PASCAL
(1971): an extension of the ALGOL languages, it survived as a teaching
language for structured programming.
•
•It still has widespread (though rapidly declining) use in
the teaching community, but comparatively little commercial use.
•It has stronger type and error checking than Fortran or C
and more restrictive syntax, hence enforces some fundamental programming
concepts better than C (perhaps).
•C
(1972): C presented relatively little that was new or remarkable in terms of
programming language design, but used and combined established features in a
very effective manner for programming.
•
•It was designed for systems programming, and initially
spread through close ties with UNIX.
•C has numerous and powerful operators, and extensive
libraries of supporting function.
•It has (comparatively) little in the way of type
checking, which makes the language more flexible for the experienced user
but more dangerous for the inexperienced.
•Prolog
(1972): was the first widespread formal logic language. It is a
non-procedural, goal oriented language.
•
•Computation takes place by trying to infer the response
to queries through accessing a database of facts and rules.
•The user supplies the facts, rules, and queries
(expressed in predicate calculus), while the computer carries out resolution
to try and infer the replies.
•Smalltalk
(1972-1980): was a combination of programming language and complete
development environment which pioneered current GUI systems.
•
•It was the first fully object oriented language,
supporting data abstraction, inheritance, and dynamic binding.
•The programmer's view of the world was through objects
and methods, and all programming is carried out by sending a message to an
object as a request to invoke a method. (E.g. calling a function associated
with the object, and passing it appropriate parameters.)
•Ada
(1975-1983): Ada, like COBOL, had its development sponsored by the US
Department of Defence, and survived as a language largely because of mandated
use by the DoD.
•
•In design, Ada's developers tried to incorporate
everything known about software engineering to that time. It supports object
oriented programming, concurrency, exception handling, etc.
•The design and implementation of the language suffered
through being perhaps too ambitious. The language was officially defined by
1981, but effective compilers could not be completed until 1985.
•C++
(1985): based upon (and implemented in) C, but with an object oriented
emphasis.
•
•The goals were to make C++ an equally (or almost so)
efficient superset of C, with classes and inheritance added.
•It is a very popular language because of its close ties
to C, the ready availability of good compilers, and its effective use of OO.
•Its drawbacks are the same type and error checking
weaknesses as C, and perhaps an overabundance of features (many of which are
rarely used in practice) which make the language more difficult to learn.
•Perl
(1988): Perl was developed on Unix systems as a tool for bug reporting, and
has evolved from simple programming languages to a full-fledged (though
unusual) programming language.
•
•Perl is a partially-compiled scripting language, but the
compiler is used essentially to perform error detection, and to reconfigure
the commands in a manner which simplifies interpretation.
•Perl, like Java, has seen a dramatic surge in popularity
tied to the Web, as the language is well suited for CGI programming.
•Java
(1995): is a significantly simplified descendant of C++.
•
•It is based on C++, and fully supports OOP, but
eliminates many of the "unsafe" or "extravagant"
features of C++.
•The language was originally intended for use primarily in
embedded systems (hence the reliability requirements, and the elimination of
"unsafe" features), but gained popularity primarily as a tool for
Web programming.
