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".
LISP is a prime example. What started out as a single language has evolved
into a large family of languages with complex relationships.
Fine Distinctions
Generally, we can distinguish:
-
- Dialects, such as Scheme and Common LISP.
-
- Dialects have major differences, and are certainly considered by their users
to be distinct languages.
-
-
-
- Variants, such as Kyoto Common LISP and Allegro CL.
- Variants are intended to be the same, but have certain features which make
them incompatible. Variants are often the result of commercial products offered
by different vendors.
- Versions, such as the Scheme revisions RRS, R2RS, R3RS and R4RS.
- Versions arise as a language matures. A series of revisions will be issued,
causing small changes in the language.
- Implementations
- Implementations are designed to run on particular machines or operating
systems, and will usually have special features added to take advantage of
their environment.
As an extreme, it has been suggested that if command line options are present,
each choice of options could be considered a distinct language.
By Any Other Name
A language's name 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).
- In many cases the same name has been used for several distinct languages
(e.g. Vulcan).
What's In, And What's Out?
It may also be debatable what features are to be included in the definition of a language
and what are to be regarded as external features.
- For example SML is defined in stages: a "core syntax" surrounded by a set of
standard extensions. Technically that makes it two separate languages.
- Other languages have purposely omitted essential features (like I/O) from their
definition, either 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. 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 in this list a number of commercial products
such as Visual C++. Usually these items offer non-standard extensions to the
base language. This was particularly true in the varieties of BASIC and Prolog.
One could argue that in a strict sense Microsoft C and Borland 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.