Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Clojure revolts me.

It is the most explicit to date abandonment of the age-old Lispers' Dream, which was "Lisp All The Way Down." Clojure is the antithesis of the Lisp Machine. Rather than a crystalline pyramid of comprehensible mutually-interlocking concepts, behind every Clojure primitive there lurks Black Magic. The Clojure user who is missing some routine or other will run crying to Java for help, rather than implementing the feature himself correctly - that is, as a natural part of the entire language, built on the same concepts. Clojure pisses on everything I've ever loved about Lisp. It rejects even what little consistency and intellectual rigor there is to be found in an abomination like Common Lisp.

Clojure is the False Lisp, which Reeketh of the Cube Farm.

I don't care if everybody really is more productive in Clojure than in Common Lisp. The latter is not my standard of comparison (Symbolics Genera, the state of the art, is. Or, if you want something that is distinctly inferior but is currently available on the market: Mathematica.) Clojure is the gutted corpse of a dream.

I am tired of this abomination being hailed as the future of Lisp. Users of real Lisps, such as myself, will keep hoping, dreaming, and working on systems which do not betray the original virtues of the language.



"Lisp All The Way Down."

But why is this a desirable dream? It seems to suggest no other languages or technologies have any merit, except Lisp. Unix and C are brilliant pieces of work, and Lisp's hang up of refusing to work well with them really set Lisp back. Compared to, say, Perl, Python and Ruby which really embraced Unix concepts (pipes, scripting C programs, etc.).

I happen to think the JVM is a nice piece of work, too, and I'm happy to see a Lisp that works seamlessly with it and benefits from its strengths. Cooperation and interoperability are good things.

"which Reeketh of the Cube Farm."

Cube Farm coders deserve good programming languages, too.


> Unix and C are brilliant pieces of work

I beg to differ:

http://www.art.net/~hopkins/Don/unix-haters/handbook.html

> pipes, scripting C programs, etc.

None of these things are necessary when every piece of information on your machine lives in a Lisp world image. As it should. And would, if the machines we are now using were the descendants of real computers, rather than of early-1980s children's toys.


I'm sure you saw this coming but:

http://www.jwz.org/doc/worse-is-better.html

"None of these things are necessary when every piece of information on your machine lives in a Lisp world image."

http://www.bobcongdon.net/blog/2004/06/boil-ocean.html


"Worse is Worse."

http://www.artima.com/weblogs/viewpost.jsp?thread=24807

And your last link would be applicable, save for the "ocean" actually having been "boiled" in this manner. The Lisp Machine existed. You cannot un-create it. It proves that all of the supposedly impossible or impractical pipe dreams of the Unix haters are in fact possible.


"The fact that C produced faster code, was easier to master, was easier to use in groups, and ran well on less expensive hardware were not considerations that Gabriel found important. But others did. On those metrics, the dominance of C as a programming language was an example of better is better, not worse is better."

So, C is better than Lisp, depending on your metrics.

As for the ocean, it is no longer the machine on which you are typing your program. It is all of the information, data, and code available to you on Internet. That's a lot of ocean to boil. Any Lisp needs to work well with as much of it as possible to be considered a useful language today.


> C is better than Lisp, depending on your metrics.

A camel is also a better vehicle than a truck, depending on your metrics. (Quite seriously.)


As a genuine interest, please could you clear up what is meant by "Lisp All The Way Down."? I've implemented my own Lisp interpreter in Scheme before, and I looked at the interpreter from McCarthy's original paper, but in both of these, the interpreter still required some language (albeit one with list-processing procedures) to begin with. My experience would be that there's nothing special with Lisp in this regard, just that its _really_ easy to parse, but I still hear this claim often enough - am I missing something here?

And to answer your post, I'd say that Clojure does give you what you need - it gives you the axioms, it gives you defmacro - the rest is history. All those other library functions you can think of in a more abstract sense ("George's problem"), and in the end these should be machine code no matter which HLL they were originally written in.

The Lisp way has always been very dynamic - you can change things, even when they're orbiting Mars, but Clojure is functional, you generally don't change things. So in that sense, Clojure is not a true Lisp, but only because it chooses a different set of trade-offs, and if you don't like that then its fine, but it doesn't make Clojure evil, just different.


> please could you clear up what is meant by "Lisp All The Way Down."

"Lisp All The Way Down" is when you can select any part of the system - and the full source (written in the same basic concepts as the rest of the system, including the program you are writing) of the element will pop up. Any changes you make will take effect immediately and in real time. We had this in 1985. Why can't we have it now?

> it doesn't make Clojure evil, just different

The language is being promoted as the long-awaited, Messiah-like successor to Common Lisp. That is the main source of my annoyance.


"The language is being promoted as the long-awaited, Messiah-like successor to Common Lisp."

sigh

Rich Hickey explains what he thinks are the good parts of his language, but I would hardly say he has a messianic complex about it. A lot of people (myself included) like it because it combines interesting ideas with the pragmatism of fitting into the popular Java ecosystem. Perhaps a desire to have everything converted to a single language is more indicative of messianic thinking?

Common Lisp is a wonderful language, certainly worth learning. But it somehow seems to induce a bunker mentality in its users.


Please tell me this is a parody. A programming language is a tool, not a religion.


No, a language is a way of communicating ideas, and hence, of thinking about them. (I wouldn't call English or kuchi shoga or tensor diagram notation "tools", even though they can be incredibly useful.) A programming language implementation can be used as a tool.

I think this is the core of our differences. Lisp has traditionally been used mostly as a language -- as Dijkstra put it, it "has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts". Most other programming languages have been used as tools.

Clojure looks like a perfectly competent Lisp-on-JVM (with immutability!), but I don't see it changing how I think about anything. It's thoroughly on the "tool" side of things, which understandably leads to people in the "language" camp being miffed that anybody thinks it's comparable to classic Lisps from the "language" camp.

The Lisp engine in Abuse was a tool, too, and highly productive for its uses, but at least nobody claimed it was a successor to the Lisp line.


I dislike arguments over semantics. Saying something is a tool does not mean it is not also a language. For instance, mathematics can be considered both a tool and a language.

It's true that Clojure is a programming language designed to be practical, but I fail to see why this would make it any less useful as a language for communicating ideas, or any less able to change how people think about things.

Could you provide an example of an idea that is more easily communicated in another Lisp, rather than in Clojure?


"Clojure looks like a perfectly competent Lisp-on-JVM (with immutability!), but I don't see it changing how I think about anything."

The immutability is a non-trivial change in thinking about how to write a program. You can write a program without mutation in Common Lisp, and you can mutate things in Clojure, but the greater cost of implementing mutation in Clojure means you are less likely to do so. This leads to different programs.

No, that is not as big of a change in thinking as Lisp was compared to the languages of the day when McCarthy created it. But I find it a fine addition to the family of Lisps, nonetheless.


Clearly you have never met a tool which afterwards made you regard all other supposedly similar tools as stone knives and bearskins. Perhaps this day is still in store for you.

For the sake of your career as a programmer (assuming this is your trade), you'd better hope not.


You're correct that I haven't come across such a tool. But I have also programmed in Lisp, and whilst I like it a lot, I don't consider it the pariah of programming languages as you seem to do.

What makes you believe Lisp is so superior to other classes of programming language? For instance, what makes a Lisp superior to a stack-based language like Forth or Factor?


This isn't meant to refute your argument or insult anyone I just that pariah probably doesn't mean what you think it means and you might like to know.

From Wiktionary:

   1. An outcast
   2. A demographic group, species, or community that is generally despised.
   3. Someone in exile
   4. A member of one of the oppressed social castes in India.


Dammit, what was the word I was thinking about then?

Thanks for correcting me :)


Probably paragon. Maybe pinnacle or nonpariel.


I think I might have been mixing up paragon and messiah.


> What makes you believe Lisp is so superior to other classes of programming language?

Because I feel straightjacketed whenever I cannot redefine my language on a whim in every conceivable way, or am forced to write a whit of boilerplate. (Yes, none of the existing Lisps fully meet this ideal, but nothing else comes close.)


Hold on. Why is a stack based language any less able to do that? If anything, it's closer to your ideal, as it has less inherent syntax than Lisp.

And for that matter, why do you think Clojure is so awful? It has no reader macros, true, but it does provide a more succinct way of writing hashes and vectors than most other lisps. Other than that, well, it's a Lisp.


> Why is a stack based language any less able to do that?

Having to juggle the stack at every step (i.e. FORTH) is a mental burden. It forces you to organize your thoughts in a certain - not necessarily harmful - but very specific way.

> Other than that, well, it's a Lisp

A Lisp unworthy of the name; one which encourages users to pepper their code with opaque routines which have no underlying Lispiness. A Lisp which barfs Java stack traces.


Forgive my bluntness, but I was rather hoping to peel back the emotive language and ideological rhetoric and have an objective and technical discussion.

I gauge programming languages by their effectiveness at solving practical problems. Do you believe Clojure's design makes it less effective at solving problems than other Lisps? Or are your objections to it purely ideological?


Yes, Clojure is less effective than other Lisps. And Symbolics Genera remains my standard of comparison. You cannot un-create it. The standard of comparison for a technology will always be everything previously achieved by mankind, rather than what is available on the market today.

Bu I will try to explain my real objections.

"Beauty is the first test: there is no permanent place in the world for ugly mathematics." (G. H. Hardy)

I was drawn into programming at an early age because it seemed beautiful and allowed me to run wild with creative ideas. Thus I insist on systems with a purely minimal amount of accidental complexity - so as to leave the most room in my head for the ideas I am trying to put into practice. I have zero interest in "programming as construction work" - implementing the ideas of others, or for that matter doing anything which isn't in some important sense original. Thus I want my programming environment to resemble pure mathematics, where absolutely nothing is present for which there is not an ironclad and inevitable logical reason, where everything is open to question, and the answer is never "because the drunken intern wrote it that way five years ago."

Most of the "practical problems" programmers supposedly "solve" shouldn't even exist. They are created through the idiocy of other programmers. In particular, I am talking about any situation where the output of one program requires "glue" to match the input requirements of another; or any situation where formats are converted; and many other cases. If the moronic mistakes of the past four decades were undone, most of the people who are calling themselves programmers would have to find honest work.

Screw "practicality." Programmers are the proverbial firemen who start fires when they aren't at the station-house, and gloriously put them out, hailed as heroes every time.

Clojure will never be beautiful because it promotes the use of undigestable foreign matter in Lisp code: primitives on which you cannot pop the hood to reveal more Lisp, with turtles all the way down. Its claim to the name Lisp is in an important sense fraudulent. I rest my case.


Your criticism of Clojure is based upon aesthetic ideals, then, rather than practical or technical considerations. However valid this criticism is, it's not something I have a particularly strong interest in, I'm afraid.


So aesthetics of any kind are foreign to you? Or just in relation to programming? Are you equally eager to sit down on a pile of bricks as on an Aeron?


No, but I'd rather have a fast ugly car than a slow pretty one.

I think I disagree with you on two points. I place a higher emphasis on efficiency than I do aesthetics; I want a language that allows me to do things quickly. I also have a slightly different idea of programming language beauty than you do. I like languages that have an small but expressive syntax and a concise core library. Clojure fits that definition better than any other Lisp I've found, so from my point of view, it's the most beautiful Lisp as well as the most practical.

But aesthetics are subjective, which is why I dislike arguments about them. I don't particularly care what language a library function is written in, just so long as it integrates elegantly with the language I'm working in. You might think that using external libraries is aesthetically displeasing, but that's a subjective opinion.

What I am interested in discussing are technical details about a language, as they are entirely objective. We can discuss whether a particular language produces more concise code than another, and come up with examples to prove it. I like those sorts of discussions, because even if I don't agree, I'll always come away with a better understanding of the favoured language of the other guy.

By contrast, arguments over aesthetics just seem pointless, as neither participant will learn anything or change their view.


And I thought I was an obnoxious Lisp fanatic...


Sir,

Attached is my official Smug Lisp Weenie card. I have no further use for it. Please pass it on to someone who is worthier than I am.

Regards.


This Genera stuff looks like shit. I think someone had to say it.


I fully understand you -- and I don't understand you at all.

If you got all of the revolutionary Lisp ideas, you don't have to worry about the rest -- currently I'm more or less forced to use C++ instead of CL (which is still my favorite language) -- but this doesn't prevent my mind to still 'think' in Lisp.

If you have some really revolutionary idea, and you want to break it through the history grown walls, you always need to introduce it in homeopathic manner -- but since your new idea is really, really much more ingenious than all of the previous ones, it will finally and actually replace the more limited ones.

But this takes time.

If you limit yourself to think either black or white, you will never win...




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: