Trass3r:
> why do we have "in" if all
> parameters are in by default?
If you start performing some experiments on your own you can write a small
program like this:
// program1
import std.stdio: writeln;
void foo(int x, in int y) {
x = 1;
y = 2;
}
void main() {
int x, y;
foo(x, y);
writeln(x, " ", y);
}
The compiler prints an error because y is seen as const. So a better question
(I don't know the answer) is: what's the purpose of "in" if now function
arguments can be const?
A related program:
// program2
import std.stdio: writeln;
void bar(out int x) {
int y = x; // line 4
writeln(y); // prints 0
}
void main() {
int x = 10;
bar(x);
writeln(x); // prints 0
}
Is this program correct? It compiles and runs, printing 0 two times. I don't
like that code. I think it's even worse than a similar C program, where the
caller must add a &x, revealing part of how x will be used by the bar()
function.
I think that in theory the line 4 is an error, because technically y is an
output variable, so it's not initialized yet. In practice it's initialized with
its init. And I think code like that program2 can easily hide bugs. This shows
why built-in tuples are good. Currently there are many holes in D2.
If you have answers or comments please let us know.
Bye,
bearophile