Indeed :) Actually, my reference tried to be derisive as well. Loop is a caricature of what's IMO Lisp's original sin: the design principle that everyone should hack the syntax in every directions for every purposes. Granted, official coding policies state that macros shouldn't be created gratuitously, but lispers tend to have a pretty restrictive understanding of "gratuitousness"...
What makes loop suck are:
- its unlispy syntax: keyword-based with very little structuring parentheses. You're welcome to dislike heavily parenthesized code, but then, don't use CL: keep Lisp lispy!
- the incredible number of plug-ins that go in it. It's too easy, or at least too acceptable, to add yet another loop extension for very specific use cases.
As restated every time a syntax extension discussion occurs, syntax plasticity comes at a price in terms of modularity and reusability. Lisp chooses to bet everything on plasticity, whereas most other languages go to the other extreme with completely fixed syntax. The trend with metalua, converge, linq, template haskell, perl6 etc. is to seek a compromise between these extremes: get as much additional power as possible while minimizing the software engineering impact (I'm not implying that all of these languages/dialects will succeed in their endeavor).
There's also an alternative approach, lead by Rubyists, which consists into building DSLs with runtime semantics, but these DSLs aren't fundamentally simpler to write, learn and integrate together than static ones IMO.
-- Fabien.