On 7/3/2017 8:48 AM, Petar Kirov [ZombineDev] wrote:
Unlike C++, in D objects can't be shared across threads, unless they are marked as `shared` (modulo un-`@safe` code - like casts and `__gshared` - and compiler bugs).
I.e. non-`shared` objects can't be mutated by more than one thread.
Combined with `pure` functions, the guarantees provided by D's type system are quite useful:

```
void main()
{
     int x = globalArray.foo();
}

// module-level non-shared variables are thread-local
int[] globalArray = [1, 2, 3, 4];

int foo(const(int)[] array) pure
{
     // globalArray[0] = 42; doesn't compile
     // For all intents and purposes, the elements of `array` can
     // be viewed as immutable here and they are *not* aliased.

     // ...
}

Keep in mind that today's optimizers are pretty much tuned to what works for C++. While D's particular semantics offer opportunities for optimizations, they are currently pretty much unexploited.

Reply via email to