From: SWM@stony-brook.scrc.symbolics.com (Scott McKay)
Subject: Re: Why Isn't Lisp a Mainstream Language?
X-Unparseable-Date: Fri
Organization: LCS news/mail gateway
Date: Fri, 22 Jan 1993 16:44:03 GMT

    Date: Thu, 21 Jan 1993 18:06 EST
    From: Larry Wall <lwall@netlabs.com>

    In article <19930120191159.1.SWM@SUMMER.SCRC.Symbolics.COM> SWM@stony-brook.scrc.symbolics.com (Scott McKay) writes:
    : I cannot decide if your analogies are false since I cannot make heads
    : or tails of them.

    You should try to make CARs and CDRs of them instead.

I personally think CAR and CDR could have been flushed from the
language, since FIRST and REST do the exact same thing.  Note, by the
way, that you have picked one of the very few things retained in Common
Lisp for historical purposes.

    : In what way is Lisp "bland ... all the way through"?

    There's little visual distinctiveness to distinguish mentally
    distinctive constructs.

This is simply not a valid criticism.  There is little visual
distinctiveness in English to distinguish mentally distinctive
constructs, and yet you do not fault English.  In fact, one could argue
that "visual distinctiveness" is a principally a matter of typography.

    : How does Lisp's expressiveness (which I believe measures "easy to say
    : and understand") "[get] a big yawn"?  Is it because Lisp is so expressive,
    : that it is boring?

    No, I'm saying that Lisp is only expressive by one rather cerebral kind
    of measurement, which neglects many human factors related to how we
    think, perceive and talk.  And that this is the primary reason people
    avoid Lisp.

This is still a handwave.  You might be right that it is "easy to say
and understand" things in other languages, but I can equally well claim
(with support from others) that it's "easy to say and understand" things
in Lisp as well.  And unlike in most other languages, if something
becomes cumbersome to say in Lisp, you can write a macro to make it easy
to say again.  Since Lisp is it's own meta-language (this is what many
people erroneously refer to as "Lisp not having any syntax"), Lisp
macros are a natural thing for people to write and use.  It would be
wonderful if other languages did as well, but since a truly powerful
macro facility has to, in effect, operate on the syntax tree for a
language form, things get harder.

I really think that the burden is still on you to define what you mean
by "expressiveness", and then show how your pet languages meet these
criteria, and how how Lisp does not.

    : Are you saying that most other languages, because they are so
    : horrible and so inexpressive, are not boring because they elicit anger
    : and frustration, whereas Lisp does not elicit those emotions?

    I don't believe that the absence of boredom implies the presence of
    anger and frustration.  All these states of being are in opposition to
    creative excitement.

Yes.  Boredom, anger, and frustration are all in opposition to creative
excitement.  But you didn't answer the question.  I personally get my
creative excitement from trying to solve new problems, not from
successfully cajoling a language into doing what I want it to do.

    : Are you saying that you think that the true challenge in programming
    : is the actual struggling with the language, rather than the addressing
    : the deeper issues (such as, what it is you are trying to do)?

    I haven't noticed people struggling that much less with Lisp than with
    most other languages.  Admittedly, nroff is a bit tougher, unless
    you're just trying to do text processing...  :-)

Perhaps it is the sort of software I do, but I emphatically do notice
people struggling more with most other languages than with Lisp.  Let's
look at memory management, for instance.  In most other languages, such
as C, programmers must confront the issue of memory management head on,
right away, even if they don't want to do memory management.  I'm
willing to simply concede the point that, with a little practice,
"anybody" can write working memory management in C (although not without
first pointing out that, in the past year I've read two papers claiming
that around 40% of a C programmer's time is spent chasing dangling
poiinters and storage leaks).  The point is that, in most other
languages, programmers must immediately tackle programming tasks that
are only incidentally related to the problem at hand.

    : In what way does Lisp "push down so hard" on morphology?

    One form to rule them all,
    One form to find them,
    One form to bring them all
    And in the darkness bind them.
    In the land of machinery, where the symbols lie.

    Essentially, Lisp assumes that humans like to write programs the same
    way the machines like to execute them, and so conflates the human
    representation with the machine representation.  True, there are Lisp
    compilers, but the "ideal" is still that the machine and the programmer
    are interpreting the exact, same, one-size-fits-all data structure.

I fail to see that Lisp makes any such assumption.  What machines
directly execute mapping operators?  Reduction operators?  What machines
directly execute generic arithmetic, including integers, large integers,
floating point, and ratios?  Hash tables?  Sequences and collections?
This claim just cannot be made to stick.

If I didn't know better, I would be sure that you are talking about C/C++.

I also think you have confused what you call "machine representation"
with "parsed representation".  The fact that the human-readable
representation is the same as the basic parsed representation is one of
the great sources of Lisp's power -- it allows Lisp programs to
effortlessly talk about Lisp programs.

Perhaps you think that Lisp's "one-size-fits-all data structure" is the
list, but that reflects a circa-1972 bias for the language (or maybe
even earlier).

    : Where's the "tar pit", and what languages do better?  (I can think of
    : some languages that do better in some areas, but none that, taken as a
    : whole, do better for most purposes).

    That's precisely the point.  "Beware the Turing Tarpit, where
    everything is possible, and nothing is easy."

I'll consider myself warned, and avoid Algol-68 as much as possible.

    That said, I should back off a little and admit that there are a few
    things that are easier in Lisp than in other languages.  But your
    assumption seems to be that it's better to use an all-around mediocre
    language for most everything than to use each language for what it does
    best.  I'm just pointing out the obvious fact that most people disagree
    with that assumption nowadays, and that I suspect that this is the
    answer to the question posed in the subject line of this thread.

I don't claim that Lisp is an all-around mediocre language.  It's an
all-around excellent language.  Sure, there are some languages that have
a few features that are better than what I can find in Lisp, but so
what?  If you just want to do rule-chaining and nothing else, by all
means use Prolog.  If you are writing an interrupt handler for a device,
why not use C or Bliss?  If you are doing program proofs, use ML or
Haskell.  And why not use Fortran for some scientific hacking?  But for
general programming, I'll take Lisp nearly every time.  Moral: use the
right tool for the job.

So while you may be pointing out an obvious fact that people don't want
to use an all-around mediocre language, you are just tilting at a windmill,
since I made no such assumption.

    : I can't even decide if you are serious or not.  I guess that all of
    : your handwaving means that you must be making a joke.  In that case,
    : I guess I am too dense to get the joke.

    Never assume, just because I'm making a joke, that I'm not also quite serious.

What makes me sad is that I know you're serious, and yet you have
entirely missed the real issues about why Lisp isn't a mainstream
language.  Other messages (e.g., Pete Halverson's) under the same
subject have started to touch on the real issues.