[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
- To: address@hidden
- Subject: Re: Summary
- From: "Michael St . Hippolyte" <address@hidden>
- Date: Tue, 27 May 2003 16:25:03 -0400
- Cc: address@hidden
- In-reply-to: <20030527162338.H2609@localhost.inet>; from firstname.lastname@example.org on Tue, May 27, 2003 at 16:23:38 -0400
- References: <20030527162338.H2609@localhost.inet>
- Sender: address@hidden
On 2003.05.27 09:51 John Clements wrote:
> It seems like there are two basic attitudes here:
> Perl (and others): I love writing code! I'm having a great time! Damn the
> torpedoes, full speed ahead!
> Scheme (and others): This code is a mess! I can't write ten lines without
> introducing bugs! I need help!
I'm sure at least a few programmers in the second group are enjoying
Another way to describe it, not as witty I must admit, is that there are
two fundamental constituencies for a language, the programmer and the
program, and their needs are different. If the goal is to give the
programmer the most freedom and the widest range of features and
capabilities at any given point in the process, you get a practical and
easy-to-crank-out-a-program language like Perl. On the other hand if the
goal is to yield the most elegant, versatile and durable programs, you get
a strict language which limits the freedom of the programmer in order to
impose various formal properties on programs. Writers' languages vs.
Most languages, of course, are not at one extreme or the other. What's
interesting is that languages usually begin more on the practical side
and become more formal over time -- C to C++ to Java, Lisp to Scheme to
Haskell, Perl through its revisions. This is counterintuitive; you might
expect programming languages, like most complex systems, to go from
formally clean and structured to cluttered with ad hoc features and
exceptions as time goes by.
But it's consistent with a Darwinian view of languages: languages
reproduce, mutate, and are subject to selection pressures, and this
combination yields evolution. A language reproduces whenever a new
implementation is created. New implementations sometimes change the
language in some way or another; such changes represent mutations. New
languages generally build on existing languages, often blending
features from multiple languages into a new synthesis. Selection
pressure is provided by users. Languages gain and lose users over time;
eventually a language is superceded by its offspring, or else loses its
last user and becomes extinct.
And like bacteria, Cobol and Fortran will always be with us...
Michael St. Hippolyte