21.03.2012 13:35, kennytm пишет:
Mantis<[email protected]> wrote:
[...]
# identifier statement
You mean 'declaration'.
Not necessarily, this could be used anywhere a mixin can be.
[...]
The syntax may conflict with '#line'.
I didn't know. The choice for the symbol is not that important however.
What to do where there are multiple attributes? E.g.
#license!"BSD" @safe #memoize pure nothrow auto invertMatrix(T)(T[]
elements) if (isArithmetic!T) { ... }
Evaluation order stays the same as in this example, the improvement is
purely syntactical:
//
import std.stdio, std.array;
string m1( string s ) { return replace( s, "foo", "bar" ); }
string m2( string s ) { return replace( s, "bar", "baz" ); }
mixin( m1( q{ mixin( m2( q{ void foo( int i ) {
writeln( i );
}}));}));
void main() {
baz( 42 );
}
//
What to do with .di files?
// in .di
#handler void onLoad();
// in .d
#handler void onLoad() { .... }
Since the function receives a string, it can deal with declarations
differently from definitions, it's only a matter of parser.
Besides, what's wrong with using '@'?
@serialize int a;
Builtin annotations' names are not reserved keywords, so this would be
possible and ambiguous:
string safe( string s );
@safe void foo(); // what @safe stands for?