+------------------------
+Years later - March 2021
+
+I need somewhere to start so I need to be able to ignore lots of this detail.
+So in the first instance all references are counted references. They must refer
+to a struct that contains 'refcount'.
+
+A reference is declared with
+ name : ref base-type
+and the base object can be accessed with
+ name.ref
+though this can sometimes be inferred from "name".
+In particular
+ name.foo
+will find 'foo' either as an attribute of name, or of what name refers to.
+If name refers to a reference, this recurses.
+
+A ref can be checked with "name.valid"
+
+A new object can be allocated with "name.new()", which returns the ref.
+So "name.new().valid" is true if the allocation succeeded, which is always
+will on Linux.
+
+Future ideas might include:
+ type name : ref(attr,list) basetype
+where attr,list can include borrow,counted,single, etc
+