Please fix `.init` property

FeepingCreature feepingcreature at gmail.com
Sat Jan 13 18:55:17 UTC 2024


On Friday, 12 January 2024 at 09:57:25 UTC, Iain Buclaw wrote:
> On Tuesday, 9 January 2024 at 06:16:42 UTC, FeepingCreature 
> wrote:
>>
>> Yes, the point of making it forced `immutable` is exactly to 
>> make the problematic cases illegal. Don't even think about 
>> deepcopy vs array vs object etc., just let the const system 
>> handle it.
>
> I might be misinterpreting, but it seems like you're suggesting
> ```
> S s;
> s.arr[0] = "imm"; // compile-time error?
> s.arr = ["new"];
> s.arr[0] = "mut"; // ok
> ```
> I'm not seeing how that would fly.
>
> I can imagine it being easier done at runtime - with a bit of 
> extra overhead - using mprotect or tagged pointers.

Not quite: you couldn't even *define* `S` as

```
struct S
{
     int[] arr = [1, 2, 3]; // Error: immutable(int)[] cannot be 
converted to int[].
}
```

The type of an array-literal, *evaluated at compile-time,* would 
always be immutable. That way, you'd either *have* to define a 
constructor or you would be protected from accidental aliasing 
anyways. You'd be missing out on *intentional* aliasing, but 
that's such a corner case I'm fine sacrificing it.


More information about the Digitalmars-d mailing list