Please create an account to participate in the Slashdot moderation system

 



Forgot your password?
typodupeerror

Comment: Re:Problems with R7RS (Score 1) 47

by John Cowan (#37659536) Attached to: R7RS Scheme Progress Report

Sorry for the delay in responding: ./ won't let me post from behind $EMPLOYER's firewall.

2) It's still an open issue whether we will support both implicit and explicit phasing in R7RS-large. Personally, I think that since you are not allowed to give identifiers different definitions at different phases in R6RS (as you can in Racket), implicit phasing should suffice. The R7RS extensions to R6RS library syntax make more work for implementers, but less for users. In particular:

Allowing interspersed import and export declarations make it possible to keep them next to their referents;

Cond-expand support (which has no phasing problems because the features cannot be set from Scheme) is a more general kind of configuration;

Wrapping code in begin, include, or include-ci means that it's possible to add new clauses to the library language, since it is distinct from Scheme.

3) The WG looked at several different record proposals including SRFI 9, R6RS-syntax, and a couple of others. SRFI 9 narrowly won, beating an alternate proposal that would use R6RS syntax, SRFI-9 semantics, and a different name. Those who voted for SRFI 9 emphasized backward compatibility with existing code.

4a) I've added a note to the trunk of the draft (not yet published) warning about the unexpected behavior of binding parameters to self if the converter is not idempotent. I've only used converters as checkers myself, so it hasn't come up for me.

4b) Include is only allowed at program top level, macro top level, and REPL top level, so your code is not valid R7RS. I believe that disposes of this objection.

5) I've filed a ticket for this issue; like the other outstanding tickets at this stage, it will turn into a formal comment from the public review.

7) Two implementers have been negative about the effort, one of them definitely not in a Big N for any reasonable N. The Guile and Chicken maintainers have said that R7RS is a goal for them, though of course without a schedule or firm commitment, which would be premature at this stage. Another maintainer has said the same privately. But I think you overestimate how different R7RS actually is. Modulo the library syntax itself, I expect it will be trivial to provide all the R7RS libraries on any R6RS userland, for example. (I'm going to tackle it as a proof of concept if no one else does it first.)

If you have time, please take a look at the draft itself, or at least the list of changes from R5RS at the end, and comment further on scheme-reports@scheme-reports.org.

Comment: Re:Problems with R7RS (Score 1) 47

by John Cowan (#37620832) Attached to: R7RS Scheme Progress Report

1) The WG has already voted to use "textual port" instead of "character port", but the new draft has not yet been published.

2) It is false that "all the major Schemes" have implemented R6RS libraries. The definition of "major" is subjective and subject to change, but Chicken is a major Scheme by any standard, and has not implemented them. It's true that the R7RS library format is not quite a subset of R6RS's, but adding the R7RS features to an R6RS library implementation is expected to be trivial. The main R6RS feature omitted is phasing control, which is irrelevant to R7RS-small because it only allows syntax-rules macros. R7RS-large may wind up with explicit phasing controls or not.

3) It's true that the R7RS record system is incompatible with R6RS to the extent that they both use the name "define-record-type", but by the same token R6RS was incompatible with the de facto R5RS standard implemented by almost every Scheme (and trivially implementable on R6RS systems as well). R7RS simply reverted to the de facto standard rather than accepting the committee-designed R6RS system.

4) Parameters do not have a problem with converters: some implementations have a problem with converters. In any case, the problem only surfaces if the implementation supports parameter mutation (as distinct from binding), which is outside the scope of R7RS. I do not know what you mean by saying that "include" has a problem with hygiene.

5) Since R7RS does not define exactly what normalization means, it might or might not be case-sensitive, but if it is Unicode NFC or NFD, it would not be. Implementations and users are free to add their own double-dip comparison operators.

6) "Guard" was chosen for the sake of R6RS compatibility. You can't have it both ways. In any case, there are no reserved words in Scheme (although "quote", "quasiquote", "unquote", "unquote-splicing", and "import" are problematic to redefine).

7) So far, exactly one implementer has been negative about R7RS. Others have been silent, mildly positive, or positive. It would be difficult for the WG to require features that cause problems in implementation when we have not specified any features that have not yet been implemented.

Comment: Re:Chibi-scheme is worth a look (Score 1) 47

by John Cowan (#37608400) Attached to: R7RS Scheme Progress Report

Well, both Guile and Chibi are both meant to be embedded, but in different ways. The Guile 2.0 shared library is about ten times the size of the Chibi shared library (on 32-bit Linux); on the other hand, Guile 2.0 has a compiler, whereas Chibi is a fast bytecode interpreter. In general, Chibi optimizes for space: it doesn't provide multiple versions of procedures in the SRFI 1 list library, for example. Running Chibi (perhaps with some features compiled out) on an embedded chip makes sense; Guile is aimed at desktop and perhaps server applications.

I don't think there are any substantial errors in your summary, and I appreciate the writeup. If you want to add stuff, riff through the slides, it's faster.

Comment: Re:Scheme with a bigger lib than common lisp ! (Score 2) 47

by John Cowan (#37607060) Attached to: R7RS Scheme Progress Report

Either I misspoke or someone misheard. "Environment enquiries" is a Common Lisp term for functions that return things from the environment such as wall-clock time, internal time in jiffies, the name and version of the implementation, the name of the hardware and OS the implementation is running on, the host name, the working directory, the Unix environment variables, the command-line arguments, and so on. Most of these things wound up in R7RS-small one way or another already, but I didn' t know that when I made the package list.

Brain damage is all in your head. -- Karl Lehenbauer

Working...