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

Reply via email to