On Tue, 15 Apr 2014 14:58:25 -0400, Walter Bright <newshou...@digitalmars.com> wrote:

On 4/15/2014 11:41 AM, Steven Schveighoffer wrote:
On Tue, 15 Apr 2014 13:01:40 -0400, Walter Bright <newshou...@digitalmars.com>
wrote:

http://wiki.dlang.org/DIP60'

Wow, that's quite underspecified.

Ok, but I don't see how.

i.e. the rest of my post.

What about syscalls?

Not sure what you mean by that, but obviously Windows API functions would be @nogc.

Linux syscalls are not Windows API, they are extern(C) calls. Basically, we will have to mark most as @nogc, right? or are extern(C) calls automatically considered @nogc?

Nothrow functions allow one to call non-nothrow functions,
but catch all exceptions. What if you want to use the GC for allocation
temporarily, and then delete all the usage before returning?

@nogc doesn't allow an escape from it. That's the point of it.

My point:

void foo1() {throw new Exception("hi");}

void foo2() nothrow { try {foo1();} catch(Exception e) {} }

This is valid.

int isthisok(int x, int y) @nogc
{
   // need scratch space
   int[] buf = new int[x * y];
   scope(exit) GC.free(buf.ptr);
   // perform some algorithm using buf
   ...
   //
   return buf[$-1];
}

Valid?

Must you use C malloc/free?

If you can GC/GCfree, then you can use malloc/free.

What if you can't use GC/GCfree? i.e. @nogc (the point of this thread)

What about such code that is @safe, which cannot call free?

There's no point to @nogc if you can still call the GC in it.

This is a follow-on to the previous question. Let's say you cannot use GC, but clearly, I can use C malloc/free. Safe code that needs arbitrary buffers must use C malloc/free to manage them, but safe cannot legally call free.

I think we would need some sort of scoped allocator to make life bearable.

-Steve

Reply via email to