Record Classes

In Ginger, records are store that used to define classes whose instances have a fixed set of fields. These are used for both simple records (“structs”) whose fields are exposed and also for the implementation of objects.

User Defined Record Classes

At the time of writing we only support simple record definitions. Each record definition introduces a new class with any number of fields (including 0). But you can’t make subclasses of the record.

Example:

recordclass Choice
        field mainChoice;
        field altChoice;
endrecordclass;

The above definition does the following:

  • It introduces a new class ‘Choice’ for a record of 2 fields. It is guaranteed to be distinct from any existing class.
  • A constructor ‘newChoice’ that takes 2 arguments and return a new instance of Choice.
  • An exploder ‘explodeChoice’ that takes a Choice record and returns all the fields in order.
  • A recogniser ‘isChoice’ that returns true for instances of Choice and false for everything else.
  • Access functions ‘mainChoice’ and ‘altChoice’ that return the corresponding fields of a Choice instance.

Future Expansion

The implementation of classes and methods utilises records. Most of the work for object-oriented programming has been done but has not been exposed to users.