Wow! I feel your pain. In the past I was not saddled with any extensive Scheme system. I had full control over the minuscule dictionary of offerings. And so I preferred to impose my own thinking on the minimal subset. I did not get involved in the layers of SRFI.
But I look around today and see that Scheme has grown considerably. The folks in Texas don’t even call it Scheme any more. And you are right about the non-interoperability between versions.
My only experiences were with STk and Gambit (from U.Montreal). STk was largely interpreted, while Gambit has a pretty cool compiler.
But many years ago I was asked to speak at a conference, and I suggested talking about alternatives to Lisp. The conference board wouldn’t hear of it. And today I can hardly blame them.
So why are you using Scheme? Are you under duress? Just blink twice if so…
- DM
On Jun 18, 2024, at 02:07, Attila Lendvai attila@lendvai.name wrote:
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.
-- • attila lendvai • PGP: 963F 5D5F 45C7 DFCD 0A39 -- “If he controls your ideas he will soon control your actions, because every action is preceded by an idea.” — Silvano Arieti (1914–1981), 'The Will to Be Human'