-This third version of the interpreter exists to test out some initial
-ideas relating to types. Particularly it adds arrays (indexed from
-zero) and simple structures. Basic control flow and variable scoping
-are already fairly well established, as are basic numerical and
-boolean operators.
-
-Some operators that have only recently been added, and so have not
-generated all that much experience yet are "and then" and "or else" as
-short-circuit Boolean operators (which have since been remove), and the
-"if ... else" trinary operator which can select between two expressions
-based on a third (which appears syntactically in the middle).
-
-The "func" clause currently only allows a "main" function to be
-declared. That will be extended when proper function support is added.
-
-An element that is present purely to make a usable language, and
-without any expectation that they will remain, is the "print" statement
-which performs simple output.
-
-The current scalar types are "number", "Boolean", and "string".
-Boolean will likely stay in its current form, the other two might, but
-could just as easily be changed.
+This fourth version of the interpreter showcases the latest iteration of
+the design for parsing indents and line breaks, provides a first cut of
+support for references and functions, and introduces some syntax for a
+array with run-time length - currently only used for "argv".
+
+Indents are now explicit elements of the grammar and we no longer
+require a colon before an indent. The colon still appears on "if" and
+"while" statements and others but it now marks the end of the
+expression. Where there is no expression, such as after "else", there
+is no colon - an indent can immediately follow the "else".
+
+References can refer objects of any type which has a name, and this
+explicitly excludes other pointers and arrays. This makes a very clear
+difference between references and things that they refer to, which we
+will see makes the description of function parameters simpler. As a
+structure can hold a reference it is still quite possible to have a
+reference to a reference, but there will be a structure which keeps the
+inner and outer clearly separate.
+
+Functions can receive by-value or by-reference parameters with by-ref being
+declared like references. If a non-reference is passed to a reference
+parameter, it is passed by-reference. Functions can return a single
+value, or can return a collections of values which acts like a structure.
+
+The only IO that is currently possible is that "input" can be received
+in the sense that command line arguments are available to `main()`, and
+"output" can be generated with the "print" statement. It is quite
+possible that neither of these will remain in the final language.
+
+The current scalar types are "number", "Boolean", "string" and the new
+"reference". Boolean will likely stay in its current form, "string" and
+"number" are still open to being revised. Compound types are structures
+and arrays.