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;
vs.
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.
Thanks
Moh
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;
Vs
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
>with.
>
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.
Thanks
Moh
More information about the valhalla-dev
mailing list