Escaping the Tyranny of the GC: std.rcstring, first blood

Manu via Digitalmars-d digitalmars-d at puremagic.com
Tue Sep 23 05:17:02 PDT 2014


On 23 September 2014 17:17, Dmitry Olshansky via Digitalmars-d
<digitalmars-d at puremagic.com> wrote:
> 23-Sep-2014 10:47, Manu via Digitalmars-d пишет:
>>
>> On 23 September 2014 16:19, deadalnix via Digitalmars-d
>> <digitalmars-d at puremagic.com <mailto:digitalmars-d at puremagic.com>> wrote:
>>
>>     On Tuesday, 23 September 2014 at 03:03:49 UTC, Manu via
>>     Digitalmars-d wrote:
>>
>>         I still think most of those users would accept RC instead of GC.
>>         Why not
>>         support RC in the language, and make all of this library noise
>>         redundant?
>>         Library RC can't really optimise well, RC requires language
>>         support to
>>         elide ref fiddling.
>>
>>
>>     I think a library solution + intrinsic for increment/decrement (so
>>     they can be better optimized) would be the best option.
>>
>>
>> Right, that's pretty much how I imagined it too. Like ranges, where
>> foreach makes implicit calls to contractual methods, there would also be
>> a contract for refcounted objects, and the compiler will emit implicit
>> calls to inc/dec if they exist?
>
>
> In my imagination it would be along the lines of
> @ARC
> struct MyCountedStuff{ void opInc(); void opDec(); }

Problem with this is you can't make a refcounted int[] without
mangling the type, and you also can't allocate a ref counted 3rd-party
type.

>> That should eliminate 'RefCounted', you would only need to provide
>> opInc()/opDec() and rc fiddling calls would be generated automatically?
>
>
> Non-intrusive ref-counts are useful too. And not everybody is thrilled by
> writing inc/dec code again and again.

It's important to be able to override opInc/opDec for user types, but
I think a default scheme for foreign or builtin types is very
important.

>> Then we can preserve the type of things, rather than obscuring them in
>> layers of wrapper templates...
>
>
> This would be intrusive ref-counting which may be more efficient.

Perhaps I'm not clear what you mean by intrusive/non-intrusive?



More information about the Digitalmars-d mailing list