From ...
Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!skynet.be!skynet.be!news.tele.dk!small.news.tele.dk!129.240.148.23!uio.no!Norway.EU.net!not-for-mail
From: Erik Naggum
Newsgroups: comp.lang.lisp
Subject: Re: *Why* is LISP better?
Date: 05 Aug 2002 12:02:12 +0000
Organization: Naggum Software, Oslo, Norway
Lines: 147
Message-ID: <3237537732679110@naggum.no>
References:
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: oslo-nntp.eunet.no 1028548933 10276 193.71.199.50 (5 Aug 2002 12:02:13 GMT)
X-Complaints-To: abuse@KPNQwest.no
NNTP-Posting-Date: 5 Aug 2002 12:02:13 GMT
Mail-Copies-To: never
User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2
Xref: archiver1.google.com comp.lang.lisp:37273
* "Icosahedron"
| Thank you all for the various responses. Regretfully I must say that I have
| yet to see one compelling piece of evidence that lisp is better than other
| languages, C++ in particular.
If you think in C++ terms, Common Lisp barely offers you anything new.
If you think in Common Lisp, terms, C++ is horribly deficient and painful.
If you think in C terms, you can do everything you are used to in C++.
If you think in C++ terms, you find yourself horribly constrained in C.
People offer you their thoughts in a public forum, not compelling evidence to
change your mind. If you expect to convince or be convinced when you talk to
people, you will neither convince nor be convinced. You have to /think/
about what people tell you to arrive at the evidence yourself. Other people
have no obligation whatsoever to offer you the material they used to arrive
at their opinions. Many people appear to believe that their own opinions may
be held without constant scrutiny and re-evaluation, while the opinions of
others must be backed up by fact, and argued for coherently and logically.
For some reason I have yet to understand, this disparity afflicts people who
believe they are "rational" more than normal people, but you that they tend
to stick to their beliefs in the face of contradicting information or opinion
if it somehow does not satisfy as "compelling evidence", rather than /think/
about what they have heard.
When people arrive at some conclusion they express in a few words, they have
/received/ more than six and probably closer to nine orders of magnitude more
information, most of it ignored by pre-filtering because they have already
made up their mind about many things and their "receiver" is not tuned to
information that runs counter to their beliefs. The "compelling evidence",
i.e., the mass of observations most which is not consciously registered, that
"convinced" or otherwise caused them to conclude "I want to use Common Lisp"
has probably been filtered out by other people who have not (yet) reached
that conclusion. We can say something stupid like "The Truth is Out There"
and expect people to yield to "objective fact" or some disembodied "truth"
without understanding that people hear everything in the context they have
established over many years.
Contrary to what many highly conscious intellectuals believe, most of our
decisions are not made rationally or even consciously. It may be that the
Free Will that has eluded philosophers for millennia is really about what we
concentrate our attention, or focus, on, not about which choices we make once
have made that decision to focus. What some call "seeing the light", or
reaching enlightenment, appears to happen when there is a critical mass of
received information that has not been fully processed and it yields to a
pattern or spawns . Consciousness may have spontaneously emerged this way.
This discursion into cognitive philosphy was spurred by your demand that
others provide you with the massive amounts of information that somehow
constitutes the "compelling evidence" that would change your mind and cause
you to embrace Common Lisp. Nobody can even come close to provide you with
this much information if you are unwilling to do /most/ of the work yourself,
to think about what you have heard, and effectively believing people for the
sake of the argument and to see if you can find the evidence among what you
have already observed that supports their conclusions and not a whole lot
that would contradict it. Most of the arguments that have been made here
have tried to appeal to the experience you already have, to show you Common
Lisp offers something that would make what you already done simpler and
easier and more convenient. Some of the arguments clearly show you that some
of the experience to which we appeal may come only after you tentatively
accept the conclusions and arguments you are offered to be true and then to
see what follows from them. This is what constitutes /thinking/ about the
arguments you have received. You have not chosen C++ for its set of
features, or your ability to get your job done using it, or what people have
told you about it. There was no "compelling evidence" that made you choose
C++ over any other language you could have chosen at the same time, was
there? It "just happened", exactly as it "just happened" to everyone else.
The difference between C++ and Common Lisp is not that the decision to use
Common Lisp does not "just happen" like it does for every other programming
language, but that it "just happens" in the presence of much more information
about programming computers, a lot more /thinking/ about how to do it better,
how to make the life of a programmer better, how to express hard problems
easier. To a person who has just enough information to decide to go from C
to C++, there is a dearth of information to make a transition to Common Lisp.
The "compelling evidence" that caused many of the Common Lisp programmers I
know to start to use Common Lisp was a /massive/ amount of information that
had accumulated over many years. Early exposure to Lisp, without actually
using it, may have "primed" the information receptors to pay attention to the
signals that would otherwise be drown in the noise, but nonetheless, those
who have chosen Common Lisp have used a whole lot of other languages.
| It isn't the closures unfortunately. They look much like static and class
| variables in C++, or function pointers.
Well, they do if you look with C++ eyes, but static and class variables and
function pointers in C++ look nothing like closures with Common Lisp eyes.
| I like the idea behind special variables, I must admit.
Good, because this is quite important. You have seen them as more than
global variables, but many programmers never realize that they are called
"special" because of their behavior in bindings. For that matter, many
programmers from inferior languages do not understand the concept of a
binding, either. /Perhaps/ you do not understand how bindings actually work?
That would explain your failure to appreciate closures. Let me make a stab
at it. Because of closures, /functions/ in Common Lisp are like instances of
a subclass of `function´ that is created on the fly containing the captured
bindings as slots and whose instances contain the values of these slots (as
we call members in C++). This class has only one method in C++ parlance: to
call the function with the same bindings in place. In Common Lisp terms, you
could regard `funcall´ as a /generic function/ that takes a symbol (only to
call its value) or any instance of a subclass of `function´ and transfers
program control to it. This happens to be very close to how they actually
work in most implementations, but not completely, as `funcall´ and `apply´
are fundamental functions.
If you see no use for this and no difference from static or class variables,
the most probable reason is lack of experience with the kind of problems that
spawned them to begin with, for which nobody can really blame you. You are,
however, guilty of not /wanting/ to listen to the experience of others, if
you think there /can/ be no use for you. By the way, functional programming
depends on closures, so if you are able to use Ocaml or Clean, you should
have known how they work and something about their implementation.
| In short, I'm sorry I wasted the bandwidth. I think I'm going to just
| convert the ray tracer over to Scheme to see if I "get it". I'm going to use
| the PLT scheme package since it 1) supports structures, and 2) I hate the
| dual namespace for functions and variables of Lisp.
If you "hate" this property of Common Lisp, you do not understand it and you
have failed to lower your defense shields when you asked for opinions on the
language. In brief, this single aspect of your behavior on the newsgroup has
shown me that you are too narrow-minded and uncreative to figure out the
point with Common Lisp for years to come. You have indeed wasted the
bandwidth as far as yourself is concerned, but not necessarily for everybody
else. Someone out there will read this and pay attention and /think/ about
what people have said, pointing out something they had missed, reinforcing an
impression that something they had not previously regarded as important
should receive more attention. Every "round" of these discussions tend to
send a "trace signal" (as in trace metals) that may influence choices without
the person consciously aware of them. The value of replying to such a
question as yours at all is that it is done publicly, where more readers than
just you can benefit from it, both now and later.
| I guess the thing I regret most is that I wanted to be part of the
| "enlightened" club of people who "get it" as Eric S. Raymond said. I guess I
| just don't.
Enlightenment is probably antithetical to impatience.
--
Erik Naggum, Oslo, Norway
Act from reason, and failure makes you rethink and study harder.
Act from faith, and failure makes you blame someone and push harder.