On Wednesday, 8 January 2014 at 00:23:34 UTC, deed wrote:
1. Swap type and name. Like Go, but return type between
function name and
parameter list.
I find the Go swap to be less clear like "functionname(x,y,z
int)", but the swap with ":" is ok.
However, then you might as well create a separate type name space
starting with colon so that all types start with ":" and have a
single colon mean auto (kinda like Go):
x :int; // int x;
y := 2; // auto y = 2;
I think the basic advantage with the swap is to have the return
value after the the function parameter list:
add(x:int,y:int) :int
{}
sub(x:int,y:int) :int
{}
It is also more consistent with subclassing, an instance being a
special case of a type.
define :subclass:superclass{} // class subclass : superclass{}
anonclass_instance:superclass{...}(...)
etc.
This is particularly useful in a language like Beta where you can
inject code into the middle of the superclass:
define :dbaccess {
db :=dbopen();
INNER;
db.close();
}
define :dbtransaction:dbaccess{
db.begin();
INNER;
db.end();
}
define :updatedb:dbtransaction{
db.get(...);
db.put(...);
db.put(...);
INNER;
db.consistencycheck();
}
:updatedb{
db.put(...morestuff...)
}
2. Names come first, all other annotations after. ALWAYS.
Yep, or rather: more specific identifiers come first.