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