RFC: moving forward with @nogc Phobos
Jacob Carlborg via Digitalmars-d
digitalmars-d at puremagic.com
Mon Sep 29 10:25:54 PDT 2014
On 2014-09-29 12:49, Andrei Alexandrescu wrote:
> Now that we clarified that these existing attempts are not going to work
> well, the question remains what does. For Phobos I'm thinking of
> defining and using three policies:
>
> enum MemoryManagementPolicy { gc, rc, mrc }
> immutable
> gc = ResourceManagementPolicy.gc,
> rc = ResourceManagementPolicy.rc,
> mrc = ResourceManagementPolicy.mrc;
>
> The three policies are:
>
> (a) gc is the classic garbage-collected style of management;
>
> (b) rc is a reference-counted style still backed by the GC, i.e. the GC
> will still be able to pick up cycles and other kinds of leaks.
>
> (c) mrc is a reference-counted style backed by malloc.
>
> (It should be possible to collapse rc and mrc together and make the
> distinction dynamically, at runtime. I'm distinguishing them statically
> here for expository purposes.)
>
> The policy is a template parameter to functions in Phobos (and
> elsewhere), and informs the functions e.g. what types to return. Consider:
>
> auto setExtension(MemoryManagementPolicy mmp = gc, R1, R2)(R1 path, R2 ext)
> if (...)
> {
> static if (mmp == gc) alias S = string;
> else alias S = RCString;
> S result;
> ...
> return result;
> }
>
> On the caller side:
>
> auto p1 = setExtension("hello", ".txt"); // fine, use gc
> auto p2 = setExtension!gc("hello", ".txt"); // same
> auto p3 = setExtension!rc("hello", ".txt"); // fine, use rc
How does allocators fit in this? Will it be an additional argument to
the function. Or a separate stack that one can push and pop allocators to?
--
/Jacob Carlborg
More information about the Digitalmars-d
mailing list