Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
October 24, 2013 Copying to an immutable array in a costructor | ||||
---|---|---|---|---|
| ||||
This shows a limitation of the D type system: import std.algorithm: copy; immutable int[2] data; static this() { foreach (i, x; [10, 20]) data[i] = x; // OK data[] = [10, 20]; // OK [10, 20].copy(data[]); // Error. } void main() {} Bye, bearophile |
October 24, 2013 Re: Copying to an immutable array in a costructor | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Thursday, October 24, 2013 09:02:24 bearophile wrote:
> This shows a limitation of the D type system:
>
>
> import std.algorithm: copy;
> immutable int[2] data;
> static this() {
> foreach (i, x; [10, 20]) data[i] = x; // OK
> data[] = [10, 20]; // OK
> [10, 20].copy(data[]); // Error.
> }
> void main() {}
It's a compiler bug. immutable data should not be initialized more than once.
- Jonathan M Davis
|
October 24, 2013 Re: Copying to an immutable array in a costructor | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | Jonathan M Davis:
> It's a compiler bug. immutable data should not be initialized more than once.
My point was another one, regarding this refused code:
import std.algorithm: copy;
immutable int[2] data;
static this() {
[10, 20].copy(data[]); // Error.
}
void main() {}
Bye,
bearophile
|
October 24, 2013 Re: Copying to an immutable array in a costructor | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Thursday, 24 October 2013 at 07:02:25 UTC, bearophile wrote:
> This shows a limitation of the D type system:
>
>
> import std.algorithm: copy;
> immutable int[2] data;
> static this() {
> foreach (i, x; [10, 20]) data[i] = x; // OK
> data[] = [10, 20]; // OK
> [10, 20].copy(data[]); // Error.
> }
> void main() {}
>
>
> Bye,
> bearophile
Because control flow check for immutable data is almost absent. I don't know any situation where are such checks (except constructors).
There is similar issue with respect to initializsing immutable member field in struct constructor. There is issue in bugzilla filed for it (it looks like it will be fixed), where Andrei proposed a concept of cooked object, basically implying control flow for initializaing immutable members. I think that the code you posted as an additional case for the issue.
|
October 24, 2013 Re: Copying to an immutable array in a costructor | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Thursday, 24 October 2013 at 10:58:30 UTC, bearophile wrote:
> Jonathan M Davis:
>
>> It's a compiler bug. immutable data should not be initialized more than once.
>
> My point was another one, regarding this refused code:
>
>
> import std.algorithm: copy;
> immutable int[2] data;
> static this() {
> [10, 20].copy(data[]); // Error.
> }
> void main() {}
>
>
> Bye,
> bearophile
Reduced:
immutable int[] data;
void foo(int[] data) {}
static this()
{
foo(data);
}
|
Copyright © 1999-2021 by the D Language Foundation