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 6

author

medernac

comment


    

ipnr

134.158.120.90

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 calling conventions 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

== Features: ==

 * [SyntacticRecords ''Syntactic''] means record types are specified by one or more macros that bind identifiers to record types, constructors, accessors, mutators, and predicates.
 * [ProceduralRecords ''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

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

 * [OpaqueRecords ''Opaqueness''] records internal mechanisms are hidden. Access or modification only through a given interface.
 * [TranslucentRecords ''Translucency''] records internal mechanisms are made explicit and examining / modifying directly is allowed.

 * A [NaturalRecordConstructor ''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 [FilteringRecordConstructor ''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 [GeneralizedRecordConstructor ''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 [LabelRecordConstructor ''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 records 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

= Issues and Discussions =

  * EfficiencyConcerns
  * InterfaceComparison

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

time

2010-03-11 00:33:59

version

6