What happened to the "mutable struct" debate?

Rezaei, Mohammad A. Mohammad.Rezaei at gs.com
Fri Jan 23 16:12:32 UTC 2015

I don’t believe this is confusing. It’s not confusing with Java objects.

MyObject foo =  new MyObject();
foo.inField = 10;


MyObject foo = new MyObject();
int x = foo.intField;
x = 10;

The rules are simple and the exactly the same as regular primitives:

-          Assignment is copy.

-          Pass into method is copy.

-          return from a method is copy.

-          dot  (.) is not a copy.

Incidentally, I’m not a C# expert, but I believe the 4th rule doesn’t apply there and it causes much confusion.


From: Vitaly Davidovich [mailto:vitalyd at gmail.com]
Sent: Friday, January 23, 2015 11:06 AM
To: Rezaei, Mohammad A. [Tech]
Cc: Brian Goetz; valhalla-dev at openjdk.java.net
Subject: Re: What happened to the "mutable struct" debate?

Also, here's another thing to consider for mutable structs:

MyStruct[] arr = ...
arr[i].intField = 10;

MyStruct[] arr = ...
MyStruct s = arr[i];
s.intField = 10;

These wouldn't have the same semantic yet not super obvious to some from cursory glance (or innocent refactoring).

sent from my phone
On Jan 23, 2015 11:00 AM, "Vitaly Davidovich" <vitalyd at gmail.com<mailto:vitalyd at gmail.com>> wrote:
If mutable structs are not allowed to be passed by ref, then one is more likely to lose writes as the struct is passed through a method chain.  There's no *necessity* per say, but the danger zone is expanded.

The by-ref would be useful for immutable structs as well when you want to avoid copying costs for a largish struct.

On Fri, Jan 23, 2015 at 10:54 AM, Rezaei, Mohammad A. <Mohammad.Rezaei at gs.com<mailto:Mohammad.Rezaei at gs.com>> wrote:
>Very much so.  This is indeed Big Strike #1 against them; this is a new
>big complexity that Java (platform and developers) have not had to deal

I don't really see why mutable structs would necessitate pass by reference. Java developers are used to pass by value semantics and there is a well-known, but admittedly ugly pattern for pass by reference (use an array or mutable wrapper).

The reference question comes up even in all-final value types. But I'll pose that question in a separate thread.


More information about the valhalla-dev mailing list