Friday, November 10, 2006

Why everyone wants to get rid of the parentheses in lisp

This post is pretty much a response to It's a good post - if you haven't read it, eli seems to say that: He's noticed a lot of people trying to use whitespace to remove most of the parens in lisp, and can't understand why. His opinion (as it seemed to me) was that removing them would be counterproductive because the parens (and their uniform syntax), which is what makes lisp so much better than everything else).

My 2c:

The case FOR s-expressions

* Uniform syntax is theoretically very appealing (from a purist point of view)

* It lets you write macros. Macros are incredibly powerful and basically awesome. I have macro-envy in most languages most of the time.

The case against s-expressions

* s-expressions are not at all like how I think about things (or how anyone else who is not a die-hard lisper thinks about things), because the lack of syntax is completely at odds with natural language.

To elaborate on that last point: Because english is my native language, that's how I think. A fair amount of the time, code which I consider "good" ends up looking (and structured) like a shorthand version of english, because that's what I find is clear and understandable.

I can write Ruby, C++ and C# and most other blub languages in such a way that maps relatively closely with how I think. In short, they 'fit my brain'. I also realise that over time my brain has adjusted to fit them as well, so I am aware that this kind of thing is probably always going to be biased towards the incumbents.


I believe that with the exception of a few idealists who hold the 'uniform syntax for purity's sake' argument above all else, pretty much everyone else is in it for the macros. To get them, I see two paths -

1) Change yourself: Do enough lisp programming, for a long enough time, and put in the effort to make your thought process (at least with respect to programming) match with s-expressions. This seems to be what all the 'hardcore' lispers have done, and the evidence seems to point towards this having a huge and amazing payoff. I'm nowhere near this goal, but this is eventually what I'm aiming for with my casual lisp programming... It is however, (like any learning) long and dare I say, hard.

2) Try and change lisp: Try and make the syntax fit better with your brain, so you (and all the other regular programmers) don't have to put in the hard yards adjusting quite so much. This is what I believe the lisp-whitespace people are aiming for.

I do find the whitespace-lisp easier to read/understand than normal lisp, and it doesn't seem to sacrifice any functionality (macros still work), so it could be a winner.

Then again, significant whitespace brings in a whole host of other problems, and makes it not so "pure", so perhaps not.

Is it a good idea? In the end, I vote for a definite "maybe" :-)


Slava Pestov said...

If you don't like Lisp syntax, don't use Lisp.

Michelle Massatelli said...

I just don't get WHY won't these people just use a light gray for the parentheses. Color syntax highlighting anyone ??

Alok Online said...

Would that be number four from JJ Wiseman's post here?

taw said...

It's not that S-expressions make macros possible. They merely make them a lot easier.

Pretty much every language has a few toy macro packages, and some languages with traditional syntax are very macro-heavy. The best example is probably Nemerle. Its syntax is very close to Java, and it is very macroful.

By macro-heavy I mean even more macros than typical Lisp code. Compile-time SQL validation and optimization, design by contract, concurrency, partial evaluation, aspect-oriented programming, all by macros.