Want reasonable reference counting? Disable automatic sharing of immutable

Timon Gehr timon.gehr at gmx.ch
Sun Nov 14 21:59:23 UTC 2021


On 14.11.21 22:50, Elronnd wrote:
> On Sunday, 14 November 2021 at 18:24:00 UTC, Timon Gehr wrote:
>>> 1. ref counted objects are mutable
>> Works, but you may have to extend it to "anything that's not allocated 
>> with the GC is mutable".
> 
> Static data can be immutable too.
> ...

True, and you can also just leak. I did mention that in my other post, 
but I forgot to add it here, thanks!

> 
>>> 2. ref counted objects are outside of the type system
>> For this to work, there still needs to be a careful definition what 
>> @trusted functions are allowed to do with data of certain 
>> qualification. I think adding some type system support that is 
>> strictly @system, like __mutable variables and functions is better 
>> than having no language support at all, because otherwise, in order to 
>> support reference counting, you may end up penalizing code that does 
>> not actually use it.
> 
> I assumed that 'outside of the type system' meant 'language-level 
> support for reference counting'; a a type with opaque representation, 
> like a hash table.
> ...

Yes, I guess that's another way to go about it, but I think less 
language magic is better. Especially with reference counting, you may 
want to have detailed control over the allocator and/or the strategy for 
storing reference counts.

> 
>>> PS. I suspect that ref counted shared mutable objects are an 
>>> indicator of insanity.
>> Possibly, though it's hard to know everyone's use cases in advance.
> 
> GC really makes more sense for multithreaded programs.  Travis downs 
> mentions at 
> https://travisdowns.github.io/blog/2020/07/06/concurrency-costs.html.  
> IMO if you are sharing mutable data between threads, and you can't stand 
> gc for some reason, then it's perfectly legitimate to make you manage 
> the lifetime yourself.

Also fair.

However, I think having the language provide some tools to implement 
stuff that's at the same level as the language runtime does make some 
sense for a systems programming language. E.g., see 
std.experimental.allocator. It would be a pity if the language hobbled 
that library by having uncircumventable pitfalls.


More information about the Digitalmars-d mailing list