Formal comment #90 (simplification) Record layers are not orthogonal Reported by: William D Clinger Component: records Version: 5.91 The procedural record layer (r6rs records procedural) is strictly more expressive than the syntactic layers, (r6rs records explicit) and (r6rs records implicit), because the procedural layer can create new subtypes given only a record-type-descriptor, but the two syntactic layers cannot. This is entirely appropriate, assuming the syntactic layers are provided only for convenience in simple cases, and the procedural layer is intended to be used for all complex cases. Assuming that assumption, however, the two syntactic layers could be simplified further. Since they are not intended to be fully general, they ought to be made easier to use for simple cases. Although simplification of the syntactic layers is one solution to this problem, I would suggest a more radical solution: omit both syntactic layers from the R6RS. Both could be described by a SRFI and provided by portable reference implementations that build on the procedural layer. Omitting the syntactic layers from the report would have the added benefit of permitting other syntactic alternatives on an equal footing with those described in the draft R6RS. No portability would be lost; the procedural layer would be the only universal record layer, just as in the draft R6RS. RESPONSE: For the reasons given below, the editors have decided not to simplify or drop the syntactic layers and not to generalize them to allow syntactic extension of dynamically generated record types. The syntactic layers are designed to allow expansion- or compile-time determination of record characteristics, including field offsets, so that, for example, record accesses can be be compiled efficiently to simple memory indirects. This property would be lost if the parent were not generally known until run time, so the restriction requiring that the parent be the name of a previously defined record type is well motivated and not intended as a simplification. While the syntactic layers could be simplified, particularly with respect to the constructor mechanism, significant demand for the features of the present mechanism, particularly the general construction mechanism, was expressed during the review process for SRFI 76: R6RS Records, upon which the present meechanism is based. The syntactic layers could be eliminated. Standardizing on the surface syntax will facilitate communication via code, however, and because the syntactic layers can be implemented more efficiently, they will facilitate the development of efficient portable libraries that define and use record types. Another way to solve the problem would be to eliminate the procedural layer. If this were done, the syntactic layers would become fully general in the sense that they would be able to extend any definable record type. The procedural interface remains useful, however, e.g., for writing portable interpreters and expanders, so it should be retained along with the syntactic layers.