"Andrei Alexandrescu" wrote > The compiler's escape detection mechanism can't help quite a lot here > because the escape hatch is rather indirect. > > Initially I thought SafeD should prevent such escapes, whereas D allows > them. Now I start thinking the pattern above is dangerous enough to be > disallowed in all of D. How about this rule? > > *************** > Rule: ref parameters are PASS-DOWN and RETURN only. No escaping of > addresses of ref parameters is allowed. If you want to escape the address > of a ref parameter, use a pointer in the first place. > ***************
As long as there is a way to circumvent this, I'm OK with this rule. Something that's the equivalent of a cast. Two reasons: 1. Using a * dereference pointer inside a function for all usages is sometimes tedious. This would be a non issue if ref local variables were allowed, i.e.: void foo(int *x) { ref int rx = *x; // use rx until you need to copy the address of x. } 2. you may need to call functions you have no control over that take a pointer but do not save a reference to it. e.g. system calls. -Steve