Referencerecord

Syntax
referencerecord[name1, type1,name2,type2,...,named,typed]

Semantics
The record type may NOT refer to itself (or other records) where as reference records support this, allowing the programmer to create data structures such as linked lists and trees. There are some added complexities of reference records, such as communicating them (all links and linking nodes will be communicated with the record) and freeing the data (garbage collection.) This results in a slight performance hit and is the reason why the record concept has been split into two types.

Default typing

 * allocated
 * multiple
 * heap

Currently communication is not available for reference records, this will be fixed at some point in the future.

Example
typevar node; node::=referencerecord["prev",node,"Int",data,"next",node]; function void main { var head:node; head:=null; var i;   for i from 0 to 9 { var newnode:node; newnode.data:=i; newnode.next:=head; if (head!=null) head.prev:=newnode; head:=newnode; };   while (head != null) { print(itostring(head.data)+"\n"); head:=head.next; }; };
 * 1) include 
 * 2) include

In this code example a doubly linked list is created, and then its contents read node by node.

Since: Version 0.5