www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Why are immutable fields with initializers deprecated?

reply Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
A recent discussion 
https://github.com/D-Programming-Language/dmd/pull/3452 brought up a 
matter I'd forgotten - struct fields that are immutable and have 
initializer are deprecated.

Why?

Andrei
Apr 29 2014
next sibling parent reply "Steven Schveighoffer" <schveiguy yahoo.com> writes:
On Tue, 29 Apr 2014 13:09:01 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail erdani.org> wrote:

 A recent discussion  
 https://github.com/D-Programming-Language/dmd/pull/3452 brought up a  
 matter I'd forgotten - struct fields that are immutable and have  
 initializer are deprecated.

 Why?
I think possibly it has to do with the fact that they originally did not get stored per-instance. I remember a conversation about this (being a bad thing), but have not searched the NG for it. -Steve
Apr 29 2014
parent "Nick Treleaven" <ntrel-public yahoo.co.uk> writes:
On Tuesday, 29 April 2014 at 17:11:50 UTC, Steven Schveighoffer 
wrote:
 On Tue, 29 Apr 2014 13:09:01 -0400, Andrei Alexandrescu 
 <SeeWebsiteForEmail erdani.org> wrote:

 A recent discussion 
 https://github.com/D-Programming-Language/dmd/pull/3452 
 brought up a matter I'd forgotten - struct fields that are 
 immutable and have initializer are deprecated.

 Why?
I think possibly it has to do with the fact that they originally did not get stored per-instance. I remember a conversation about this (being a bad thing), but have not searched the NG for it.
http://dlang.org/changelog#staticfields2
Apr 29 2014
prev sibling parent reply Kenji Hara via Digitalmars-d <digitalmars-d puremagic.com> writes:
In future release, non-static const or immutable field will be made an
instance field.

struct S
{
    immutable int x = 1;
}
static assert(S.sizeof == int.sizeof);   // will succeed in the future

So current "implicit static" behavior is now deprecated.

Related:
http://dlang.org/changelog#staticfields
http://dlang.org/changelog#staticfields2

Kenji Hara


2014-04-30 2:09 GMT+09:00 Andrei Alexandrescu via Digitalmars-d <
digitalmars-d puremagic.com>:

 A recent discussion https://github.com/D-Programming-Language/dmd/pull/
 3452 brought up a matter I'd forgotten - struct fields that are immutable
 and have initializer are deprecated.

 Why?

 Andrei
Apr 29 2014
parent Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> writes:
On 4/29/14, 10:18 AM, Kenji Hara via Digitalmars-d wrote:
 In future release, non-static const or immutable field will be made an
 instance field.

 struct S
 {
      immutable int x = 1;
 }
 static assert(S.sizeof == int.sizeof);   // will succeed in the future

 So current "implicit static" behavior is now deprecated.

 Related:
 http://dlang.org/changelog#staticfields
 http://dlang.org/changelog#staticfields2

 Kenji Hara
That makes sense - thanks Nick and Kenji! -- Andrei
Apr 29 2014