On Thu, 05 Nov 2009 15:20:34 -0500, Andrei Alexandrescu <[email protected]> wrote:

Steven Schveighoffer wrote:
On Thu, 05 Nov 2009 14:57:48 -0500, Michel Fortin <[email protected]> wrote:

On 2009-11-05 13:33:09 -0500, Walter Bright <[email protected]> said:

Safety seems more and more to be a characteristic of a function, rather than a module or command line switch. To that end, I propose two new attributes:
 @safe
@trusted

Looks like a good proposal.

That said, since most functions are probably going to be safe, wouldn't it be better to remove @safe and replace it by its counterpart: an @unsafe attribute? This would make things safe by default, which is undoubtedly safer, and avoid the unnecessary clutter of @safe annotations everywhere.
If unsafe means you cannot pass pointers to local variables, then half of tango (and other performance oriented libs which use stack allocation as much as possible) will fail to compile.

While I agree with your point, quick question: could you use ref parameters instead? Ref will be usable in SafeD.

Most of the usages are like this:

ubyte[1024] buffer;
functionThatNeedsBufferSpace(buffer);

where functionThatNeedsBufferSpace takes a ubyte[], thereby taking an address of the local data.

So it's not explicit address taking, but it's the same thing under the hood. There always exists the potential for the stack reference to escape.

Similar case is scope classes (which are sometimes used to allocate a temporary class for performance in tango). I can't see scope classes being allowed if you can't take addresses of local variables.

I'm not saying that safed needs to allow these kinds of things somehow (thereby employing escape analysis), but it might be too restrictive for performance-oriented libs/apps. I think it's acceptable that tango eventually gets marked with @trusted, but by making @safe the default, you will immediately make many D1 projects not compile without significant effort, which might drive away developers from D2, or else make people automatically mark all files as @trusted without thinking about it. By defaulting to untrusted and unsafe, you allow people to incrementally add @safe and @trusted tags where they are appropriate and correct.

-Steve

Reply via email to