@nogc and NSAutoReleasePool-style regions.

via Digitalmars-d digitalmars-d at puremagic.com
Wed Jul 9 05:01:11 PDT 2014


On Tuesday, 8 July 2014 at 21:17:50 UTC, Ola Fosheim Grøstad 
wrote:
> On Tuesday, 8 July 2014 at 20:38:59 UTC, Marc Schütz wrote:
>> But as you already noted, there needs to be a mechanism to 
>> restrict escaping of pointers.
>
> Yes, there ought to be, at least for @safe code.
>
>> Do you have some concrete idea how that could be solved?
>
> For my use, yes. Since I am considering a D-version for game 
> server development that does whole program analysis and might 
> put additional restrictions on the language. I'd like to 
> restrict the language to the extent that I can generate C code 
> for portability (server/client code sharing)…
>
> However, it should be possible with more local annotations too, 
> but maybe the existing ones that D provides are too weak or too 
> strong?
>
> One needs to prevent escaping, that means:
>
> 1. prevent writing through global variables (but allow reading 
> values, but not reading references for writing?)
>
> 2. prevent establishing new global contexts (threads and fibers)
>
> 3. putting limitations on the in-parameters to functions called 
> within the region-allocator block so they don't allow writing 
> to global contexts
>
> 4. ???
>
> Sounds a lot like "pure", but not quite matching up?

Well, `scope` was supposed to be that, but it's unimplemented and 
not completely thought through.

>
>> A more or less straight-forward way would be to encode the 
>> ownership/lifetime information somewhere in the types of the 
>> pointers (similar to how we use const and the like today). But 
>> this cannot be done, because it could not apply to external 
>> (non-template) functions.
>
> It would be nice if it could fit into the current 
> infrastructure… but all suggestions are interesting. I think it 
> could be a nice way to get "gc" level convinience during spin 
> up of a server when you have plenty of memory available (you 
> can afford to be wasteful before you load in the main data).

Thinking aloud: If we could distinguish GC pointers from non-GC 
pointers, we could apply the ownership information to them "after 
the fact". Any GC pointer that comes out from your library 
functions inside an auto-release block can be confined to inside 
that block, or to the lifetime of the allocator. (That is, only 
_newly allocated_ GC pointers inside those blocks...)


More information about the Digitalmars-d mailing list