The myth of LISP superiority

From Slashdot Technology Story | World’s “Fastest” Small Web Server Released, Based On LISP

Re:”functional programming languages can beat C” (Score:4, Interesting)

by stonecypher (118140) <stonecypher@gma i l .com> on Monday May 25, @07:09PM (#28088725)
Homepage Journal

That you believe several books over the course of six years constitutes a resurgence, especially given the historic nature of the language, kind of goes a pretty long way towards proving my point about its nearly non-extant market share.

Don’t get me wrong, I think LISP is a wonderful language. But, let’s not do ourselves the disservice, please, of pretending that it’s been a major player since the 1960s. If you look at the list of supposedly dead languages that majorly outpace LISP in real world usage measured either as new code or maintained code (eg Delphi, Clipper, Fortran, Cobol, PL/I, Ada, Forth, ANSI Pascal, Object Pascal, ColdFusion, pre-.NET ASP, all on both metrics) you get a clearer idea of where things actually stand.

If LISP is so amazing, and if LISP has first mover advantage over anything the average programmer has ever heard of, why is it so resoundingly a bit player?

There are downsides to LISP. Lots of them. Serious ones. It hasn’t stayed this dead for 60 years because it’s the tragic forgotten child of programming; every freshman who wants to sound educated thumps it at their first opportunity, frequently without ever having written a line (which is not to call you a freshman, just to point out how not-unknown it is.)

It’s a little like SICP. If it’s been that free, that well known and that easily accessable for 20 years, how come it’s being discarded by the university that published it for curriculum, and how come its design principles are largely unseen even in the work of people who have read it?

There’s a lot to be said for academic languages and academic exercises; they open our eyes to many new approaches to problems.

But don’t kid yourself. They died for a reason. Why is it that all the supposedly awful languages and design strategies are dominant?

It’s because they work. For all their warts, for all their maintenance problems, for all the infrastructure you have to write, they work.

New practical languages are occurring which adopt many of the lessons of LISP. Ruby got a lot of LISP’s problems removed, though it’s still got a lot of problems of its own; Haskell can say the same. Erlang’s got most of those problems cleared up, and is a practical real world language for a lot of things.

But dude, if the most impressive thing you can find is the application of graph search to a complex web form with credit card processing that the typical college sophomore could throw together in about a month, I mean, I’m really not sure what to tell you. Orbitz is ridiculously slow for the amount of data it processes, its user interface is awful, it copes poorly with unexpected things like uncommon use of the browser back button, and I usually have to go to it first so that I can check everywhere else and then by the time I’m done everywhere else maybe Orbitz has finally finished its first search.

What Orbitz does that’s impressive is their ability to negotiate ticket prices. I go there because they get the bottom dollar bid. If that’s your idea of something you can hold up to show the success of LISP, I’ve got to ask you: why have you gotten down to rare occasional me-too projects as your shining beacon?

Yahoo! Stores was lisp too. (Note the past tense.)

Big whoop.

When it gets down to it, you should actually try writing something like that some time in LISP. Then try writing it in another language. It’s not really all that different. It’ll be maybe the dollar sign instead of the parentheses whose ink wears off on your keyboard, and the whatever other language you write will probably be somewhat bulkier (though if you’re working in a language like Erlang, Haskell, Mozart-Oz or Forth, it’ll be substantially shorter).

Meh. Ten extra letters to get a three line algorithm done. Trade that for real exceptions and a strong type system, and you’ve chosen C++. Trade that for the pi calculus (which is hella more expressive than the lambda, and typically completely foreign to the LISPers who preach syntax superiority) and native clustering, and you’ve chosen Erlang. Trade it for a rich browser integration and trivial forms, and you’ve chosen Rails. Trade it for integrated COMET, and you’ve chosen Dojo. Trade it for the ability to deploy on basically any hosting on earth, and you’ve chosen PHP.

People say they choose LISP for the things it lets them do, how it lets them express ideas. That’s great. I know languages like that. They’re awesome, and there are lots of them. Typically the LISPer who talks about how superior LISP is doesn’t know many (or any) other exotic languages; other languages (including other members of the LISP family tree like clojure) have long since moved past LISP in expressiveness. Even C++ offers nearly everything that LISP does at this point; other than live code tree modification through macros, which aren’t anywhere near as powerful as C++’s algorithm and container library IMO, LISP has even lost the expression gap to C++ at this point.

And I know, boo hiss, how could you ever say that, it’s C++ which is the devil’s stepchild; rah rah rah.

Prove me wrong with examples, if you’re going to do it at all.

Am I saying that there’s anything wrong with LISP? No, not at all. But when LISPers tell me how amazing their toy is and how it wouldn’t be possible in any other language, I generally have to laugh sadly to myself, because it’s almost always pretty damned straightforward in other languages too.

Yahoo! Stores could have been implemented in other languages too; that was just what Paul knew. There’s a long history in the LISP movement of confusing infamiliarity with other languages and ignorance of what other languages offer combined, along with a delusion that macros are Christ’s Only Key To Power, with a viable observation that other languages are dead in the water. This is nearly always followed by a tremendously shallow observation of some minor issues in either C++ or Java’s syntax, then a confusing grammar issue, then declaring the three languages which together account for 60%-and-growing of Ohloh’s measured development as obvious retarded backwaters.

And sure, there was a time at which science believed in the theory of Aether, too. But if you look at the numbers, there’re a hell of a lot more people pushing pseudoscience than science under the label “everyone else is dumb.”

LISP is a fine language. If it was better than every modern language, then it should have won. It’s been free and available and well known since the early 1990s, when it turned into every programmer’s masturbatory fantasy of having a secret unknown knwoledge of the mastery of true power, in very much an illuminatus-but-bragging sort of way.

And then they point to (cough) a ticket booking website and a once-dominant web store structure as proof. Because, y’know, Yahoo! Stores isn’t ridiculously weak compared to the open source PHP web stores out there (and surely with large corporate backing, the one true language would have allowed this power disparity to emerge).

The only reason it hasn’t happened to Orbitz is that setting up a national ticket broker requires major business savvy and as such isn’t reasonable for the small time entrepreneur. There isn’t a ticket broker which has anything even beginning to resemble impressive technology, but if I had to pick someone, it sure wouldn’t be them.

So, c’mon. Is orbitz and a handful of books over six years really why you believe LISP isn’t obviously a fallen hero?

LISP is dead. If you really need a LISP, move to a modern LISP such as Clojure or Scala, or a modern near-lisp like Ruby. You’ll learn a lot about what LISP had kept from you.

Even Scheme is a step forward, TBH. And Scheme’s just as dead of old age by now.

[Slashdot] [Digg] [Reddit] [del.icio.us] [Facebook] [Technorati] [Google] [StumbleUpon]

22 Responses to “The myth of LISP superiority”

  1. Sam Says:

    Scala is not a LISP. Not even close.

  2. Dan Says:

    1. How much LISP is used by others says nothing of the superiority (or inferiority) of LISP.

    2. Any person’s inability to point to an example of major use of LISP also says nothing of LISP.

    3. Whether a system can be implented in whole or in part by another language says nothing of LISP.

    4. The remaining points based on what “people say” and where you attempt to get real (i.e. “So c’mon”) don’t make any points that can be argued.

    Since you raised no arguable points about LISP’s superiority, I have to wonder what you’re trying to do here?

  3. Gabriel C Says:

    Err… Scala has nothing to do with Lisp :)
    Is more like a relative of the ML family

  4. Mark Lee Smith Says:

    I’m no huge Lisp fan, but on what planet is Scala a member of the Lisp family?

  5. xss Says:

    You measure languages by their popularity, I don’t see any value in that.

    C++ and Java certainly sustain many large projects successfully and I’m happy that there are people willing to maintain such monsters.

    If you find a decent Lisp programmer chances are that he also has experience with other “popular” languages. But try to move a .NET or Java developer to some other technology and he will need training :)

  6. johnny Says:

    You really should get a clue before sprouting this kind of bullshit.
    Makes you look like an ignorant idiot.

  7. raja_r Says:

    “Trade that for real exceptions”

    You have not used common lisp for anything.

    (And there is a difference between common lisp and lisp).

  8. k Says:

    haha. this has got to be the stupidest thing ive ever read today. I was compiling a list of rebuttal but every paragraph reeks with unfounded conclusion. Can you name one serious Lisp project YOU have created? If you want better challenges post it in comp.lang.scheme/comp.lang.lisp and enjoy defending your hand-waving tricks.

  9. Jean Vincent Says:

    How about Icon (http://www.cs.arizona.edu/icon/) and its genial progressive operators enabling expressions such as “i > j > k” ?

    It was brilliant, yet has remained completely unknown to the majority of developers. It had backtracking too, like Prolog but without the unreadability.

    Most languages syntax is based on C. Probably because it’s easier to learn for most programmers.

  10. LISP Says:

    I’m lisp and i’m here to tell you, YOU’RE STUPID !

    (btw, there is no language named LISP, you did just embarass yourself … poor you)

  11. KuzuX Says:

    “other than live code tree modification through macros, which aren’t anywhere near as powerful as C++’s algorithm and container library IMO”
    STL, compared to other standard libraries such as ruby, smalltalk, haskell and python, clearly sucks. Also, how can you compare an “algorithm and container library” with a “macro system”? It’s like, c++’s streams library is nowhere near powerful as ruby threads.
    Other than that, clojure might be a modern day lisp, but scala is nothing like lisp, it’s basically java with a slightly modified syntax and closures, definitely nowhere near lisp. Also, ruby is NOT a near-lisp, it’s definitely a modern-day smalltalk, but not lisp.

  12. Rob Says:

    Lisp is not a big player for the opposite reason the x86 architecture is so big now and Microsoft dominates te desktop. I don’t think kids like you would understand that sentence though.

  13. mark Says:

    Many things written. I only want to point out at one statement that troubles me:

    “If you really need a LISP, move to a modern LISP such as Clojure or Scala, or a modern near-lisp like Ruby.”

    Why would any of these language have anything to do with lisp now? Ruby is much more closer to perl+smalltalk (with more elegant syntax). Python isn’t included in that list but python is very popular and more readable than perl IMO.
    Scala is a java child isn’t it?

    I am not talking about the other aspects here. Just that these examples dont seem to say that there are “better” lisps. The more important question however should really be why lisp was no success the last 10 years, and if it will be relevant for the next 10 years to come.

  14. Anon Says:

    “LISP has even lost the expression gap to C++ at this point.”

    This statement completely destroys your credibility.

  15. Joseph Gutierrez Says:

    What your alluding to in your diatribe against Lisp is there is no library system to back up the power of Lisp. In all the modern languages you speak of have a powerful library system.

    C++ = algorithm and container library
    Ruby = Rails
    Dojo = COMET
    PHP = ?

    Another thing that Lisp is missing is a code management system.

  16. Blah Says:

    “LISP has even lost the expression gap to C++ at this point.”

    This statement completely destroys your credibility.

    You fail utterly. I am not sure if it is in understanding English or not so I will explain what the author is saying here. He says basically that at one time there was a huge gap in the expressivity of LISP vs C++, however over time the addition of features to C++ has made this gap much smaller. He at no time says that C++ is less expressive than LISP. He furthermore respectfully requests that anyone who takes exception with this statement provide an example to illustrate their point. You, like a pansy, have of course failed to do so. This is of course because you can’t.
    As for the rest of you the comments to this post have been very amusing. None of you have made any attempt to tackle the main point which is, “If LISP is anything more than a toy then why does no one use it?”

  17. 300baud Says:

    This could still be a good article if you kept the title and threw everything else away. I was disappointed. I would have liked to read some actual criticism.

  18. Heywood Says:

    A great and accurate article. I’m amused by the comments; obviously, the LISP community is still based on ranting rather than coding. Well, have fun gentlemen. I’m off to earn some money.

  19. okflo Says:

    Hmm, what do you mean with “LISP”? Common Lisp, or Scheme? Or Dylan? Perhaps Eurolisp? Not to forget Emacs Lisp, AutoCAD lisp and micro-lisp…. (just a hint) :)

  20. robocat Says:

    I think his *main* point is good (even if the rest is mis-informed):

    “If LISP is so amazing, and if LISP has first mover advantage over anything the average programmer has ever heard of, why is it so resoundingly a bit player?”

    That rings true to me.

  21. Michel Bagnol Says:

    Note: In this post, I use LISP as a shorthand to “Common Lisp”

    === Introduction ===
    I’m a software architect for real-time assembly machines, I’ve been through many many languages in my career, and for my company I choose languages by popularity : because I can find some developers on the job market.

    === Chapter 1: Me and LISP ===
    Yes, I choose the main stream languages for my company, but NO I do not like them more than LISP. In fact I personally prefer LISP over any other languages I’ve ever used professionally, and here is why, in a single word: Homoiconicity
    http://en.wikipedia.org/wiki/Homoiconicity

    So where do I use LISP? not at work as I said, but for research projects on evolutionary algorithms. Homoiconicity is way more powerful that .NET’s Reflection for instance, because it allows both self-examination and self-modification and is so natural in LISP syntax.

    Also LISP, by it’s syntax, allows you to extend the language in respect to the core language syntax. This allows you to extend the language in a natural manner. (please look at my programming challenge in this post).

    Do I earn money with LISP : no.
    Do I think LISP is the way programming languages should have evolve : yes.
    Do I think LISP is like quantum mechanics : yes, because some geniuses have found a revolutionary approach but it took them 4 decades to have the rest of the world understanding it’s core power.
    Do I give an advantage to joob seekers who like LISP: yes, because they’re way smarter in their resulting Java or C# architecture.

    === Chapter 2: Programming Challenge ===
    I believe that language extension is very important, and that the resulting extension should respect the language syntax.

    So, here is my challenge: Extend a mainstream language (Java, C++, C# or PHP) to have an IF working with 3 states (useful in signal processing): TRUE, UNKNOWN, FALSE
    But you must respect the core language syntax so that programmer don’t get confused. So with these mainstream language the 3 state IF call should look something like:
    if3 (my-3-state-variable) {
    //my code executed the TRUE

    } unknown {
    //my code executed the UNKNOWN

    } else {
    //my code executed the FALSE

    }

    === Chapter 3: Challenge solution in LISP ===
    Here is a standard IF call in LISP:
    (if my-boolean-variable
    ‘(print ‘true)
    ‘(print ‘false))

    Here is the 3 states IF definition in LISP (the solution):
    (defmacro if3 (test t-case nil-case ?-case)
    ‘(case ,test
    ((nil) ,nil-case)
    (? ,?-case)
    (t ,t-case)))

    here is the new IF3 call:
    (if3 my-3-state-variable
    ‘(print ‘true)
    ‘(print ‘unknown)
    ‘(print ‘false))
    You can see that it looks like the standard IF syntax, the language has been extended in respect to the original syntax.

    I’m waiting for the mainstream languages solutions for IF3… in respect to the standard IF syntax or their originating languages.

    === Chapter 4: More language extension ===
    Now, please imagine yourself extending the C# language to add the LINQ feature, how would you have performed this in C# 2.0 ??? for lispers this is strait forward (“Practical Common Lisp” Chapter 3).

    This is the reason of LISP’s longevity: user language extension.
    The price for longevity: parenthesis, okay I’ll pay!

    === Conclusion ===
    Please, do us a favour, read at least Paul Grahm’s “On Lisp” or Peter Seibel’s “Practical Common Lisp” before criticising the probably most elegant language syntax and core set of features (not libraries, just the naked language).

  22. Mario Says:

    Your document is pointless, you criticize lisp but lisp is not a programming language but a set of programming languaje.
    Please read and know well some thing before criticize it. Criticize some thing than you even confuse it name is silly.
    I can’t comment more because i do not know what dialect of lisp are you talking about please specify.

Leave a Reply