I've been working on the Wombat programming language (under various names) for 35 years. I finally have a design that I'm happy with, though I expect that feedback from others (if I get any) will lead to useful, and even necessary, changes.
So I'm happy to release the document "Outline of the Wombat Programming Language". It is in Google Docs, with comments enabled. Comments can also be added to this blog post. In google+ see +WombatLang and/or use #wombatlang. An issue tracker is available at https://code.google.com/p/wombatlang/.
[update: I'm happy to give talks about wombat to any group (or anyone) who is interested, within financial contraints. Within 3.5 hours drive from Melbourne or Sydney should be ok.]
The doc starts:
Wombat aims for simplicity and generality in a comprehensive modern programming language:
- Expression language with simple left to right evaluation;
- All optional, repeated, deferred or parallel execution through a single mechanism: the anonymous procedure (closure).
- All identifiers stand for a constant value of some type. [Mutable variables are of a Assignable(X) type, whose constant value is effectively a memory address.] Identifiers in closures are set to their value at closure creation, and there is no confusion about what that means.
- Identifiers are just compile-time names with lexical scope. Identifier values are set by unification.
- Polymorphism resides in values, not identifiers or operators.
- Operators are defined in a simple way, available to users, which supports suboperators (like then in if-then-else). This covers nearly all syntax.
- Compile time entities and run time entities are handled with the same syntax. For example List is just a Type=>Type, and there is frequent use of tuples, lists and sets of Types.
- In mathematics, infinite entities are studied, whether formally (coq) or informally (latex), by finite strings from finite character sets. Wombat copies this, letting the programmer work conceptually with simple infinite entities at compile time.
- Operator macros utilize free variables to allow syntactic sugar, but also, more importantly, to provide a way of dealing conveniently with infinite entities at compile time.
- Non-primitive types are defined by semantics. They can have multiple implementations.
- Disambiguation of expressions uses information from the operands (input), and of the required result (output), equally.
- The standard library is written in Wombat Compile Time Language (WCTL) and uses capabilities available to all library writers.
- Wombat allows rich text, using bold, underlining, subscripts and an extended character set, but ASCII equivalents are available.