This document discusses computer languages, with emphasis on what is available for Linux and Unix environments. Linux is a generally attractive environment for software development particularly with "novel" computer languages as there are many languages of all sorts of different styles available for Linux.
Some people have "favorite" languages, and like to bash other languages. I feel, in contrast, that every language has a place under the sun. (Possibly even INTERCAL !)
I am a believer in the notion of using a variety of computer languages. I don't think that any one given language can most conveniently express all the things that people want computers to do.
For instance:
C has the strength that it is quite ubiquitous, and has simple enough requirements for the underlying "system model" that it is useful for implementing operating systems;
Lisp offers the merits of representing both code and data as lists, providing higher order functions, and providing the ability to manipulate the representation of code at compile time via macros.
Perl allows building compact programs that quite powerfully manipulate text, and links to huge libraries of utilities.
Python brings together a somewhat "stricter" data model than Perl with a simpler syntax.
ML uses "theorem-proving" concepts to validate that the data manipulations expressed in a function validly correspond to the function's "signature," which is is helpful in verifying correctness of code.
Prolog uses backtracking and (seeming) indeterminism so that you describe answers rather than indicating how to calculate them. This is very useful when you know what answers you want, but either don't care or don't know the sequencing of how the result is to be found.
prog21: Want to Write a Compiler? Just Read These Two Papers.
Compilers and Compiler Generators - an introduction with C++
Programming Languages mini-HOWTO - A brief comparison of major programming languages for Linux and major libraries for creating graphical user interfaces (GUIs) under Linux
It seems to me that trying to briefly characterize languages to allow "quick selection of the best one" is a bit of a "fool's errand;" such an approach is unlikely to do any kind of justice to the languages.
A contest of Summer 2001 (sponsored by OCLUG ) was to write a program to find prime numbers; of various "victory metrics," the one I competed in was that of writing programs for the task in as many languages as possible. To be sure, this task showed off differences in the elegance of the use of different languages for the purpose. However, that particular problem is simple enough that it doesn't greatly exercise the expressiveness of many languages. To "prove" that Ada is "superior" to Standard ML, or vice-versa, requires taking on much more substantial challenges.
OCLUG Programming Wars contest page - September 2001
I won this contest in the cateory of "most languages," deploying a prime number sieve in Awk , Bash, BC (Unix binary calculator), C , Eiffel , CommonLisp , Modula2 , Modula3 , OCAML, Perl , Python , and Scheme .
Lisp material is in a separate article.
Java material is in a separate article.
dmoz.org - Reflective Languages
Reflective languages are ones that are designed to conveniently allow programs to manipulate themselves and other programs. Languages that are characteristic of this include members of the Lisp family, Smalltalk, Forth , and, commonly, functional languages.
Reflectivity tends to be less common with Fortran or Algol-descended languages like C or Pascal (and their many descendants); for reflectivity to be particularly usable requires that the runtime environment include a language parser along with an interpreter or compiler, and the substantial complexity of parsing these languages tends to dictate against this.
Samples of code in Many Languages...
[E-Lang] three philosophies of syntax
The most commonly used language features get their own syntax (whether they are abstract features or not). This could be called "the Perl philosophy of syntax".
The most commonly used of the abstractions get their own syntax. This could be called "the Python philosophy of syntax".
The most powerful and deepest of the abstractions get their own syntax. This could be called "the Lisp philosophy of syntax".