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

Clarity and unambiguity aren't necessarily the same things. The human brain can handle huge amounts of ambiguity, and our spoken languages reflect this. A programming language is meant to be a bridge between our ambiguous thoughts and the unambiguous calculations of a computer. S-expressions constrain the format of the programmer's dialog with the computer, making it simple and monotonic. For some people this will add a new level of clarity to their work, but for other people it will just limit what they can easily express in code.

High-level languages like Ruby may contain lossy abstractions that obscure the low-level workings of the machine, but Lisp is another lossy abstraction that has the potential to obscure the high-level, abstruse workings of our own minds. Both of these abstractions can be valuable, but neither is without its shortcomings.



Bravo! People tend to boggle when I decry Lisp as being hopelessly low-level.

Sometimes ambiguity can be free, allowing indifference to how the machine works, without obscuring it at all. A good example is classical Hindley-Milner type inference (the algorithm that adds type annotations to plain System F code): it is fairly easy to construct oddball statements where annotating the types is undecidable or would cause resource exhaustion. But it turns out that for the known examples, it would be either impossible to decide the types in any form, or it would take O(c^n) bytes to enumerate the annotations.

So effectively there is no downside to the ambiguity -- the ambiguous statements are already infeasible for other reasons. Everybody Wins!


People tend to boggle when I decry Lisp as being hopelessly low-level.

Intriguing. I'm not really convinced by your example though. In the spirit of conciseness is power[1], can you provide a short program that should be formally expressible in a good enough language, but isn't concisely in Lisp?

Or maybe your definition of low-level is different from mine?

[1] That's the PG version, of course.


I don't buy that concision is power. This borders on a tautology, but expressiveness is power. Concision is part of that (a big part, even), but it's not everything.

My only problem with Lisp is that it's exactly the sum of its parts - no more, no less. Everything decomposes into self-similar pieces, which decompose into other pieces, and on and on, turtles almost all the way down. This is wonderfully elegant, but also feels like it precludes creating something which is more than the sum of its parts. This may not seem like a problem to a lot of people, or just sound like self-important nonsense, but the thing I enjoy most about programming is the tangible sense of gestalt you get when you've been working on a codebase for long enough. For me, Lisp doesn't provide that.


I'd like to understand what you mean. Is there a way you could provide an illustrative example?


>I don't buy that concision is power. This borders on a tautology, but expressiveness is power. Concision is part of that (a big part, even), but it's not everything.

Yeah, I completely agree. I was going to write about it, but then figured it wasn't relevant to the question.

I'd love to discuss these old PG essays one day.




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

Search: