[comp.lang.misc] Fundamental Concepts of Programming languages

macrakis@marat.osf.fr (Stavros Macrakis) (01/10/90)

(I wrote this a week ago, but apparently there were problems with the news...)

Part of the problem of pinning down "fundamental concepts" of
programming languages is the inevitable mixture between
original motivations, internal organising principles, unusual
or salient features, innovations, new implementation techniques
....

For instance, the original motivation behind Prolog was
"programming in logic", i.e. separating the logical structure
and the control flow of a program.  The organising principle
is the uniform framework of clauses.  Backtracking control is
not original to Prolog, although it is certainly a salient
feature, and indeed experienced Prolog programmers tell me that
they try to avoid backtracking as much as possible, considering
that the real power of Prolog is unification -- which is only
practical because of highly efficient implementations.

You've also got to make the distinction between experimental or
research languages, the main point of which is to prove a point or
try something out, and production languages, which must be useful.
Successful experimental languages often evolve into production
languages, and along the way lose the narrow specificity of the
original concept.  Compare, for instance, Common Lisp to Lisp 1.5!
(And Lisp 1.5 no doubt was less "pure" already than Lisp 1.)  Lisp
1.5 hardly had the notion of data type and certainly not that of
record, both of which are fundamental to Common Lisp.  (By the
way, I would not say that dynamic scope is a fundamental concept
of any Lisp -- it is more an accident: McCarthy, by his own
account, hadn't really understood the lambda calculus....)

The other point is that you can talk about "fundamental concept"
on a variety of levels.  In the area of data types, for instance,
we can talk about the originality of individual languages or
about philosophically similar languages.  Lisp, APL, and Snobol,
although based on different specific data types, represent on some
level the same fundamental concept: a single data type with a full
library of powerful operations.  Cobol (don't forget our debt to
Cobol for the 'record' concept!) and PL/I in a simple way, and
Pascal and C in a more sophisticated way, compose type operators
to construct special-purpose types for each program.  Clu, Ada, ...
construct opaque types defined only by their operators.  And then
we have the issue(s?) of genericity and polymorphism....

The upshot of all this is that yes, there are fundamental concepts
in programming languages, but you need a whole bundle for each
language, especially production languages.

	-s