[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Add preliminary versions of the R7RS libraries along with do
Taylan Ulrich Bayırlı/Kammer
Re: [PATCH] Add preliminary versions of the R7RS libraries along with documentation and tests
Sat, 11 Mar 2017 13:11:16 +0100
Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux)
Freja Nordsiek <address@hidden> writes:
> I've written preliminary versionf of all the R7RS libraries along with
> documentation and unit tests for most of the procedures I had to add
> (none for those that were re-exports/renames of existing procedures in
> Guile). Sorry for the bad timing (right before the 2.2 release).
> I was inspired by the work in the r7rs-wip branch
> (https://git.savannah.gnu.org/cgit/guile.git/log/?h=r7rs-wip). I
> figured it would be a lot of work to get that branch up to date since
> the last commit was in mid 2014, so I decided to write just the
> libraries themselves but not work on adding any of the R7RS syntax
> that hasn't already been added by others to the master branch. I wrote
> the libraries in pure scheme and did not modify any other scheme
> modules or C code to simplify inclusion (they won't have side effects
> on other modules or code). Note that I did grab Mark H Weaver's
> implementation of the load procedure/syntax. I didn't copy more code
> because I wanted to make adding this to Guile not dependent on any
> changes to the parts in C or other scheme modules (would have taken a
> long time to sort out which changes in r7rs-wip branch depend on such
> modifications and which do not).
> The tests for what I added check out and the documentation compiles to
> info and html (compiling texinfo to pdf is broken on my computer for
> all projects so I wasn't able to test that).
> Note, I was not able to make unit tests for load, include, and
> include-ci. file-error? and read-error? are not 100% reliable, and my
> implementation of the bytevector output ports is a bit of a hack job.
> Also, I did not update cond-expand or include the R7RS syntax for
> declaring libraries. Those things are still missing.
> Patch is rather large.
> Freja Nordsiek
Thanks for the amazing work! I'm quite out of the loop these days but I
think Mark was intending to rebase the r7rs-wip branch on master, after
which Guile 2.2 would have fairly complete support for R7RS syntax
including library definitions. Together with your work, it sounds like
Guile will have pretty much a complete R7RS implementation sooner or
By the way, you can get almost-complete or complete R7RS syntax support
by compiling this branch, which also adds the Kawa R7RS test suite:
(The one commit marked with "PRELIMINARY" is the reason the whole thing
hasn't been merged into stable-2.0 as far as I know.)
Let me also use this chance to advertise my R7RS SRFI implementations;
maybe they're of interest to you as well:
I became disillusioned with R7RS-large after some issues, but I think
R7RS-small is the definitive step to take after R5RS...
R6RS has many *great* features also, only not very well integrated into
the rest of the system: R6RS record types aren't compatible with SRFI-9
types, R6RS condition types aren't compatible with other exception
types, R6RS *demands* certain forms to raise an error when it might
really make sense to accept the form as an extension (e.g. the Guile
implementation of a certain R6RS procedure accepting an additional
argument or so), etc.
Maybe it's a pipe-dream but I wish Guile adopted R7RS as its basis,
adding the good R6RS features, some of the useful R7RS-large libraries,
and Guile-specific features on top of that base... /ramble