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

Re: Record proposal



> 1. You have omitted the equivalent of MAKE-RECORD-TYPE, which creates
> a new record type.

I was really hoping to leave it out, although I understand why you feel
that it's necessary.  We'd need to add record-constructor as well, and
I assume we'd need to be more specific about the order of the field
names in a record descriptor. Or we might have make-record-type return
two values: a descriptor and a constructor.

> 2. I don't understand the following statement

>     [Rationale: With field names as unique strings rather than symbols,
>     abstraction-breaking code cannot access fields by name.  With the list
>     of field names unordered, abstraction-breaking code cannot access
>     fields by position.  This does not prevent the coding of generic
>     inspectors and the like, but it does prevent programmers from building
>     in dependencies on field names or positional values in code not within
>     the scope of the record definition.]

> Since record types are disjoint from vectors and strings (the only
> indexed data types in Scheme), I don't see how positional access could
> take place anyway.

If I know that the field named by the first <field-id> in a record
definition is the field I want to access, and the field names returned
by record-type-field-names are given in the same order as the
<field-id>s in the record definition, I can simply write:

    ((record-field-accessor
       (record-type-descriptor x)
       (car (record-type-field-names x)))
     x)

to obtain the contents of that field.  This is what I meant by
"positional access".

> In addition, again, because such record types are disjoint from any
> other types in the system, I don't see how the order of the fields
> has any relevance to the layout of the record.

You're right, the positional layout to which I implicitly referred is
the syntactic layout of <field-id>s in the record definition, not the
layout of fields in the record.

Kent