Why do "const inout" and "const inout shared" exist?

Ola Fosheim Grøstad via Digitalmars-d digitalmars-d at puremagic.com
Mon Jul 3 09:23:48 PDT 2017


On Monday, 3 July 2017 at 15:48:26 UTC, 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

I understand the intent, but since everything is "shared" in C++, 
unless you annotate variables with optimization-constraints, it 
doesn't make sense to compare C++ const to D const. One should 
either compare C++ const do D shared const, or compare C++ 
const-with-constraints with D const.

> 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.

They aren't aliased because you only have one parameter with 
non-reference values. That's a rather narrow use-case…

> I've watched a presentation on Pony's type system and it is 
> indeed interesting,

Yes, e.g. Pony have "isolated" (e.g. no aliasing) with 
transitions to less constrained types.

> but can you explain exactly what part of Rust's type system 
> provides extra
> benefits in terms of optimization over D's type system?

As I understand it Rust's static analysis is designed to track 
aliasing using linear/affine typing for objects.



More information about the Digitalmars-d mailing list