This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home.

Source for wiki RecordStandards version 1

author

cowan

comment


    

ipnr

98.14.172.204

name

RecordStandards

readonly

0

text

Here's a list of the features provided by different kinds of standard record systems.  The specific syntax of syntax forms and the exact API of procedures is ignored here.
  
= Glossary: =

 * A ''record constructor'' is a procedure that constructs a record of a specified type
 * A ''record accessor'' is a procedure that gets the value of a particular element of a record
 * A ''record mutator'' is a procedure that sets the value of a particular element of a record
 * A ''record predicate'' is a procedure that returns #t or #f depending on whether its argument is an instance of a given record type

 * An ''RTD'' (record-type-descriptor) is a run-time object representing a record type

 * ''Syntactic'' means record types are specified by one or more macros that bind identifiers to record types, constructors, accessors, mutators, and predicates.
 * ''Procedural'' means that record types are created by a procedure which returns an RTD, and that by applying other procedures to the RTD, constructors, accessors, mutators, and predicates are returned

 * ''Generative'' record types are unique in each definition
 * ''Non-generative'' record types have a uid (a symbol) and are identical if they share the same symbol

 * A ''natural constructor'' is a procedure whose arguments correspond to the fields of the record in the order they were specified when creating the RTD
 * A ''filtering constructor'' is a procedure whose arguments correspond to some of the fields of the record in an order which may or may not be the specification order.
 * A ''generalized constructor'' is one which applies an arbitrary procedure, called the protocol procedure, that transforms its arguments in any way desired and then calls a natural constructor.
 * A ''label constructor'' is one which maps field labels to values independent of order.

= Standards =

== (srfi 9) is syntactic.  It provides: ==
 * Distinct types
 * Opaque RTD objects
 * A single filtering constructor
 * Mutable fields
 * Immutable fields
 * Generative records
 * Top-level definitions only

== (srfi 57) is syntactic.  It extends (srfi 9) as follows: ==
 * Multiple interface inheritance
 * A label constructor
 * Record composition
 * Functional record update
 * In-place record update

== (srfi 99 records syntactic) is syntactic.  It extends (srfi 9) as follows: ==
 * Record definitions appear where other definitions appear
 * Single inheritance
 * Natural constructor
 * Auto-generated non-hygienic names

== (rnrs records syntactic 6) is syntactic.  It extends (srfi 99 syntactic) as follows: ==
 * Generalized constructor
 * Sealed RTDs from which other RTDs cannot inherit (optional in SRFI-99)
 * Opaque RTDs that create records that don't satisfy RECORD? (optional in SRFI-99)
 * Non-generative RTDs (optional in SRFI-99)

== (rnrs records procedural 6) is procedural.  It extends (srfi 99 records syntactic) as follows: ==
 * RTDs have names (symbols)
 * Procedure to create an RTD
 * Procedure to create natural and filtering constructors from an RTD
 * Procedure to create predicates from an RTD
 * Procedure to create accessors and mutators from an RTD and a field name

== (srfi 99 records inspection) is procedural.  It provides the following: ==
 * Predicate that returns #t on any record
 * Procedure to extract RTD from a record
 * Procedures to access name, parent, field names, inherited field names from an RTD

== (rnrs records procedural 6) is procedural.  It extends (rnrs records syntactic 6) as follows: ==
 * Procedure to create an RTD
 * Procedure to create a constructor-descriptor (which can then create a constructor) for natural and generalized constructors from an RTD
 * Procedure to create predicates from an RTD
 * Procedure to create accessors and mutators from an RTD and a field index (doesn't work for inherited fields)

== (rnrs records inspection 6) is procedural.  It extends (srfi 99 records inspection) as follows: ==
 * Procedures to extract sealedness, opaqueness, and nongenerative id from an RTD; these are optional in SRFI-99


Eventually there should be a companion page for native record systems provided by individual Schemes.

time

2010-03-09 15:32:40

version

1