My two cents

Martin Nowak code at dawg.eu
Mon Oct 23 11:21:13 UTC 2017


On Saturday, 21 October 2017 at 18:52:15 UTC, bitwise wrote:
> On Wednesday, 18 October 2017 at 08:56:21 UTC, Satoshi wrote:
>
>> async/await (vibe.d is nice but useless in comparison to C# or 
>> js async/await idiom)
>
>
>> Reference counting when we cannot use GC...
>
>
> If I understand correctly, both of these depend on 
> implementation of 'scope' which is being worked on right now.

Scope is about preventing pointer escaping, ref-counting also 
needs to make use-after-free safe which is currently in the early 
spec phase.
Whether or not that is going to be a compile-time or runtime 
check has yet to be figured out. If you have a great idea that we 
should consider, let us know.

The recent IOPipe window invalidation discussion was a good 
example of what such a mechanism would hopefully be able to 
handle 
(https://gist.github.com/MartinNowak/b406a6b7aa6d0964147c107771b64333#file-safety_dance-d-L43-L45).

> I think reference counting needs 'scope' to be made safe. RC 
> also benefits from scope in that many of the 
> increments/decrements of the ref count can be elided. The 
> performance gain can be significant, and even more so when you 
> use atomic reference counting (like C++ shared_ptr) for thread 
> safety.

Well, there can be RC and shared(RC), only the latter would need 
to do atomic ref-counting.

> Async/Await needs to allocate state for the function's local 
> variables. When it's detected that the function's 
> state/enumerator won't escape it's current scope, it can be put 
> on the stack, which is a pretty big optimization.

We should figure out how to allocate RC/unique delegate contexts.
Not that with async/await you always escape the local context, as 
it's the callback in the returned Promise/Task.


More information about the Digitalmars-d mailing list