annealer annealer

gabriel gironda will have his revenge on seattle

Thumbs Down for Your Shitty Ivory Tower

Written on Tuesday, November 10, 2009

I recently stumbled into the land of Clojure and was subsequently shown a delightful demonstration of looking down your nose in its peak form. I haven’t seen pointless elitism on this grand a scale since… well… the last time I started poking around a language badly in need of one of those giant needles from Pulp Fiction to the chest because hardly anyone was using it for anything useful ever.

I quote, from this paragon of snobbery:

I find Clojure revolting.

It is the most explicit to date abandonment of the age-old Lispers’ Dream, “Lisp All The Way Down.” Clojure is the antithesis of the Lisp Machine. Instead of a crystalline pyramid of comprehensible mutually-interlocking concepts, behind every Clojure primitive there lurks Black Magic.

That’s great. I’m happy you find it to be the antithesis of a hardware/software platform that has been dead since the 1980s. Please write another post once you find the antithesis of the following platforms: IRIX on SGI MIPS hardware, Smalltalk on Xerox Alto hardware, NeXTSTEP on a NeXTcube. If you could also take into account the subsequent death (Mac OS X notwithstanding) of each of these platforms despite their respective amounts of technical superiority over whatever else existed at the time, that would be great too. In a follow-up post, please also explain the black magic behind generating C, JVM, or .NET bytecode in Bigloo Scheme and the contents of eval.c in MzScheme. That would be aces. Being in line with your “pure-Lisp” worldview, as they’re implementations of Scheme, resolving this apparent cognitive dissonance should be easy enough.

Continuing down this path of pompous self righteousness…

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.

Heavens no. How dare someone implement a feature in another lanGGGGGGGGG-oh-god-code-snippets

    /* network.c from MzScheme */
    # include <netinet/in.h>
    # include <netdb.h>
    # include <sys/socket.h>
    # include <fcntl.h>

isweartogodihadapointheeeeeeeee@#@@@#%%^^!

    /* strftime.c from GNU Guile */
    /* Copyright (C) 1991-1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, 2009 Free Software
       Foundation, Inc.

       NOTE: The canonical source of this file is maintained with the GNU C Library. <-- HEY LOOK AT THAT
       Bugs can be reported to bug-glibc@prep.ai.mit.edu. */
    /* SNIP */

reallyabouttogetbackontrackiprZZZZZZZZZZZZZCARRIERLOST

    /* re.c from the regexp implementation for TinyScheme */
    /* re.c */
    /* Henry Spencer's implementation of Regular Expressions,
       used for TinyScheme */
    /* Refurbished by Stephen Gildea */
    #include "regex.h"
    #include "scheme.h"

Holy shit. My mind has been blown. Three separate Scheme implementations, re-using C code and even implementing parts of the language in C? Heavens no! Please Lord, reach down from the heavens and pinch my bottom so I KNOW THAT I’M DREAMING. Hey guy, when you’re done reinventing the wheel, I have this mousetrap that needs fixing. Copious amounts of sarcasm aside, using another language for help isn’t called “running crying”, in most places it’s called “pragmatism” and, it lets you do things like “write software to solve the task at hand” rather than “write three socket implementations and a regexp library because you just LOVE shaving yaks”. If you could let the maintainers of every single Scheme implementation know they’re doing it wrong every time they drop down to C, that would be great, thanks.

Carrying on with indestructible resolve and I stiff upper lip, I bring you…

Clojure is the False Lisp, which Reeketh of the Cube Farm. A Lisp unworthy of the name; one which encourages users to pepper their code with calls to opaque routines having no underlying Lispiness. A Lisp which barfs Java stack traces. It promotes - no, mandates - the use of undigestable foreign matter in Lisp code: primitives on which you cannot pop the hood to reveal intelligible innards.

I Love The Capitalisation Here. Heh. You Peon. In Your Cube Farm. Come Back To Me When You Code In A Real Language, Newbie. Heh. I Bet You Don’t Even Know APL. Dumbass. If only Clojure were some kind of open source project with large amounts of the language implemented in Clojure itself. If only the parts that weren’t in Clojure were implemented in some kind of higher level language than C so that they were easily comprehensible by most humans (note: this is in no shape, way, or form an endorsement of Java in general). Oh shit, those all hold true? My mistake.

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 and zombie-reanimated corpse of a dream.

The cult of Good Enough which seems to pervade all of modern computing has finally chewed its way through to the Lisp community, with Clojure as the result. I am tired of this abomination being hailed as the future of Lisp. Aficionados of real Lisps, such as myself, will keep hoping, dreaming, and working on systems which do not betray the original virtues of the language.

Symbolics Genera remains the gold standard of programming systems. Though largely forgotten, it can never be un-created. My standard of comparison for any technology will always be everything previously achieved by mankind, rather than what is available on the market today.

Ok. I think I’ve spotted the core of our mutual disconnect here. I’d like to be productive in Lisp and be able to write usable and deployable software in it, whereas you want a fucking DeLorean so we can flux-capacitor our way back to 1985 and kill Bill Joy then sell a bunch of expensive Symbolics hardware. I see. I think you should start a club with some of the more hardcore (disclaimer: I fucking love Smalltalk) Smalltalk guys and you can have a collective circlejerk about how great your closed ecosystem of writing custom version control systems and deployment solutions is. In the meantime, I’ll be busy with Clojure and GNU Smalltalk and getting things done. Thanks! Send me a postcard from the ivory tower some time, I hear the view is spectacular, but the company leaves something to be desired.

My point here is this: Clojure is a young language. The last thing it needs is the Lisp-elitists stomping all over it because it doesn’t meet their standards of purity (which can only be met by running on dead hardware). Hopefully, the fact that it’s actually usable for writing every-day software will let it overcome the naysayers. You aren’t really helping further the cause of Lisp in general by scaring away newcomers with a lot of chest-thumping and quoting of the nerd version of the Reinheitsgebot. If Clojure were my first exposure to Lisp, and I read that blog post, I’d probably stay the fuck away. Not based on any technical pros/cons, but more because I’d think the Lisp community is a bunch of dicks (which it isn’t, for the most part).

blog comments powered by Disqus

Annealer, a Jekyll powered blog by Gabriel Gironda.