The Language List - Version 2.4, January 23, 1995
Total Page:16
File Type:pdf, Size:1020Kb
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 [email protected] Started Mar 7, 1991 by Tom Rombouts <[email protected]> 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.