l...@gnu.org (Ludovic Courtès) writes: >> Why do you think the C interface should be kept internal? Most of the >> core arithmetic procedures provide public C interfaces. Why should >> exact-integer-sqrt be treated differently? > > Because: > > 1. I think we shouldn’t augment the C API unless strictly necessary,
We recently added several convenience functions that weren't strictly necessary. Do you think that was a mistake? > because the idea is to write Scheme, not C, I've been hearing this more and more lately. Of course most of us here prefer to write Scheme, but Guile's strong interoperability with C, and in particular its extensive C interfaces, has always been one of its distinguishing characteristics. For better or worse, there are many people who prefer to write the bulk of their programs in C, and to use Guile for user extensibility and perhaps also as a general purpose library for various bits of functionality contained therein. The function in question (which computes the exact floor of the square root along with the remainder, analogously to the number-theoretic division operators) is not part of the standard C library, and is not entirely trivial to implement efficiently in the general case, when bignums are included. I can easily imagine that a program might want to use this function from C. If we don't provide this interface, there will be no efficient way to access it from C. > and because of the maintenance cost. Unless we do not wish to support the R6RS, we have no choice but to maintain this function indefinitely. It is true, we could in theory eliminate the C implementation at some point in the future, but that would be rather inefficient. That is especially true since it is the basis for fixing the generic sqrt procedure to properly handle large exact integers and rationals, and to return exact results when possible as is done in Gambit. I already have a patch for that, but have not yet submitted it. > 2. This particular function is “unusual” in that it returns ‘void’ and > takes pointers to SCM. This is the same style of C interface we provide for the new set of number-theoretic division operators that return both quotient and remainder, scm_floor_divide et al. Wingo requested that this be the preferred C interface for returning multiple values, in order to avoid unnecessary heap allocation. In fact, he wisely objected to my division operator patches until I modified them to use this style of interface. Best, Mark