I have spent a reasonable amount of time using both Lisp and C++. They both have advantages and disadvantages out of the box. Lisp lacks much of the powerful functionality provided by the STL, and the countless libraries. C++ is much wordier than Lisp. Lisp comes with inherent support for Lambda functions, and most things are functional: operations return new values rather than modifying existing values.
However, I have come to the conclusion that the areas where Lisp provides a significant practical advantage are few and far between. With a little work you can do most of the things you can do in lisp in C++, and then still have the power to harness STL and other libraries, within a framework of a more common language like C++. A recent C/C++ Users Journal showed a reasonably simple way to add lambda functions to C++. And it's a pretty simple task to rewrite STL algorithms to work on and return containers and values rather than iterators, which I did a long time ago because I find excessive use of iterators in my code as being ugly and making things harder to follow. C++ can be modified too

The main thing touted as Lisp's superiority is the use of macros to extend the language. However, unless you are working on a project that requires a bottom-up approach with little knowledge of what the upper tiers might look like, this is not a great advantage in itself, as you can get C++ to do most of these things with macros and templates, just a bit differently. Maybe the difference will be that things like SQL will need to be enclosed in quotes and passed to a macro or function rather than used as a natural extension of the language. I don't see that as much of an issue from a practical standpoint.
It is true that harnessing the power of Lisp requires more critical thinking than many languages, but a team of all critical thinkers can work equally well in C++ or other languages.
I don't knock Lisp, I think Lisp is nice, but the notion that it's not as widespread mainly because you have to be smarter to use it is pretty shaky. Requiring more gray matter does not make something better.
It all boils down to your preferences, what you use it for, and who you are using it with. If your coworkers are more experienced in Lisp than C++, then that would probably be a good reason to use Lisp. If you are all equally experienced in Lisp and C++, I fail to see how Lisp would be a better choice for a particular problem.
quote:
I'm talking about *creating* language extensions that you wouldn't even dream of when thinking within the tiny box of a rigid macroless language. Creating stuff those languages don't offer, to suit your specific needs.
A good example of this would probably answer the original authors question, as well as mine. What would be a language extension that you could create in Lisp that you wouldnt even dream of doing in C++?
Peace
[edited by - krippy2k on February 19, 2004 9:13:44 AM]