Changes to the Iota(+) language definition or static semantics

April 23: Language definition updated to use the terms "declaration" and "definition" consistently. A declaration merely announces the existence of some value or type with a given name; a definition says exactly what that name refers to.

April 20: The static semantics rules were clarified for cast expressions.

April 20: The static semantics and language definition were changed to prohibit comparison of a boolean and an object in a == or != expression.  This feature is optional.

April 19: The static semantics rules were clarified with respect to type agreement between modules and their interfaces. It is okay to require strict type equality rather than the more flexible rule described in the semantics (in English). For conformance of methods between types and their supertypes you are still required to implement the full contravariant/covariant rule. The language definition was also clarified regarding export from a module interface of  identifiers generated by a uses declaration. This feature is also optional.

April 18: Static semantics of == updated to agree with language definition. It is okay (and harder) to implement the old static semantics in any case.

April 16: Iota+ language definition updated to clarify semantics of ++ and -- statements.

March 31: Iota+ language definition, static semantics made available.

March 7: "Hello, world" example changed to have correct signature for function main

March 1: The infamous array constructor rule has been added to the static semantics

February 18: The type of while (true) was changed to none and function bodies are allowed to have type none. This makes more of the example programs type-check successfully.