No doubt others will point this out, but Scheme pre-dated CL by nearly a decade. Much like in discussions of apes and humans, the correct way of putting it is that they had common ancestors.
yeah, but WITH-EXCEPTION-HANDLER is defined in R6RS, which is dated 2007.
and it was defined so that when the current handler is invoked, then it remains the current handler; i.e. any error in the handler leads to a recursive invocation of the same handler.
R7RS seems to have fixed it. there are some more details here:
https://practical-scheme.net/gauche/man/gauche-refe/Exceptions.html#index-wi...
it's just icing on the cake that in Guile w-e-h has a #:unwind? keyword arg (i.e. at the end of the sexp) that completely changes the flow of control (returning from the handler either returns to RAISE or to w-e-h).
compared to this the condition system in CL feels much cleaner and much better thought out. and it predates R6RS by decades of real-world experience.
I've never attempted any substantial development in Scheme, but have wondered whether I were missing anything, so Attila's observation is of interest.
another misconception i had was that there's a similar level of portability between various scheme implementations as between CLs, but it's not even comparable.
and while we are at it, the lisp-1/lisp-2 distinction (variable and function namespaces) is just something to get used to, it's easy.
Your criticisms of Scheme are certainly valid. I don’t think that WITH-EXCEPTION-HANDLER even exists in SRFI 7 or whatever it was called.
yeah, the other thing is that there are like 3 different groups of primitives for exception handling, defined by various SRFIs, RxRS, or some implementation-specific solutions. they often coexist in the same implementation, and have a confusing web of interactions in some corner cases like i mentioned above. it's often hard to even know which set of primitives are obsolete, and which is the preferred one.
And I, personally, think the biggest lacking in Scheme is the macro system. Oh I know all about the raging arguments about hygienic macrology.
yep, i admit that the argument for hygienic macros is very appealing, but i find it surprisingly hard to write my macros in scheme, even though i wrote countless non-trivial CL macros throughout the years.
in CL you'll write subtle bugs until you learn the domain. in scheme you won't write subtle bugs, but you'll struggle to formally encode what you want, even in simple cases.
but who knows, maybe i'm just too slow, or i just miss a good intro that builds up my internal model of scheme macros... i don't know hygienic macros well enough to judge whether the problem is with me, or with some accidental complexity in the model.