What happened to the "mutable struct" debate?

Vitaly Davidovich vitalyd at gmail.com
Fri Jan 23 16:15:02 UTC 2015


I don't think this is a valid example; rewrite what I wrote with a class
and you get different behavior and everything looks the same.

sent from my phone
On Jan 23, 2015 11:12 AM, "Rezaei, Mohammad A." <Mohammad.Rezaei at gs.com>
wrote:

> 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> 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> 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