Tokensation: Different types of strings, separated by separators. Types might be integer e.g. 2345 number e.g. 3.14159e-3 text e.g. "hello there" name e.g. Fibonacci symbol e.g. <=> In string of symbol characters, how do we divide it up. Could used the longest defined match, but then the list of defined symbols must be processed quite early. Anything else will be very arbitrary though, so probably is best. Simple Syntax: There is a simple, all encompassing, syntax which is probably a bit clumsy (though not too clumsy). It basically looks like object method invokations: expr : expr ":" name expr | "(" expr ")" | name | text | number | integer Should lists be in this simple syntax (for args to function), or should they be created with list : create 27 : append 12 : append 1 : append hello gives a list 27, 12, 1, hello No, I think that the language need to "know" about lists more than this. Then we need a distinct bracket for lists, so that we know the difference between an expr and a list with one element. Nicer Syntax: There is a mechanism for defining various syntactic forms to improve the syntax. e.g. "if" A:boolean "then" B:block "else" C:block "fi" transforms to A:select << B, C >> A:addable "+" B:addable transforms to LUB(A,B):add <> Local variables: Haven't really thought though how local binding works, especially for loops. Maybe a local name binds to a single object, possibly created for the purpose. This needs to be some sort of meta-syntactic form.... If there is only one object, do we need/want to declare a type for the name. Is it not obvious from creation? Types: A "type" is a set of objects having common behaviour. A class is a means of creating new objects. A "type" can "inherit from", or "be a subtype of" another type. A class creates objects of a defined type. An object has (optional) state and behaviour. Each behavious is a "class" in that it creates (or produces, returns) objects. A class takes arguements to tell which sort of object to create. A "package" is an object without state that pre-exists in some sense, and contains a lot of classes, which create objects, each with their own behaviour. How does this relate to parameterised classes which have parameterised types? This simply requires that the type of (returned by) a class is allowed to be a type-function of the known types of the arguments, and that classes (functions,methods) can be passed as arguments. stack(type) Execution blocks, and bindings, and scope there of.