Live data from Hacker News

The Failure of Lisp? A Reply To Brandon Werner

danweinreb.org

31–40 of 53 posts

Re: The Failure of Lisp? A Reply To Brandon Werner

#31
post #14
post #3

Earlier quoted context omitted.

While I hear many people complaining about the "awkward" and "hard-to-read" syntax, it's rare to hear someone compliment the syntax of lisp. I am a big fan of the Lisp syntax because it's so simple and consistent - probably a relic of its roots in lambda calculus. Not having to worry about operator precedence is a huge bonus in itself - I don't know why on one hand people cling to PEMDAS, logic, assignment, etc havin…

You have an interesting point here that is not often discussed. I am pretty new to programming, which means that I'm not stuck in conventions about how code syntax is supposed to be. On this background I find lisp pretty easy exactly because the syntax is so simple. To me lisp is like chess: It's easy to grasp the basic rules, but hard to become a master.

Then Scheme is like Go. Interesting like Common Lisp, but more beautiful.

Re: The Failure of Lisp? A Reply To Brandon Werner

#32
post #22
post #8

Earlier quoted context omitted.

Lisp will have played its major part when other languages have real macro systems.

Other languages don't necessarily need 'real macro systems' Lisp does, not just because it is so hopelessly low-level (for FP), but also because once you're using s-exprs it's hard to restrain anyone from mogrifying functions. In a suitable language like Haskell where all functions are composed, using functional composition for everything instead of low-level fiddling with "statements as data" makes a shit-ton of sen…

To be honest I wasn't thinking of Haskell when I mentioned "other languages". Haskell has less need for macros for the reasons you mentioned. Lazy evaluation also makes macros unnecessary for creating your own conditionals. For eager-evaluation languages, or languages without such concise syntax for functional composition, macros fill a real need.

Re: The Failure of Lisp? A Reply To Brandon Werner

#33
post #26
post #8

Earlier quoted context omitted.

Lisp will have played its major part when other languages have real macro systems.

Macros are a double edged sword. Their advantages also drags in some disadvantages. If they were only advantageous, they would have flown into mainstream languages long ago(in the full Lisp-sense where the macro is a lisp program). But they have not. This can be due to multiple reasons: their disadvantages outweigh the advantages or that the effort of getting them into the language simply drags so many other undesira…

Macros haven't flown into mainstream languages, but they've been smuggled in through the back door. C++ templates were not intended to be as useful as they are, but now many of the most powerful C++ libraries use templates as a compile-time metalanguage. Java library developers have also discovered the advantages of the transformation of data into runtime code - except they use XML as the data medium instead of s-expressions, and they use Java reflection to translate the XML instead of using "read" to get a Lisp object.

Ruby and Javascript library authors use the metaprogramming capabilities of their respective languages in combination with XML or JSON or YAML data. Look at ruby on rails, or at jquery.

Re: The Failure of Lisp? A Reply To Brandon Werner

#34
post #3
post #2

Lisp (any lisp, be it lisp-1 or lisp-2) are currently fighting a fight on multiple fronts. From one side, each iteration of Python or Ruby gains new ground as they incorporate more and more lisp-concepts, while being "Visually friendly" (ie, with common syntax). They also have the ability to lure many more users from, say Java or C#. On the other side, you have any language with type theory governing the language des…

While I hear many people complaining about the "awkward" and "hard-to-read" syntax, it's rare to hear someone compliment the syntax of lisp. I am a big fan of the Lisp syntax because it's so simple and consistent - probably a relic of its roots in lambda calculus. Not having to worry about operator precedence is a huge bonus in itself - I don't know why on one hand people cling to PEMDAS, logic, assignment, etc havin…

I once scribbled down some Scheme on a napkin during a conversion with my sister, a non-programmer. (God knows how it came up, but anyway, it did.) She looked at it, and said two things:

1. So many parentheses!

2. You made a mistake right here.

Re: The Failure of Lisp? A Reply To Brandon Werner

#35
post #3

Earlier quoted context omitted.

While I hear many people complaining about the "awkward" and "hard-to-read" syntax, it's rare to hear someone compliment the syntax of lisp. I am a big fan of the Lisp syntax because it's so simple and consistent - probably a relic of its roots in lambda calculus. Not having to worry about operator precedence is a huge bonus in itself - I don't know why on one hand people cling to PEMDAS, logic, assignment, etc havin…

I agree. I wish ML used s-expressions. Also, you might like this presentation, "The Swine Before Perl" by Shriram Krishnamurthi (of PLT). It's a great thing to show people who wonder how you could think Lisp has a good syntax: http://www.cs.brown.edu/~sk/Publications/Talks/SwineBeforePe... (Also: SK's book is great.)

Just read the slides.

The two comparing s-expressions ("ugly, evil, and an insidious plot hatched by misbegotten academics") and XML ("a hip, cool, great new idea") I found to be particularly brilliant.

Re: The Failure of Lisp? A Reply To Brandon Werner

#36
post #25

Such a respectful reply. To judge by his writing, Weinreb is a genuinely nice man. I'm glad that he has taken on a (semi-) public role as Lisp advocate. I'm a recent (last 3 years) adopter of Common Lisp who works in it every day. To me Lisp is hardly a failure, it's a secret weapon. For example, a couple of weeks ago I had occasion to take a complex chunk of CL code and make it compile into Javascript as well (I nee…

Successful companies that use Lisp would fund open source development, and so on.

Companies like these? http://www.pchristensen.com/blog/lisp-companies/

Prominent examples being ITA developing a replacement for ASDF and Clozure developing, well, Clozure.

Re: The Failure of Lisp? A Reply To Brandon Werner

#37
post #22
post #8

Earlier quoted context omitted.

Lisp will have played its major part when other languages have real macro systems.

Other languages don't necessarily need 'real macro systems' Lisp does, not just because it is so hopelessly low-level (for FP), but also because once you're using s-exprs it's hard to restrain anyone from mogrifying functions. In a suitable language like Haskell where all functions are composed, using functional composition for everything instead of low-level fiddling with "statements as data" makes a shit-ton of sen…

How would you do this in Haskell? http://news.ycombinator.com/item?id=222189

Re: The Failure of Lisp? A Reply To Brandon Werner

#38
post #24

Earlier quoted context omitted.

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 ad…

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…

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.

Re: The Failure of Lisp? A Reply To Brandon Werner

#39
post #38
post #24

Earlier quoted context omitted.

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…

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.

Re: The Failure of Lisp? A Reply To Brandon Werner

#40
post #28

Earlier quoted context omitted.

> They force an inappropriate fundamental data type on everything, and are only of benefit if you want to fiddle with the insides of extant functions. Please explain. (And I know composition, etc. I also use Haskell and Forth.)

I think what is meant is that the list is the primary data structure for everything in lisps. Fortunately, it is not the only data structure in lisps. I dislike constructs where eg. a graph edge is built as: '(GRAPH-EDGE ) whereas in ML you would write type edge = { source: Vertex.t; target: Vertex.t } which is not a list, but an entirely different representation. In Common Lisp the representation could of course be…

Ah, I misread it as that ML "force[s] an inappropriate fundamental data type on everything", not s-expressions.
Post reply on HN