The Language List - Version 2.4, January 23, 1995
Collected information on about 2350 computer languages, past and present.
Available online as:
http://cui_www.unige.ch/langlist
ftp://wuarchive.wustl.edu/doc/misc/lang-list.txt
Maintained by:
Bill Kinnersley
Computer Science Department
University of Kansas
Lawrence, KS 66045
billk@cs.ukans.edu
Started Mar 7, 1991 by Tom Rombouts <tomr@ashtate.A-T.com>
This document is intended to become one of the longest lists of computer programming languages ever assembled (or compiled). Its purpose is not to be a definitive scholarly work, but rather to collect and provide the best information that we can in a timely fashion. Its accuracy and completeness depends on the readers of Usenet, so if you know about something that should be added, please help us out. Hundreds of netters have already contributed to this effort. We hope that this list will continue to evolve as a useful resource available to everyone on the net with an interest in programming languages.
"YOU LEFT OUT LANGUAGE ___!"
If you have information about a language that is not on this list,
please e-mail the relevant details to the current maintainer, as shown
above. If you can cite a published reference to the language, that will
help in determining authenticity.
What Languages Should Be Included
The "Published" Rule - A language should be "published" to be included
in this list. There is no precise criterion here, but for example a
language devised solely for the compiler course you're taking doesn't
count. Even a language that is the topic of a PhD thesis might not
necessarily be included. But if material on that language was published in
a technical journal or report, or if it formed the basis for additional
research, the language belongs in this list. A language does NOT have to
be implemented (actually running on at least one computer) to be included.
Many languages appearing in the ACM SIGPLAN Notices fall into this
category.
In general when there's any doubt, an entry will be included. Making
the list as complete as possible necessarily means there will be a large
number of obscure entries. To compensate for this "clutter" effect, more
widespread languages such as C or FORTRAN should have longer entries.
For historical completeness roughly 200 early pre-1959 "automatic
programming systems" were included, based on a list from CACM 2(5):16, May
1959. It can be argued that many of these are not really programming
languages as the term is used today. We've also included some formalisms
which are clearly not meant to be used as a source language for writing
programs: metalanguages such as BNF, intermediate languages such as P-Code,
and computational models such as Linda.
Dialects, Variants, Versions and Implementations
Computer languages evolve, and are related to one another in rather
complex ways. Almost every language can be regarded as an improved version
of something else. Sometimes it's hard to know where to draw the line and
say "this is a separate language". Taking LISP as an example, what started
out as a single language has evolved into a large family. Dialects (such
as Scheme and Common LISP) have major differences and are certainly
considered by their users to be distinct languages. Variants (such as
Kyoto Common LISP and Allegro CL) are primarily intended to be the same,
but have certain features which make them incompatible. Implementations
are designed to run on particular machines or operating systems and will
usually have special features added. Inevitably a series of revisions will
be issued, causing further small changes in the language. It has even been
suggested that if command line options are present, each choice of options
could be considered a distinct language!
A language's name by itself is not always an accurate guide to its
identity. Sometimes a language will undergo significant evolution without
any official change in name (e.g. SETL2 has done this). Sometimes just the
name will change (IAL to ALGOL to ALGOL 58). And occasionally a name has
been used for several distinct languages (e.g. Vulcan).
It may also be debatable what is "in" a language and what is not. For
example SML is defined in stages: a "core syntax" surrounded by a standard
set of extensions. Technically that makes it two separate languages.
Other languages have purposely omitted essential features like I/O from
their definition because they were never intended to be used without a
standard library (C) or interface (Smalltalk-80), or because they
constitute the command language for a particular product or system. Still
other languages are by their very nature extensible, and the large number
of macro packages built on TeX for example could be called an endless list
of separate "languages".
Brand names - You might wonder why we do include a number of commercial
products such as Turbo Pascal. Usually these items offer non-standard
extensions to the base language. This has been particularly true in the
varieties of BASIC and Prolog. But also one could argue that in a strict
sense Microsoft C and Turbo C for example are distinct languages.
Another reason for including entries of this type is that many languages
are proprietary, appearing only in a certain product. Such languages may
be distinctive and interesting and deserve to be here. On the other hand
we don't want the list to become a catalog of commercial programming
products.
What Each Entry Should Contain
Name: An explanation of the language name, which in perhaps 80% of the
cases is some form of acronym or abbreviation.
Date of origin: The year when a language first appeared. Since the
design, implementation and distribution of a language can take place over a
period of several years, such dates are often approximate. Any language
that has an ANSI, ISO or BSI standard should include the date approved.
For specific brands such as Turbo Pascal the release dates of each version
can be listed.
Reference: At least one reference work on the language, as definitive or
as official as possible.
Availability: ftp site, commercial source or publisher, contacts for
further information.
"See also:" Related languages or terms that may also be of interest.
Any material marked with brackets "[]" is doubtful and may be considered
a request for further information.
Editorial Comments - What constitutes a good language has often become
the subject of intense debate. We've tried to avoid adding to this by
avoiding any remarks that are subjective, such as calling a language
"powerful". Nevertheless some comments might still be construed this way.
For instance saying that Pascal is "ALGOL-like" could offend both some
ALGOL and some Pascal users. Also, some questions of historical origin are
not universally agreed upon.
Classification - It's been suggested that the languages in this list
should be arranged into categories, but to do so would be extremely
difficult. For every classification scheme there wlll be a large
proportion of languages that do not fit. The languages are therefore
listed alphabetically, and in fact we think that this is the most useful
organization. You'll find that the following categories have been referred
to in the list, but we must emphasize that most languages are not purely
one or the other, and we are really categorizing language features.
Imperative language
A language which operates by a sequence of commands that change the
value of data elements. Typified by assignments and iteration.
Declarative language
A language which operates by making descriptive statements about data
and relations between data. The algorithm is hidden in the semantics of
the language. This category encompasses both applicative and logic
languages. Examples of declarative features are set comprehensions and
pattern-matching statements.
Procedural language
A language which states how to compute the result of a given problem.
Encompasses both imperative and functional languages.
Applicative language
A language that operates by application of functions to values, with no
side effects. A functional language in the broad sense.
Functional language
In the narrow sense, a functional language is one that operates by use
of higher-order functions, building operators that manipulate functions
directly without ever appearing to manipulate data. Example: FP.
Definitional language
An applicative language containing assignments interpreted as
definitions. Example: Lucid.
Single Assignment language
An applicative language using assignments with the convention that a
variable may appear on the left side of an assignment only once within the
portion of the program in which it is active.
Dataflow language
A language suitable for use on a dataflow architecture. Necessary
properties include freedom from side effects, and the equivalence of
scheduling constraints with data dependencies. Examples: Val, Id, SISAL,
Lucid.
Logic language
A logic language deals with predicates or relationships p(X,Y). A
program consists of a set of Horn clauses which may be:
facts - p(X,Y) is true
rules - p is true if q1 and q2 and ...qn are true
queries - is g1 and g2 and ...gn true? (gi's are the goals.)
Further clauses are inferred using resolution. One clause is selected
containing p as an assumption, another containing p as a consequence, and p
is eliminated between them. If the two p's have different arguments they
must be unified, using the substitution with the fewest constraints that
makes them the same.
Logic languages try alternative resolutions for each goal in
succession, backtracking in a search for a common solution. OR-parallel
languages try alternative resolutions in parallel, while AND-parallel
languages try to satisfy several goals in parallel.
Constraint language
A language in which a problem is specified and solved by a series of
constraining relationships.
Object-Oriented language
A language in which data and the functions which access it are treated
as a unit.
Concurrent language
A concurrent language describes programs that may be executed in
parallel. This may be either
multiprogramming: sharing one processor
multiprocessing: separate processors sharing one memory
distributed
Concurrent languages differ in the way that processes are created:
coroutines - control is explicitly transferred - Simula I, SL5, BLISS,
Modula-2.
fork/join - PL/I, Mesa
cobegin/coend - ALGOL 68, CSP, Edison, Argus
process declarations - DP, SR, Concurrent Pascal, Modula, PLITS, Ada
and the ways in which processes interact:
semaphores - ALGOL 68
conditional critical regions - Edison, DP, Argus
monitors - Concurrent Pascal, Modula
message passing - CSP, PLITS, Gypsy, Actors
remote procedure calls - DP, *Mod
rendezvous - Ada, SR
atomic transactions - Argus
Fourth generation language (4GL's)
A very high-level language. May use natural English or visual
constructs. Algorithms or data structures may be chosen by the compiler.
Query language
An interface to a database.
Specification language
A formalism for expressing a hardware or software design.
Assembly language
A symbolic representation of the machine language of a specific
computer.
Intermediate language
A language used as an intermediate stage in compilation. May be either
text or binary.
Metalanguage
A language used for formal description of another language.
* * * * * * *