[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Request for feedback on SRFI-126
Taylan Ulrich Bayırlı/Kammer
Re: Request for feedback on SRFI-126
Thu, 01 Oct 2015 00:33:26 +0200
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)
Mark H Weaver <address@hidden> writes:
> address@hidden (Taylan Ulrich "Bayırlı/Kammer") writes:
>> I've made pretty fine experiences with R7RS-small so far,
>> and after seeing people's disdain towards R7RS-large's direction and
>> agreeing with them (although I wouldn't trust my own judgment alone),
>> I've decided to try pushing R7RS-large in a somewhat better direction.
>> The benefit for Guile? I shortly summed up my thoughts on that in the
>> FOSDEM thread on the Guix ML; here the mail from the archives:
>> Perhaps a better summary: better Scheme standards -> more libraries that
>> work on any implementation -> more total Scheme users & more free-flow
>> of users between implementations -> more potential for growth of the
>> Guile community. Not to mention simply more libraries Guile users can
>> use, from the pool of standard-Scheme libraries, without needing a Guile
>> porter and maintainer for every possible Scheme library.
> I agree that standardization would be helpful, but we already have a
> fine standard in R6RS. It's not perfect, but IMO it's a more promising
> platform than R7RS, which is so gratuitously incompatible with R6RS that
> it's not possible to write even the simplest library or program that
> works with both (wtf?).
While that might have been a dumb decision on the side of R7RS, at least
converting an R6RS library to an R7RS library is usually trivial; one
only needs to change the library boilerplate. (As long as an R6RS +
R7RS implementation allows importing (rnrs *) libraries with the R7RS
But I suppose one desires a library that works with both unchanged, so
as to keep working with R6RS-only implementations. If R6RS had
'include', one could have an R6RS and an R7RS library using the same
body of code, so that goal would be fulfilled. Sadly R6RS doesn't have
'include'. (And it can't really be implemented with syntax-case as
advertised, since there's insufficient control over the filesystem.)
I'm not sure how important that is though, since most implementations
seem to be taking the R7RS path. From what I know, Guile and Racket are
the only remaining popular Scheme implementations that support R6RS
libraries but not R7RS. Racketeers apparently discourage using R6RS
anyway, preferring the racket language, and if there were demand they
could probably implement R7RS quickly.
I also see other shortcomings in R6RS in addition to the lack of
'include'. There is no 'cond-expand', which further makes it hard to
write portable code. It also came to my attention that Guile's R6RS
records API does not recognize SRFI-9 records. (I don't know if that
can easily be fixed.) All in all R6RS feels like a "dead end", as
William Clinger also suggests(*), whereas R7RS generally integrates very
well with the underlying implementation and seems to address the goal of
writing portable programs more pragmatically. In my bytestructures
library I ultimately dropped R6RS support, because it just wouldn't play
For these reasons, I think it would be best if we could support R7RS
too, and programmers gradually converted their R6RS libraries and
programs to R7RS (which is fairly trivial as long as an R6RS + R7RS
implementation allows importing R6RS libraries from R7RS).
(By the way, regardless of the issues above, I like many aspects of the
R6RS and will do my best to get them into R7RS. I would claim that my
negative experiences with R6RS were not influenced by bias; I genuinely
tried to make the R6RS wrapper for bytestructures work, and failed.)
On another note, there is also the Larceny project of implementing R6RS
libraries in R7RS, making some R6RS programs easy to port even to
R7RS-only systems that lack native (rnrs *) libraries:
> One might well argue that having two competing and incompatible
> standards is *worse* for standardization than having just one, hence my
> reluctance to support R7RS.
> In response to the argument that R6RS is a failure because so many
> Scheme implementations rejected it: R6RS already has more high-quality
> implementations than C++, Python, or Ruby. Having 10+ implementations
> of the same language doesn't seem to be a requirement for a language to
> be successful.
Well, I don't see any coordination between R6RS implementations to
define more useful libraries (like sockets, delimited continuations, or
an FFI), and don't see any future updates to R6RS itself happening. All
in all, I'm not sure if I will ever be able to write something arguably
basic like e.g. a small HTTP server in R6RS.
I wouldn't call it a "failure" because I see it as a good resource for
some purposes, but I could say I see it as a "dead" language. I can't
do many useful things with it.
> In response to the argument that we should engage more in the R7RS-large
> process to help move it in a better direction: I wasted a ridiculous
> amount of time trying to get some R6RS numerics fixes into R7RS-small,
> and was stonewalled the whole way. I have neither the time nor the
> interest in repeating that experience.
> More to the point, I have no confidence that the decision making
> processes in R7RS-large will result in a well-designed standard.
> I agree with Andy Wingo's comments here:
Indeed, I understand your frustration, and wouldn't expect you and Andy
to spend any more time and nerves on the R7RS discussion lists. I would
still appreciate some quick reviews of SRFIs I will be writing, but I
also understand if you see that too as a waste of time so no hard
feelings if you say no.
> Anyway, having said all this, I very much appreciate your sincere
> efforts to help the Scheme and Guile communities, Taylan.
Thanks for the kind words. :-)
I'm not sure if anything I said affected your opinion, I hope it wasn't
just a waste of time.