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 13
author
medernac
comment
ipnr
88.177.167.25
name
RecordStandards
readonly
0
text
Here's a list of the features provided by different kinds of standard and proposed 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
* 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 bindings with no interface
* 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
* A default natural constructor when the constructor parameters are unspecified
* 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)
== (srfi 99 records procedural) 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
== RecordsArcfide is syntactic. It extends SRFI 9 as follows: ==
* Single inheritance (with multiple inheritance as possible future extension)
== AggregatesMedernach is procedural. It provides: ==
* Distinct types
* Natural constructor
* Optional inheritance
* Mutable fields
* Generative records
* An accessor that applies a procedure to the fields in the record
== UserAggregatesRush is procedural. It provides: ==
* Distinct types
* Subtype/supertype predicates
* Universal constructors/predicate/accessors/mutators that require a RTD argument
* Natural constructors that specify the number of fields
* Mutable fields
* No inheritance, only subtyping
* Generative records
== UniqueTypesSnellPym is procedural. It provides: ==
* Distinct types
* No RTD objects; type constructor returns procedures directly
* A single filtering constructor
* Immutable fields
* Generative and non-generative records
* Single inheritance (optional proposal)
* Mutable fields (optional proposal)
= Issues and Discussions =
* EfficiencyConcerns
* InterfaceComparison
Eventually there should be a companion page for native record systems provided by individual Schemes.
time
2011-01-15 17:02:00
version
13