This page describes the background and motivations for my
dictionary of programming languages. It is organized something
like an FAQ list; just click on one of the questions listed below
to jump right to it.
- What does the Dictionary Hold?
-
This dictionary stores information about computer programming languages:
old ones, new ones, popular ones, and specialized ones.
The entries are stored in alphabetical order, just like a regular
dictionary. Some of the entries are little more than points to
related entries, but most of them include a short description of
the language along with some remarks about its origins and links
to resources about it on the Internet. Note that there are
many computer data formats that are not programming languages
(e.g. HTML) and these don't appear in the dictionary.
- How does it work?
-
The dictionary is maintained as a set of text files on the
CGI web server of my ISP. For any kind of query, the
general Compact Encyclopia Processor (CEP)
CGI script checks the parameters, and then generates a
web page. It generates the page from a collection of
templates, and by pulling information from the dictionary data files.
The entire program is written in
Perl,
which is a very good language for writing web CGI programs.
Of course, the CEP script is available for free, just in case you want to
set up your own web dictionary for some topic.
- How many languages are listed in the dictionary?
-
I haven't really been keeping track. The dictionary will tell you,
however. If you select the link labeled "List of Names" from that
start page, you'll get a full listing. At the bottom of the list
will be a count of entries retrieved -- this is the number of
entries in the dictionary. Of course, many of the entries are
little more than cross-references, so that's not really a fair
count.
Hopefully soon I'll add some facility for really counting the
non-empty entries to the CEP script.
- What qualifies a language to appear here?
-
This list consists of programming languages; a language must
meet all the following criteria to appear here:
- Be publicly known or described in vendor manuals or scholarly literature
- Have been implemented as a working compiler, interpreter, or
development environment. Theoretical languages don't count for this list.
- Be able to express a class of programs at least equivalent to those
expressible by a linear bounded automaton (type 1) and preferably
be able to match a Turing machine (type 0).
- Be independent of specific CPU configuration or processor brand name
(i.e. assembly and machine languages don't count for this list).
In order to help group the languages, each one is assigned to a
particular primary group or type. Many languages contain features
drawn from several language families or programming paradigms, but
I've high-handedly stuffed each one into a pigeonhole from the list
below.
Code | Type Description | Examples |
A | Application/Macro languages, extension and customization languages | VBA, Elisp |
C | Command and Scripting languages | csh, Perl |
D | Database, Report-generation, and Text-processing languages | TeX, RPG, Mumps |
F | Functional and Lambda-calculus-based languages | Lisp, ML |
L | Logical, Rule-based, and Inference-based languages | Prolog, OPS5 |
M | Mathematical, statistical, modelling, and simulation languages | Magma, SLAM |
O | Object-oriented programming languages | Java, Smalltalk |
P | Parallel, multi-programming, or distributed processing languages | CSP, Linda |
S | Block-structured 'traditional' languages | C, Pascal |
T | Threaded interpreter or stack-based languages | Forth |
It might be necessary to add more types, but I'm hoping that this set
will cover everything.
- Why isn't XXXX in the dictionary?
-
If your favorite (or least favorite) language (Visual Ty-DiBol19 or
whatever) isn't on the list, the most likely reason is that I haven't added
it yet. If it is very new, rare, or specialized, I might just never
have heard of it. Please tell me about languages that you believe should
be on the list but aren't. If you can, please supply a URL where I can
learn more about the language as part of adding it to this dictionary.
Database query languages are not on the list because, for the most
part, they don't satisfy the criteria outlined above. (For example,
standard SQL doesn't support computational constructs sufficient to
emulate a push-down automaton, much less a Turing Machine.) Database
query languages that have been extended to support computation are
candidates for the dictionary, and I'd love to hear about them.
- Can I add my favorites to the dictionary?
-
Right now, no. To help preserve consistency (and avoid
writing documentation) I'm not giving out the database update
procedures at this time. If you have a whole bunch of input
you'd like to perform for me, though, send me an email and
we'll discuss the matter :-).
- Where does the information come from?
-
The information on the languages listed in this dictionary comes
from a lot of places: my head, books, web pages, magazines, and
other programming languages lists. The other language lists I like
best are listed as links on the dictionary start page. In
particular, the
master list at U. of Geneva
is an awesome compilation.
- Why are some entries so much longer than others?
-
Ideally, all the entries would be long and detailed. Some entries are
short because I couldn't find enough information about the language
(e.g.
Coral 66),
while others are short because the language is a dialect of some other
language with a detailed entry
(e.g.
Jovial
).
A few of the entries for popular languages are short because I
haven't had time to go back and add detail to them yet.
- What if I find a mistake or a problem?
-
Please inform me right away if you find an error, omission,
typo, out-dated statement, or anything wrong with this dictionary.
You can mail to me
at home or
at work.
- What's the point of all this?
-
No point, just my little contribution to the web.
Seriously, I looked at several other programming languages lists on the
web and thought there was room for another contributor. For example,
this list will never be nearly
as comprehensive as the CUI list, but my entries have
links and code samples which the CUI list entries do not have.
- Are you qualified to write up this dictionary?
-
Probably not. I have an M.S. in computer science, and have
been working in the field since about 1985. Certainly there
are people in the programming language community that are far
better qualified than I am, and I welcome their input.
- There's too many languages? Which one is the best?
-
That's a trick question! There is no "best" programming language for
everything, although the programming community seems to reach concensus
that certain languages are extremely good for certain kinds of applications.
For example, is Lisp the best language ever? It's hard to say, but it
was and is the most popular overall for writing AI applications.
Caveats aside, the list below are some of my personal favorites, on the
basis of expressive power, influence on computing technology, and
general coolness. They are not in any particular order.
If I get enough people sending me alternative 'top-10' lists, maybe
I'll make a special page of just those.
I believe that programming languages exhibit a fascinating spectrum.
To use a cliche, a survey of programming languages will show some good,
some bad, and some ugly. The outpouring of human creativity, toil,
devotion, and folly that we can find in programming is surely one of
the wonders of the computing age. And then there are the little
coincidences... Why is
C++
ubiquitous while
Eiffel
is known mostly to small community of specialists?
Why is
Self
virtually unknown, while
Java
is a household word?
These trivia of computing history and industry can amuse and
entertain in almost any nerd-dominated social situation!
But most of all, this information is here because programming, in many
languages, has been such a big part of my life
that I just had to put something about it on my web site. Enjoy!