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.