John Stracke. (I've been staying pseudonymous, but today I mentioned Adder, which is tied to my real identity.)
Common Lisp does have strong typing.
True. I need to remember to be more precise; "doesn't have strong typing" just means "doesn't have type feature Blub". Common Lisp has runtime type safety, and type hints for efficiency; what it does not have is the pervasive typing that I'm used to from C++, which has a separate set of benefits. The most obvious is that, in C++, I can change the interface to a class and be certain that the compiler will catch any caller that uses it incorrectly. (Although I suppose it may be possible to do something like that with CLOS. I haven't used much CLOS, since ITA avoids it.)
There is controversy over whether we can find a way to have the benefits of both static and dynamic typing in the same language.
I'd say that type inference already brings us nearly there: the convenience of dynamic typing, with the rigor of static typing.
I may be wrong, though; I've used ML and Haskell, but not enough to really feel where the pain points of type inference are.
That might be less precise, but more correct :-P.
"Common Lisp has runtime type safety, and type hints for efficiency; what it does not have is the pervasive typing that I'm used to from C++, which has a separate set of benefits. "
The type declarations aren't just for efficiency (although they are frequently (ab)used for it).
"The most obvious is that, in C++, I can change the interface to a class and be certain that the compiler will catch any caller that uses it incorrectly."
I'm not sure what common lisp version you use, but wouldn't this be fixed by simply declaring types of everything? You can declare the types of on the slots of a struct, you can declare the types of arguments to functions, results of functions, variables, slots of objects, contents of sequences... (having trouble thinking of something you can't declare types on, maybe a hashtable? Although you could wrap the accessors in a function).
Then SBCL (at least) yells at you when you go to recompile the project.
Yes, but I'm not so sure about the "simply". It's only marginally easier in C++; but at least you know that haven't forgotten to declare anything.
Interesting. Is it for performance reasons?