<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">On Dec 7, 2019, at 11:37 AM, <a href="mailto:forax@univ-mlv.fr" class="">forax@univ-mlv.fr</a> wrote:<br class=""><div><blockquote type="cite" class=""><br class="Apple-interchange-newline"><div class=""><span style="caret-color: rgb(0, 0, 0); font-family: Literata; font-size: 18px; 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; text-decoration: none; float: none; display: inline !important;" class="">not sure to follow ...</span><br style="caret-color: rgb(0, 0, 0); font-family: Literata; font-size: 18px; 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; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Literata; font-size: 18px; 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; text-decoration: none; float: none; display: inline !important;" class="">given that we need to construct a new Record, so you have to write all the components of the new record anyway.</span><br style="caret-color: rgb(0, 0, 0); font-family: Literata; font-size: 18px; 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; text-decoration: none;" class=""></div></blockquote></div><br class=""><div class="">One bit you’re missing is simple:  If the old record already holds most of</div><div class="">the new record’s values, it is wasted effort (data motion, IR complexity)</div><div class="">to break up the old record into components just to put them back together</div><div class="">almost the same way.</div><div class=""><br class=""></div><div class="">(This objection can be handled almost as simply:  Make sure that the</div><div class="">indy BSM that handles with-methods makes it easier for the JIT to</div><div class="">swallow the request, by clearly identifying which components are</div><div class="">changed and which are not.  With indy we can reduce the practical</div><div class="">complexity by ensuring that the JIT sees stuff in the form it prefers.)</div><div class=""><br class=""></div><div class="">A deeper bit, not yet mentioned, is that records (and objects in general)</div><div class="">often apply special validation (error rejection) and normalization (e.g.</div><div class="">clipping or defensive copying) to new operands which they don’t apply</div><div class="">to values already stored in their fields.  We don’t have a way, yet, to</div><div class="">attach such logic to individual fields, but when we do, the cost of</div><div class="">breaking up and reassembling components will be nothing like your</div><div class="">description.  A canonical constructor will want to be accompanied by</div><div class="">a canonical *reconstructor* which has a tricky API surface (like I</div><div class="">mentioned) that can respond to a request to update any subset of</div><div class="">the record’s fields, leaving the others unchecked, and already</div><div class="">normalized.  (That’s what we call a proof by construction in math.)</div><div class=""><br class=""></div><div class="">We can start the ball rolling before we get field-specific constructor</div><div class="">logic and reconstructors per se, by pretending that the problem is</div><div class="">“only” data motion reduction, and designing reasonable reconstruction</div><div class="">translation strategies, based on indy of course.</div><div class=""><br class=""></div><div class="">Make sense?</div><div class=""><br class=""></div><div class="">— John</div></body></html>