[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Scheme-reports] Comments on draft 6

Hi, folks. I've read draft-6, and here are some comments (it's
mostly editorial things).

Page 2, contents: it appears that "Alphabetic index of definitions
of concepts, keywords, and procedures" link points to page 75, not
page 77 (where the index is). This is true for both the link in the
contents, and the PDF bookmark.

Page 5, section 1.3.1: the last two paragraphs of section 1.3.1 use
the word "implementation" five times in five sentences; can this
be rewritten somehow?

Page 6, section 1.3.2: "in addition to errors signalled by situations
[...]" -- is "signalled by situation" the correct usage? Shouldn't
it be "signalled in situations"?

Page 6, section 1.3.2: what's the significance of "newly allocated"
here? This is the first time such a phrase is used in the report;
maybe a reference to another section that clarifies what it means
and why is it important will help? Index has no references to "newly"
or "allocation".

Page 6, section 1.3.3: vertical spaces between paragraphs are much
larger here than in any other place of the report; why is that?

Page 17, section 4.2.3: there are two missing ")" in the final

Page 18, section 4.2.5: how does the use of "lazy" in the example
ensures that heap is not exhausted? This is the only example of
it's usage and it's not clear what it does here, or why is it
generally needed (it's definition on page 17 does not clarify

(Don't get me wrong, I read the discussion behind SRFI 40 and 45,
but the report needs to explain what's going on).

Page 18, section 4.2.5: in the same example, what is "heap" at all?
This is the only place in the report where this word is used.

Page 23, section 5.1: "program parts other than expressions that
are present at the top level of a program can be interpreted
declaratively" -- what does it mean for program parts to be
"interpreted declaratively"? What's the difference between this,
and expressions, which are "interpreted imperatively"?

Further on page 24 (section 5.2.1) it is said that "at the top level
of a program, a definition [...] has essentially the same effect
as the assignment expression", which further increases my confusion
about what is "declarative" and what is not.

Page 24, section 5.2.1: "implementations are permitted to provide
an initial environment in which all possible variables are bound
to locations, most of which contain unspecified values" -- this
seems to contradict section 5.1, page 23, where it says "the initial
(or 'top level') environment is empty except for import".

This also does not play along with environment specifiers to eval
and load: for example section 6.2, page 51 says "[null-environment]
contains only the bindings [...]" -- in effect, an implementation
that uses the initial environment where everything is bound must
nonetheless support environments where not everything is bound.

Page 25, section 5.4: define-record-type is said to bind <name> to
"a representation of record type", but there does not seem to be
anything else you might do with it (correct?). What is the rationale
for introducing this binding? Does this mean I can't name the
constructor the same as the record type?

Page 26, section 5.5.1: library name can contain "unsigned exact
integers" -- maybe "nonnegative" instead of "unsigned"? Also, are
there limits on which integers an implementation can represent
exactly, i.e. can I be sure that 802000 is exact?

Page 27, section 5.5.1: "however a REPL should permit these actions"
(redefinitions) -- this paragraph this paragraph started talking
about top level and libraries, but then mentioned REPL. Are "top
level" and "REPL" interchangeable?

Page 27, section 5.5.1: "begin declaration takes a list of expressions
and declarations to be spliced literally" -- since library form
does not allow expressions or definitions outside of begin form,
what is being spliced, and into what?

Page 27, section 5.5.1: "the top-level expressions in a library" --
maybe this can be reworded somehow to avoid term mixture? (It is
not explained if there is such a thing as a top level in a library).

Page 28, section 5.5.2: the example on this page displays some
control characters to "clear vt100". Should I argue why such things
do not belong in this report?

Note that without clearing the screen the example's output will be
rather ugly (a constant stream of lines), so maybe a different
(preferably smaller) example of library usage can be found?

Page 31, section 6.2.2: "(/ 3 4)" expression should all be on the
same line.

Page 32, section 6.2.4: "negative zero is an inexact value written
-0.0, which is distinct (in the sense of eqv?) from 0.0" and "however
numerical comparisons treat negative zero as equal to zero" -- but
eqv? on number is defined as numerical comparison (page 29, section
6.1), so are they equal or not?

Page 32, section 6.5.2: what is the rationale for short, single,
double and long inexact numbers? Are there implementations that
distinguish those?

Page 48, section 6.10: there's a missing ")" in the string-for-each

Page 48, section 6.10: "the effect of passing no value or more than
one value [...] is unspecified" -- doesn't this contradict page 71,
where it says "programs are now explicitely permitted to pass zero
values or more than one to continuations that discard them"?

Page 50, section 6.11: "if the handler returns, an exception is
raised in the same dynamic extent as the handler" -- is the same
exception raised to another one (i.e. what is "an exception")?

Page 55, section 6.13.4: is it intentional that "system interface"
is a subchapter of "input and output"?

Page 56, section 6.13.4: does calling exit ignores dynamic-wind
guards and exception handlers?

Page 56, section 6.13.4: "[...] Scheme environments that can be
passed to eval" -- environment specifiers, not environments are
passed to eval.

Page 56, section 6.13.4: it is an error to mutate any of the strings
returned by get-environment-variables; what about the whole alist?

Page 56, section 6.13.4: what is the rationale of current-second
function, what are it's intended uses?

Page 56, section 6.13.4: what is the rationale for having current-jiffy
and jiffies-per-second functions? Why doesn't current-jiffy return
seconds directly?

Finally, in many places where a function is described the report
first says "it is an error if [...]" and only then describes what
the function does. Can we reverse this order?

Scheme-reports mailing list