5 ms·
The Axis Of Eval: Why I ignore Clojure
- jacquesm 16y agoWhat an interesting perspective on language development. It's funny how the biggest detractors of clojure seem to be those that should be cheering it on, the people that use LISP. Clojure is a lisp, like it or not, sure it's not common lisp or whatever other dialect you prefer, but that shouldn't matter too much. LISP used to be leading, now it is lagging and this person seems to be somehow proud of the lag. LISP is as much a way of thinking as it is a programming language and Clojure is representative of that way of thinking. The implementation details are really just that, details. So ignore clojure - and any other modern attempt at bringing LISP in to the mainstream - and decades from now you might wish that you had not, because you lost your chance at shaping the future of the language that you profess to love so much.
- lispm 16y agoWe switched from LISP to Lisp shortly after mankind killed the last dinosaurs, btw.
- jacquesm 16y agoChalk that up to the age of the stuff that I've been reading recently (LISP 1 and LISP 1.5 manuals).
- lispm 16y agoYeah, the dinosaurs were still alive, then.
- jacquesm 16y agoI figured 'go to the source' is the best way to really understand what's going on, and it's been quite the eye opener to see 'simple' lisp next to all the superstructure that has been placed on top of it since then. I'm not sure if I should recommend anybody to go the same route (since I'm still very much a FP/Lisp newbie, so my words carry little to no weight at all) but it worked well enough for me that stuff made more sense after doing that.
- lispm 16y agoSure, it makes sense if you are interested in that stuff. There is a wealth of material. More than a person can read in a lifetime. But it may be more important to hack the new stuff, otherwise you get sucked into that Lisp thing. Like me.
- mahmud 16y agoI actually have the blue book open in my pdf viewer right now. I jumped back into it after I re-read Gabriel's Design of Parallel Languages few days ago.
- ohyes 16y agoWe're detractors because we care... I like Clojure, I've used it for a number of projects. I've given money to rhickey. I think it is very promising. It has a lot of good ideas and it is very refreshing to see people tackling current issues in a dialect of lisp. It is also nice to see a lisp with market traction. That said, there are a lot of things that are 'unproven' about it. It isn't clear that shared state immutability and transactions are 'the way' to tackle concurrency. It isn't clear that Clojure's macros are really better than Common Lisp's macros. It isn't clear that we really want to be tied to the JVM/NET architecture. (Or that the concessions made to do so are reasonable... stack traces, tco). I think I could go on if I wanted to. A large number of features implemented in Clojure are still research topics... It grates me when proponents of Clojure tout it as 'a modern dialect of lisp,' implicitly asserting that other lisps are in some way decrepit, aging relics from the 80s. The truth is that Clojure is modern compared to almost ANY programming language, calling it 'a modern dialect of lisp,' while potentially true, is doing a disservice to Clojure, as well as to other lisps which are under active development.
- jacquesm 16y agoWhy is naming something 'what it is' doing it potentially a disservice? What arguments are there to say that clojure is not a modern dialect of lisp? The JVM came about pretty recently (on the LISP timescale), software transactional memory has been around for a while but afaik no mainstream lisp-like language implements it, and so on. That all says 'modern' and 'new' to me. I'm not versed enough in Lisp or clojure to make any statements about the macro issues. What bugs me about clojure is on a completely different level, all those 'x done 'in clojure'' articles that really do nothing to advance the state of the art, as though doing something 'in clojure' somehow makes it worth writing about. And then there's the 'one man show' feeling that is still very pervasive.
- lispm 16y agoTransactional memory has been provided by several of the CLOS object databases. There have been logical language extensions to Lisp which see their data as in a database with transactions (Ap5 would be an example). The JVM does not bring that much new to the Lisp world. What is new in the JVM nowadays is the concurrent GC and the JIT. Lisp runtimes prefer precompiled code. What the JVM lacks for example is easy code loading (think class loading in the JVM), instruction set optimized for Lisp and dumped images. Clojure combines STM, concurrency etc. in a clever way and with the focus on pure FP. It's not that elements of that did not exist before, but the combination in Clojure seems to be novel.
- brlewis 16y agoThere are plenty of people in the Lisp community cheering Clojure on too. Rich Hickey's talk at Boston Lisp Users had about 60 people there. Lisp has a smaller community than other languages, but it's still a big, diverse community.
- lukev 16y agoI'm glad that so many people find Common Lisp useful and practical. I just wish they realized that at this point, nobody else ever will. It's showing it's age. It's incredibly idiosyncratic. Noone new is ever going to start loving it. Clojure may only be a blip on the radar in the grand, glacial evolution of LISP, but it's really, really nice that there's a featureful, modern lisp that a 21st century developer can actually pick up, use, and enjoy.
- mahmud 16y agoHopefully, no one will read the cutest programming book since Starting Forth, Conrad Barsk's "Land of Lisp": http://www.reddit.com/r/lisp/comments/dfpmq/no_starch_press_releases_a_sample_chapter_from/ http://www.reddit.com/r/lisp/comments/dfpmq/no_starch_press_...
- lukev 16y agoIt does indeed look like a great book - but it doesn't really change the fact that Common Lisp is fragmented and dated.
- lispm 16y agoReally, LispWorks has its IDE ported to GTK+ and looks very nice under Windows, Mac OS X and Linux/FreeBSD. Got concurrency, too. I'm also looking forward to see the ARM port of Clozure CL mature with the alpha version already running on an iPad.
- lukev 16y agoBut the mere fact that you actually need to point out that it (can) have basic cross platform compatibility and concurrency is proof that it's getting dated. Modern languages assume that. And that's only in the commercial implementation.
- lispm 16y agoIf you compare the features of LispWorks or Allegro CL with Clojure you will find that Clojure has a very long way to go to match those offerings. Clojure 1.2 can't even display errors without exposing its Java nature. For a start it lacks the error handling infrastructure of Common Lisp and the tools that implementations provided on top of that. No, concurrency is also supported by free CL implementations - like CCL.
- mahmud 16y agoThe entire article rests on the false premise that Clojure is not a Lisp.
- jacquesm 16y agoYes, that jumped out right away. Really weird.
- lispm 16y agoDepends on what you define to be Lisp. If Lisp is the line of Lisp, Lisp 1.5, MacLisp, Lisp Machine Lisp to Common Lisp, then Clojure is not in that line. In Common Lisp I can run 50 year old code with relatively little change. CAR, PROG, ..., are still there. If Lisp is the larger family of widely incompatible languages like Logo, Dylan, Racket, Arc, NewLisp, then Clojure is a part of that family. But they share very little - not even the syntax. Clojure is completely incompatible to any of them - but that's true of each other.
- mahmud 16y agoYeah, I am a big-umbrella Lisper. I am confident any Lisp programmer can pick up Clojure and be productive in it within a week. Dylan, Logo, Racket .. used them all three. Arc, I use it several hundred times a day, but never wrote a line in it. Clojure, a good Lisp. NewLisp? No thanks.
- masterponomo 16y agoThe Lisp process to which the author refers is not as stately and merit-based as he implies. In Scheme, the r6rs process was very difficult and divisive, and many people voted in favor of it while very publicly holding their noses. The r7rs process, if carried out as planned, will attempt to avoid the same kind of damage and will result in two language: a sparse core language and a featureful "practical" language. That larger more featureful language will be the one that is more useful outside of language research, and it is also the one that will change more over time, shielding the core language from the need to change. Scheme purists can stick with the core. Non-purists can embrace the featureful languages such as r7rs-plus (or whatever it will be called), Racket, and Clojure. Anointing CL or Scheme (core) as the final arbiter of the value of a language feature is tantamount (bucket list item #73: use "tantamount" in a sentence; check) is OK if it works for you, but it certainly wouldn't work for a lot of working programmers.
- ohyes 16y ago[OT aside/ignore] "Anointing CL or Scheme (core) as the final arbiter of the value of a language feature is tantamount (bucket list item #73: use "tantamount" in a sentence; check) is OK if it works for you, but it certainly wouldn't work for a lot of working programmers." http://www.merriam-webster.com/dictionary/tantamount http://www.merriam-webster.com/dictionary/tantamount To check it off the bucket list, I believe that you have to use it properly. It has to be tantamount to something.
- masterponomo 16y agoSheesh. I interrupted myself with my parenthetical expression and didn't finish the tantamount thing. Worse, now I don't remember what it was tantamount to.
- pwpwp 16y agoDon't take it too seriously. It's a kinda stupid rant. (I wrote it.)
- calibraxis 16y agoThat's the fastest I've ever seen an author of such a Common Lisp rant point out that you're not supposed to take it too seriously. (By "such a rant", I mean the tradition of rants which purport to turn Common Lisp's negatives into positives, where the smugness is joyously dialled up to 11.)
- pwpwp 16y agoIt's not a CL rant.
- calibraxis 16y agoI've read your blog, so I'm aware that you don't consider it such, just as the creator of Clojure might take issue with your claim that "Clojure ignores Lisp." But it shares many family resemblances with the Common Lisp rant. For instance: * It typically subsumes Scheme, Interlisp, etc into "Lisp". (Regardless of whether, in other contexts, the author argues they're not Lisps.) * Others are dismissed as "unwashed masses", while the "so many smart people" in the Lisp community obviously thought of your new innovation and either dismissed it or had other things to do than implement it. * It purports to turn a commonly-believed negative into a positive. * Uses questionable but nuanced logic. * The author seems to at least partially believe in the rant's gist, as far as anyone can tell. I'm not necessarily arguing it's a bad thing, just a tradition that people might want to keep in mind with a dose of humor.
- nkassis 16y agoThat's because only CL can go to 11 all the other Lisp can only go to 10. Unless you defmacro 10 to be 11 EDIT: I guess I have terrible humor ;p Moving it to reddit
- hga 16y agoA very ... let me say, ahistorical rant, starting at the very beginning: "Lisp gets lexical scope right, for example, simply because we have a head start of decades over the [line out]competition[/line out] others." Case in point: LISP didn't get this right in 1958 while apparently in the same year (as I read Wikipedia) ALGOL did. This caused a lot of grief which wasn't resolved until 1983 when Common Lisp adopted Scheme's ALGOL inspired lexical scoping. And Emacs Lisp and AutoLISP (AutoCad), two very big (in terms of real world usage) Lisps are dynamically scoped. Lisp has much to be proud of, but this could easily be the single worst aspect of it historically.
- kylecordes 16y agoI am not really sure whether this is an interesting critique from a broader Lisp perspective, or a stunningly epic troll to get traffic by enraging Clojure folks. From my point of view: * Other LISPs I have tried are not very amenable to practical usage in a modern software ecosystem. Not impossible, just a difficult fit. Could this be fixed? Sure. Why hasn't it been fixed? No idea. * Clojure is a very practical LISP today, which drops very easily in to a modern software ecosystem.
- fogus 16y ago> or a stunningly epic troll to get traffic by enraging Clojure folks. You'll be forever wanting if your goal for website traffic revolves around enraging Clojurians. First of all, there are not enough of us (yet), and second we tend not to get drawn into these types of arguments. I guess we're too busy trying to build a great programming language. ;-)
- fogus 16y agoI guess the thing that annoys me more than anything about this blog is that the author often has great posts, but is a tangle of contradictions. For example, Clojure is bad because it ignore Common Lisp (nevermind that many of its features are inspired by CL). History is good and we should stop trying to create new things. The blog author is also creating a new Lisp. People should stop creating minimal Lisp implementations (history is now bad?). The more you read this blog the more these types of things pop up. However, I get the impression that often he's taking the piss and that's why I continue to read.
- prototype56 16y agoFeels like a rant. Which doesnt even point out what exactly is wrong and how could have been done right.
- shawndumas 16y agoA lot of programmers are either inapt or inept at making their own "batteries"; let's call them b-group programmers. Clojure's main draw over lisp (as I see it) is the JVM and all of the work that a-group programmers have contributed. It's lisp, with most[1] of the allure of an almost mystically powerful succinctness, but with batteries included. I contend that while batteries are, in the short term, a big help to the b-group it would be better for the programmers to look into whether or not they have what it takes to move into the a-group. One will never fail to learn a ton walking the hallowed halls of the a-group's code trying to figure out how that formerly black box does it's magic. Where I currently work, for better or worse, the micro-development manager has forbidden the use of JavaScript libraries. The net effect has been that some developers have left/been let go and the ones of us that have stayed have had to learn to roll our own. pg said it best: "Powerful libraries are a cheap way to make a new language the language du jour. (Think Rails.) They're not the critical ingredient if you're trying to make something to last; they may even hurt." [1]: no CLOS, no Tail Call Optimization, etc...
- lispm 16y agoJava-Batteries. Other people don't use Java batteries. Personally I prefer a Lisp that shows real error messages (not Java mumble mumble) and shows Lisp objects and Lisp functions in a debugger. I also prefer to have a nice Cocoa binding over a Swing binding.
- shawndumas 16y agoYes, Java-Batteries -- and all the cognitive dissonance that implies.
- jacquesm 16y ago> Where I currently work, for better or worse, the micro-development manager has forbidden the use of JavaScript libraries. The net effect has been that some developers have left/been let go and thous of us that have stayed have had to learn to roll our own. I don't think that kind of 'NIH' is very productive in the longer term but it must be a great place to work if you're encouraged to re-invent the wheel. Most places would try to avoid such a waste of resources. Maybe there would be a way to convince him of rolling your own company specific OS?
- mhd 16y agoThis article makes it seem like Lisp is in a state of continuous evolution. In which case I don't see a good enough argument why Clojure isn't part of that. Even more so, it kinda reads like there's one huge mainstream evolutionary branch of Lisp since time immemorial, and off-shoots are quickly reabsorbed into this. Never mind the multitudes of lisps and especially the constant Scheme-CL schism… I understand perfectly why fans of Common Lisp won't switch, but considering CL as the head of a constantly evolving Lisp with a capital L seems a bit silly. There's either no "Lisp", or Clojure is as much a part of it as CL is.
- lispm 16y agoThe main branch is Lisp, Lisp 1.5, MacLisp, Lisp Machine Lisp, Common Lisp. The evolution of that branch is now more in libraries and with individual implementations. It also got excellent implementations where all the low-hanging fruit is gone (Means easy improvements are no longer possible). For the community it is more difficult to improve the SBCL compiler, because it is already a substantial Lisp program. Still, if you look at the repository quite a few people add improvements to it. There is Scheme, where there is still some research and evolution going on. See the work on R7RS and implementations like Racket.
- rwl 16y ago> This article makes it seem like Lisp is in a state of continuous evolution. In which case I don't see a good enough argument why Clojure isn't part of that. That's because the author isn't saying that. The point is more like this: Clojure is a series of new mutations, and they haven't been around long enough yet to tell whether any of them will survive natural selection. We can't tell Clojure's good ideas from its merely new ideas at this stage; we have to wait for evolution to take place. That doesn't mean Clojure is doing something wrong (after all, "Everyone should be writing new Lisps!"). I think the author is just saying it's not worth getting too excited about until we know what it's doing right.
- mhd 16y agoThe problem with evolution in general is that it doesn't select the best approaches, it selects the most popular ones. So if you ignore the current 'mutations', you're basically trust that the community will "do the right thing". Which I regard as rather optimistic (as is the assumption that it always did this in the past).
- zephyrfalcon 16y agoMost of us are not Ents. We don't have decades to wait and see how a language feature "plays out". Rather, most of us have projects that we need to work on NOW, and if a language comes along with features that help us solve hard problems, it would be a good idea to take advantage of it. Who cares if "the greater Lisp community" will approve of it or not? (By the way, "Lisp community" is a bit of an oxymoron, IMHO; everyone seems to be stuck on his own island.)
- RyanMcGreal 16y agoLisp Archipelago?
- lispm 16y agoI would also not care. If people like Clojure and its Java integration? So what? More power to them. Rich and his friends are doing a good job. Still there are enough people to prefer other Lisps - enough that ten Common Lisp implementations are maintained, twenty Schemes, many versions of Logo, ...
- mfukar 16y agoIndeed, there is no Lisp community. The fragmentation was enough for me to lose interest in the language and several of its dialects (heavily influenced my switch from emacs to vim, too :(), as well as functional programming in general. I wish the Lisp crowd (?) would seriously reconsider their views on matters like this.
- lispm 16y agoSo you lost interest in Linux as well? There are probably more different Linux distributions than Lisp dialects. Which shell do you use? How about a C like language? C? Why not C++? Or D? ATS? You've decided on a scripting language? TCL? Perl? Rebol? Python? Ruby?
- jimbokun 16y agoPerl, Python and Ruby all have outstanding communities. Would you care to argue that the Lisp community is better than any of these?
- mark_l_watson 16y agoI have a perspective on this: I have been using Clojure for work over the last 5+ months but I am also setting up my laptop to finish writing a Common Lisp book while I travel over the next month. Using Clojure is definitely a nice experience and I am really excited by the future of Clojure as the infrastructure for the language evolves. However, after hacking Common Lisp for a few days, I have to say that the tools are so very good. I find myself preferring Clojure the language but prefer the tools and programming environment of Common Lisp.
- vdm 16y agoAre you talking about Emacs or non-Emacs environments, when you say you prefer Common Lisp's? I keep trying to tame Emacs enough to use it for Clojure and find I spend too much time on Emacs and not enough on Clojure, which is what motivates me in the first place.
- mark_l_watson 16y agoI use Emacs for both.
- parfe 16y agoAfter a few false starts with emacs as an IDE I finally learned it via other uses. I recommend using Emacs for a more simple task. I started reading my mail via Wanderlust (wl-beta package on debian) and using ERC to connect to freenode (Now running rcirc.) I know how irc works so my attention wasn't split too much and I was able to pick up the emacs stuff quickly. Now I've expanded it to be my python IDE.
- fauigerzigerk 16y agoWell, I'm just going to wait and see how that entire new fangled computing thingy plays out over the coming centuries. If it's any good, it will become part of evolution and our genes will use it eventually ;-)