Rebooting the __metada/__mutable discussion

Paul Backus snarwin at gmail.com
Wed Apr 13 15:55:47 UTC 2022


On Wednesday, 13 April 2022 at 12:59:30 UTC, Dennis wrote:
> On Wednesday, 13 April 2022 at 12:31:44 UTC, Zach Tollen wrote:
>> Maybe there is some other natural use for `@system` variables. 
>> But none of the use cases I have seen seem particularly 
>> incompatible with the additional `__mutable` functionality.
>
> Without conflating `@system` and `__mutable`:
> ```D
> struct Boolean
> {
>     @system ubyte payload; // must be 0 or 1 or buffer 
> overflows could happen
> }
>
> immutable Boolean b; // can be placed in read-only data segment
> ```
>
> When conflating `@system` and `__mutable`, `b` suddenly must be 
> placed in mutable memory.

On top of this: leaving `@system` and `__mutable` separate allows 
`b` to be safely accessed from multiple threads without 
synchronization. If `@system` and `__mutable` were combined, this 
could potentially result in data races, and so would no longer be 
safe.

It's not hard to imagine situations where one might want to 
create an `immutable` copy of a type with `@system` fields in 
order to share it between threads.


More information about the Digitalmars-d mailing list