| Learning lisp is enlightening, but to claim that it's that much more productive than some of the other well designed languages is a stretch. - Lisp macros are powerful, so the core of the language can be kept simple. However, many languages take an alternate approach and codify the most common programming patterns into their specification. The result is a compromise that works for the majority of cases, and better understood than custom macros. - Homoiconicity is elegant, but somewhat over rated in practice. Declaratively expressing intent does not require homoiconicity, you can do that in JSON or XML if you agree on a format. Now with lisp, code being data, you can be infinitely more expressive; but at the same time inferring intent out of complex code-as-data is essentially writing a very intelligent macro/parser. There's a cost to it. - if you're not really gathering the intent from code-as-data, there are ways to do eval() in other languages as well. - Lisp has not succeeded on a relative scale. Let's not discount that. - Compilers can optimize well known constructs better than equivalent macros in lisp. So again, learning lisp is a great idea. But there isn't a one programming paradigm that's universally better than others. |
Given that you can turn Lisp into any of those "other well designed languages", it's not a stretch at all.
> and better understood than custom macros.
What can be easier than the macros?
> but somewhat over rated in practice
True. You can build a decent meta-language without homoiconicity, all you need is a quasiquotation.
> there are ways to do eval() in other languages as well.
Eval is runtime, macros are compile-time. Huge difference.
> Compilers can optimize well known constructs better than equivalent macros in lisp.
No. Macros can optimise any way you fancy. There are no limits.
> But there isn't a one programming paradigm that's universally better than others.
A paradigm which contains all the others is exactly this.