Why callers should explicitly document storage classes

Timon Gehr timon.gehr at gmx.ch
Sun Aug 14 05:54:44 PDT 2011


On 08/14/2011 01:34 PM, Mehrdad wrote:
> Consider this example:
>
> // In module foo.d:
> void baz(bool condition, lazy int value)
> {
> if (condition)
> writeln(value);
> }
>
> // In module bar.d:
> import foo;
> bool someCondition() { return false; }
> void main()
> {
> auto vals = [1, 2, 3, 4];
> while (!vals.empty)
> baz(someCondition(), items.moveFront());
> }
>
> There is **absolutely NO WAY** to figure out what's wrong at the calling
> site. You need to check /every/ method call and make sure nothing weird
> is happening (e.g. lazy), and it's pretty much impossible to figure it
> out unless you're intimately familiar with the entire library you're
> calling -- something which (obviously) doesn't scale.
>
> I don't know of a similar example off the top of my head for out/ref,
> but the same idea applies.
>
> Is this convincing enough that we need to document storage classes at
> the CALLING site, rather than just the CALLEE site?

Basically, as I see it what is wrong is that the function is called 
"baz" (and maybe that lazy arguments are allowed to be side-effecting).

out/ref:
int x=100;
foo(x);
assert(x==100);





More information about the Digitalmars-d mailing list