Comments on JDK-8198408 please ? (original) (raw)

Srikanth srikanth.adayapalam at oracle.com
Tue Feb 27 08:50:04 UTC 2018


On Tuesday 27 February 2018 06:43 AM, John Rose wrote:

On Feb 26, 2018, at 4:50 PM, Maurizio Cimadamore <maurizio.cimadamore at oracle.com_ _<mailto:maurizio.cimadamore at oracle.com>> wrote:

I think for now it's better to start simple - only one level allowed and no complex expressions in the selector allowed. I don't think there is really a technical reason for this; but of course is there is one, make it simpler by restricting the construct. I agree there's no technical reason to have the restriction - and I did not propose the restriction because of that - I was only putting that restriction forward to allow for a 'staged' prototype - e.g. we can start simple, and add more complex forms as we go, and as we see fit. And no - I did not want an implicit write-back - if user wants writeback it should do that explicitly: A a = WithField(a.x, 11); Got it!  Although I think you didn't mean to make a declaration only? A a = …; _a = WithField(a.x, 11);

The proposal for an explicit __WithField operator with no implicit write-back semantics looks so much better at first glance. I'll prototype that and see.

FTR and FWIW, on branch tip, withfield emission happens on field assignments of the form x.y = where x is required to a non-final handle.

Which would mean this.y = would not work. Not the implicit this (with x being absent). All fancier cases are rejected.

Thanks gentlemen. Srikanth

— John P.S. And if we get reconstructor expressions, then such expressions would sugar up to something very vaguely like and yet unlike: _b = a Recon-> x = 10;  // a unchanged, b gets new version of a _a = a Recon-> x = 11;  // a gets new version of itself _a Recon->= x = 11;  // same as prev _a = a Recon-> x++;  // now a.x = 12 _a = a Recon-> { x = 13; unlucky = true; log("shark jumped"); }; (The reconstructor bodies set fields in exactly the same sense that constructors set blank final fields, except that reconstructors also provide the previous values of those fields in the previous version of the receiver.  If it is further aligned with constructor bodies, it can call methods ont the current object, like "log" above.)



More information about the valhalla-dev mailing list