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.

Reply via email to