Escaping the Tyranny of the GC: std.rcstring, first blood
John Colvin via Digitalmars-d
digitalmars-d at puremagic.com
Mon Sep 15 01:51:54 PDT 2014
On Monday, 15 September 2014 at 02:26:19 UTC, Andrei Alexandrescu
wrote:
> Walter, Brad, myself, and a couple of others have had a couple
> of quite exciting ideas regarding code that is configurable to
> use the GC or alternate resource management strategies. One
> thing that became obvious to us is we need to have a reference
> counted string in the standard library. That would be usable
> with applications that want to benefit from comfortable string
> manipulation whilst using classic reference counting for memory
> management. I'll get into more details into the mechanisms that
> would allow the stdlib to provide functionality for both GC
> strings and RC strings; for now let's say that we hope and aim
> for swapping between these with ease. We hope that at one point
> people would be able to change one line of code, rebuild, and
> get either GC or RC automatically (for Phobos and their own
> code).
>
> The road there is long, but it starts with the proverbial first
> step. As it were, I have a rough draft of a almost-drop-in
> replacement of string (aka immutable(char)[]). Destroy with
> maximum prejudice:
>
> http://dpaste.dzfl.pl/817283c163f5
>
> For now RCString supports only immutable char as element type.
> That means you can't modify individual characters in an
> RCString object but you can take slices, append to it, etc. -
> just as you can with string. A compact reference counting
> scheme is complemented with a small buffer optimization, so
> performance should be fairly decent.
>
> Somewhat surprisingly, pure constructors and inout took good
> care of qualified semantics (you can convert a mutable to an
> immutable string and back safely). I'm not sure whether
> semantics there are a bit too lax, but at least for RCString
> they turned out to work beautifully and without too much fuss.
>
> The one wrinkle is that you need to wrap string literals "abc"
> with explicit constructor calls, e.g. RCString("abc"). This
> puts RCString on a lower footing than built-in strings and
> makes swapping configurations a tad more difficult.
>
> Currently I've customized RCString with the allocation policy,
> which I hurriedly reduced to just one function with the
> semantics of realloc. That will probably change in a future
> pass; the point for now is that allocation is somewhat
> modularized away from the string workings.
>
> So, please fire away. I'd appreciate it if you used RCString in
> lieu of string and note the differences. The closer we get to
> parity in semantics, the better.
>
>
> Thanks,
>
> Andrei
Why not open this up to all slices of immutable value type
elements?
More information about the Digitalmars-d
mailing list