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