This page is part of the web mail archives of SRFI 50 from before July 7th, 2015. The new archives for SRFI 50 are here. Eventually, the entire history will be moved there, including any new messages.
> From: Richard Kelsey <kelsey@xxxxxxx> > Are there any implementations of Scheme in use where > SCHEME_FALSE, SCHEME_TRUE, SCHEME_NULL, or SCHEME_UNSPECIFIC > should be freshly allocated? Or where EQ? and == are not > equivalent? (These are not rhetorical questions; I really would > like to know -- is this an existing or only potential problem > for portability?) Something about that question bugs me. If you were working on UFFI for CL I could understand that -- you have a bunch of mature and comprehensive implementations, competing with one another in some sense, and they all agree to give the users an FFI that is portable among them. In the Scheme world, I think we are not so blessed. We have mature but not comprehensive implementations; comprehensive but not mature; many specialized implementations at varying degrees of maturity; and active contemplation and activity exploring various implementation strategies. My hope for your SRFI is that it's less reactionary to what's there and more anticipatory of what's forseeable. Reviewing and commenting on specifics: Ken pointed out implementations which use heap allocated objects for constants. Copy-or-update-on-read collection strategy also throws a wrench into the naked use of == as EQ?. UNSPECIFIC is an interesting case. Certainly, at least, it is not hard to imagine wanting to freshly allocate UNSPECIFIC so that no two separately produced instances of it are EQ?. That seems to be similar to or part of where Bear is going. If UNSPECIFIC is a member of a disjoint type, regardless of whether it is freshly allocated, surely some systems will want it to be an error to test it for EQ-ness to anything: so == is not EQ? in that case. More generally, an FFI must solve two problems for _other_ values, namely, what is the interface convention for an FFI entry point that can produce a scheme value and what is the interface convention for an FFI entry point that accepts scheme values? What you propose concerning EQ? and the three or four constants is that, whatever the general rule is in the FFI, for that test and these values, there is an exception. What is the value of that irregularity? I see none. If, on the other hand, you treat EQ? like any other function and those values like any other way of getting back a scheme value from the FFI entry points, then you never have to fret over questions like those you've raised above. -t