4 ms·
That problem is not limited to Lisp. As a programming language, Common Lisp is large enough and multi-paradigm enough to allow for elegant solutions to problem
by thesuperbigfrog 7y ago
That problem is not limited to Lisp.
As a programming language, Common Lisp is large enough and multi-paradigm enough to allow for elegant solutions to problems. It does require some experience with the language and some wisdom and discipline to know what pieces to select and how to best use them.
However, like all large, multi-paradigm programming languages that have been around for a while (I'm looking at you C++), programmers tend to carve out their own subsets of the language which are not always as well understood by those who come after them, particularly as the language continues to evolve and grow.
There is also the problem where programmers try to be too clever and push the language to its limits or use too many language features when a simpler solution would do. All too often we are the creators of our own problems by over-thinking, over-designing, or misusing the tools at hand.
- jcelerier 7y ago> programmers tend to carve out their own subsets of the language which are not always as well understood by those who come after them if the language is not powerful enough to allow for that people will inevitably add preprocessors, code generators, etc... to do the things they want.
- thesuperbigfrog 7y ago>> if the language is not powerful enough people will inevitably add preprocessors, code generators, etc... to do the things they want. This is definitely true and it adds to the accidental complexity of the system, usually to save programmer time or implement layers of abstraction for convenience. Common Lisp and C++ have both incorporated preprocessors and code generators through Common Lisp macros and C++ template metaprogramming and C++ preprocessor / macros. These features give the programmer metaprogramming powers, enable domain-specific language creation, implement sophisticated generics, etc. They are powerful language facilities that need to be used wisely and judiciously or they can add exponential complexity and make the system much more difficult to understand, troubleshoot, and maintain.