regarding this https://erights.medium.com/the-tragedy-of-the-common-lisp-why-large-languages-explode-4e83096239b9 to be fair, C++ is a large and complex language but it keeps growing. Also Java has new features, and/or more dialects like Kotlin.
Common Lisp can grow as libraries, DSL and macros (because it is an extensible language), but its specification is stable and immutable. It is a mature and usable language, without the needing to add other things.
@hayley yes, I agree. Obviously my "without the needing to add other things" was a partial hype.
JVM now supports virtual-threads, but in CL threads are a de-facto standard and there are also DSL in CL for green/cooperative-threads and maybe it is not so hard to add something at the compiler implementation level.
Global user-specified optimizations are outside the scope of CL macro, because they can walk only local code. But you can put all the DSL inside a grouping macro, like Coalton is doing. In this way you can abuse the macros, but you can support more declarative DSL, needing a lot of analysis, and not only "stupid" code expansion.
C-like global optimizations can be supported from CL compilers, if one has a way to tell which parts of the implementation is sealed. CLOS has already an API for this, IIRC. Some commercial compilers are already doing this on normal CL code, IIRC.
OCaml added recently a very complete and powerful effect system, well integrated in the language. But the venerable conditions system of CL is good enough in a lot of cases, and still years ahead respect other mainstream PL.
@hayley ah, I found recently this #commonlisp DSL https://nikodemus.github.io/screamer/ and it supports both global compilation and interactive programming. It is doing many tricks: it redefines "defun"; it performs a code-walk on the entire loaded package; it maintains a data-structure at run-time with Screamer-compiled/managed functions and their dependencies, and so on.