small idea

eles eles at eles.com
Wed Jan 9 06:28:31 PST 2013


Disclaimer: I do not ask for anything, it is just an idea, do not 
blame me (too much).

One thing that I really like about a function is to know quite 
clearly which of its parameters are for input, which for output 
and, yes, which one are for carrying (input/output parameters).

In D, this is signalled by the in/out/inout keywords. However, 
these are only visible at the moment of function declaration, not 
calling.

In C, you usually can distinguish since parameters intended to be 
modified are passed through address (pointers), and you see that 
at use time:

void make_a_equal_to_b(&a,b);

In D, it would be:

void make_a_equal_to_b(a,b);

Yes, the name of the function can convey the intention. But, in 
C, the calling, too. It is a kind of a double check.

Now, what about accepting a quick and optional (to not break 
existing code) annotation at the time of the call:

void make_a_equal_to_b(??a,!!b); //I give you "b", give me "a"

so that in, out and inout could be replaced by !!, ?? and !?

Alternatives could be: >>, <<, >< but that's more complex.

Non-concordance between !!/!?/?? use and in/out/inout declaration 
could be sanctioned with a warning or an error, or explicitely 
ignored through a compiler flag.


More information about the Digitalmars-d mailing list