On Saturday, 26 July 2014 at 10:49:25 UTC, Marc Schütz wrote:
Interesting proposal. It seems that you want to change the default for pointers in D, but Walter will probably not like that ;-). But I wonder how much language support this actually needs, much of it seems implementable with templates, which is probably much more acceptable.

What language interface should be provided for RC is up to debate. Getting it working at the binary level is problematic enough, so I focused on it.

Some random comments:

Scoped: "The reference count is incremented when escaped or copied to a fat pointer."

Could you explain that? A scoped pointer can by definition never be escaped; therefore there should be no need to pass the reference counter along.

Disallowing escaping of scoped parameters implies strict scoping can work. I was trying to get escaping working. It's easy to deny it if the need be.

Function parameters: "Caller doesn't increment the counter when passing a pointer as a function argument."

There are some corner cases here. For example when an r-value is moved into a function as an argument. The callee will not decrement the RC of its parameters, with the consequence that the RC never goes to 0. There might be other problems, in particular in the presence of optimizations.

Ouch, probably there is the same problem with tail call optimization. As of now, I was trying to get sharing and casting work, protocol for function parameters needs more work, will think about conservative counting here.

See also my writeup on borrowing, will add more examples there:
http://wiki.dlang.org/User:Schuetzm/scope

Hmm, if you got strict scoping work, that will be interesting.

Reply via email to