On Monday, 2 February 2015 at 01:17:52 UTC, Walter Bright wrote:
You can use __gshared to not get TLS,
Yes, that is what we are doing.
and a freestanding implementation doesn't necessarily imply no threads.
Indeed. There are also interrupt service routines that can be thought of as short lived threads. But the overhead of TLS is not appropriate for an ISR that demands low latency. `shared`, on the other hand, might be more appropriate. Perhaps a compiler error should be emitted if an ISR attempts to access state not decorated with `shared`. But then the language needs some way to identify ISRs, yes?
it was far better to always build for multi thread and have a runtime adapt itself for single thread dynamically.
I'm with you, but if the runtime port only supports a single thread, I don't want to force users of my libraries to have to decorate their state with __gshared, as it's redundant. They should be able to use the idiomatic D they see in D's learning material. Perhaps I can solve this in my runtime implementation and/or linker scripts, but I need to study the implementation more. Mike