preparing for const, final, and invariant

Walter Bright newshound1 at digitalmars.com
Thu May 17 14:53:52 PDT 2007


This is coming for the D 2.0 beta, and it will need some source code 
changes. Specifically, for function parameters that are arrays or 
pointers, start using 'in' for them.

'in' will mean 'scope const final', which means:

final - the parameter will not be reassigned within the function
const - the function will not attempt to change the contents of what is 
referred to
scope - the function will not keep a reference to the parameter's data 
that will persist beyond the scope of the function

For example:

int[] g;

void foo(in int[] a)
{
     a = [1,2];	// error, a is final
     a[1] = 2;   // error, a is const
     g = a;	// error, a is scope
}

Do not use 'in' if you wish to do any of these operations on a 
parameter. Using 'in' has no useful effect on D 1.0 code, so it'll be 
backwards compatible.

Adding in all those 'in's is tedious, as I'm finding out :-(, but I 
think the results will be worth the effort.



More information about the Digitalmars-d-announce mailing list