<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">On May 17, 2018, at 11:07 AM, Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" class="">maurizio.cimadamore@oracle.com</a>> wrote:<br class=""><div><blockquote type="cite" class=""><br class="Apple-interchange-newline"><div class=""><span style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">While I think going down into a syntactic bikeshed right now would be way too premature, IMHO, one thing that the language has to figure out is how the construction model for value types is exposed to programmers. Withers are very good at the bytecode level, not so much at the source level. Whatever we can do to minimize the entry barrier there I think would be very welcome.</span><br style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""></div></blockquote></div><br class=""><div class="">I think our starting point is porting classic Java constructor</div><div class="">syntax & semantics to the value world.  This gives programmers</div><div class="">a way (which is awkward but workable) to build withers etc.</div><div class=""><br class=""></div><div class="">A Java constructor in a value class will internally use withfield</div><div class="">to translate any assignment of the form "this.x = y", and instead</div><div class="">of the blank instance being an incoming reference in L[0], the</div><div class="">constructor builds a blank value instances out of thin air using</div><div class="">vdefault.</div><div class=""><br class=""></div><div class="">An explicit wither can simply reconstruct another instance from</div><div class="">scratch.  This is a workaround in place of direct access to a single</div><div class="">wither instruction, using a special syntax.  (…Which has been</div><div class="">previously discussed in terms like v2=__With(v.x, y) or something</div><div class="">similar.)  As a workaround, classic Java constructors are good</div><div class="">enough to allow other experiments to get off the ground.  After</div><div class="">all, they are good enough for VBCs.</div><div class=""><br class=""></div><div class="">— John</div><div class=""><br class=""></div><div class="">P.S.  Teaser:  Generalizing classic Java constructors to cover the</div><div class="">case of withers and ad hoc update instructions is the subject of a</div><div class="">forthcoming-but-delayed memo concerning "reconstructors".</div><div class=""><br class=""></div></body></html>