[R6RS] revised draft of record srfi
Sat Aug 13 13:02:23 EDT 2005
Thanks for the comments! Sorry for replying so late---I recently
started work on a new contract, and I have very little spare time
William D Clinger <will at ccs.neu.edu> writes:
> Specification of record-constructor:
> Since "the types handled specially by equal?" is open-ended,
> with nothing to prevent equal? from handling *all* non-R5RS
> types specially, the second paragraph of this spec is equivalent
> to saying that "Two records...are equal according to equal? iff
> they are eq?, provided they are not one of the exceptions to that
> rule." That's pretty silly, IMO.
I agree that the wording is silly---I'll fix that. But the intent
should be clear: I wanted to specify a list of exceptions, namely
those types explicitly mentioned in the definition of EQUAL?.
> Any two records created by such a constructor are equal
> according to equal? iff they are eq?. Furthermore any
> record <VAL>r1</VAL> satisfies (eqv? <VAL>r1</VAL> <VAL>r1</VAL>).
> This does not imply (eq? <VAL>r1</VAL> <VAL>r1</VAL>).
I don't follow this: What exactly does R1 denote in this language? An
expression? A value? I presume you mean
(let ((r1 ((record-constructor rtd) ...)))
(eq? r1 r1)
This certainly allows boxing/unboxing optimizations, but also
decreases the usefulness of records, as I can't use them
straightforwardly to generate unique values. So I'll write this up as
Moreover, I don't think tying opaqueness to EQUAL? is not a good idea
(as I posted previously---nobody replied)---I don't see the inherent
connection. What's the rationale for forcing
(record? (cons 1 2)) => #f
Moreover, what's the rationale for EQUAL? being unspecified for opaque
record types created by the user program?
> Since the record constructor for an opaque type does not return
> a record, this spec should say
> Returns a procedure that, given an object obj, returns #t
> iff obj is a value created by (record-constructor rtd).
I don't see what's wrong with the old language---could you explain?
Specifically, this language makes a closed-world assumption---there
may be other ways to create records than through procedures created by
> Specification of define-type:
> I don't know what the spec means by "create identical bindings".
> In Scheme, most bindings map identifiers to locations; is the
> requiring the same locations to be used for every evaluation of
> a local non-generative type definition? If so, then the
> non-generative definition is effectively global, and it would be
> useful to say that. This would be the first example in Scheme
> of a local binding form that creates global bindings.
No---I meant procedures that are in some sense observationally
equivalent, modulo EQ?. Do you have a suggestion on how to word this
Cheers =8-} Mike
Friede, V?lkerverst?ndigung und ?berhaupt blabla
More information about the R6RS