TLF = thread local functions

Stanislav Blinov stanislav.blinov at gmail.com
Fri Jan 24 03:24:26 PST 2014


On Friday, 24 January 2014 at 11:00:42 UTC, Dicebot wrote:

> D type system is supposed to guarantee that you never ever can 
> get pointer/reference to data that is not stored in your own 
> TLS (including stack) unless it is marked as shared (immutable 
> / __gshared are in shared category).

Agreed.

> By allowing to spawn thread with a delegate which has context 
> pointer not qualified as shared you break that type system 
> sanity rule.

Agreed again. AFAIK, that was the exact reasoning behind 
restricting std.concurrency to not allow delegates as thread 
functions or message types.

> Multithreading / concurrency in D is quite different from C++.

With this I cannot completely agree. Granted, we have "shared" 
qualifier and by-default-TLS static data. Oh, and built-in 
monitors + synchronized methods (which are of dubious value at 
best). In that, D differs. But the bare bones of concurrency 
still are the same. Access to shared data still has to be 
manually synchronized somehow (locks, atomics, cas, you name it). 
Threads still have to be spawned and joined as necessary.

Ok, we have some of the boilerplate removed thanks to 
std.concurrency and std.parallelism, but that's just library 
solutions, not unlike those that exist for C++. I.e. there's 
nothing in the language that says "use that!".

And sadly, when threading is concerned, purity doesn't help much 
because of the "weak purity" concept.

> Delegates unique in a sense that they often erase type 
> qualifiers for the context because of rather hacky current 
> implementation. All such cases are bugs that contradict 
> language spec, there is nothing intentional about it.
>
> There are no legal exceptions to the rule "all shared data must 
> be shared".

Agreed.

Oh, speaking of holes in the type system. Synchronization 
primitives like Mutex, Condition, etc. (which should be de-facto 
shared) aren't qualified as shared. Do you know if it's 
intentional or?..


More information about the Digitalmars-d-learn mailing list