Programming Language Design
The guiding principle that separates Obliq from other distributed procedural languages is the adherence to lexical scoping in a distributed higher-order context. This principle is conceptually simple and has a number of interesting consequences: it supports a natural and consistent semantics of distributed computation, and it enables elegant techniques for distributed programming.
[access-modifier] name :super-type :interface-1, interface-2, ..., interface-n entity-value
Note: an anonymous entity must include the first colon in its declaration to distinguish it as such. When a super type is omitted the colon introducing it is often omitted. The colon is used if and only if any of the following are true of the declaration:
- A super type is declared.
- The entity is anonymous.
- At least one interface type is declared.
Named objects. (“classes”)
- Anonymous types.
- Named types.
Anonymous objects.
- Anonymous types. == Object literals
- Named types. == Conversion expressions.
Named patterns.
- Anonymous types.
- Named types.
Anonymous patterns.
- Anonymous types. == Pattern literals
- Named types. == Pattern conversion expressions.
Modula-3/Oberon-2/Juice with slightly changed syntax?
Eifel sports nice clean syntax with extremely good object orientation. See also for good reasoning behind lang features.
Lang traits to have:
Support separate compilation. interface and implementation parts. From Dylan:
A module defines items that should be compiled and handled together, while an interface defines the namespace. Classes can be placed together in modules, or cut across them, as the programmer wishes. Often the complete definition for a class does not exist in a single module, but is spread across several that are optionally collected together. Different programs can have different definitions of the same class, including only what they need.
Allow mutative! and predicate? names.