On Sep 23, 2020, at 12:14 PM, John Rose <john.r.r...@oracle.com> wrote: > I am convinced that (under broad presuppositions) reconstruction > expressions *should* allow mutation to their internal bindings.
P.P.P.S. I updated my case study [1] to point at Brian’s more recent document [2], and realized that my “broad presuppositions” are exceedingly broad, and probably nobody is arguing *against* something like with-blocks. Still, I would like to go on record as preferring fully imperative blocks, with the option to specify localized side effects like `i++` and/or control flow, to the alternative syntaxes on the table. Those would be, AFAIK: (a) positionally-parameterized constructors and factories *only* (as in `p=Point.of(p.x,p.y+1)`), and (b) a halfway point of constructors and factories which allow named arguments with suitably tuned defaults (as in `p=p.with(y: p.y+1)`). (Brian has a clever way to desugar general with-blocks into call-with-named-arguments, under the heading “Making names significant”. And that would be super-useful in its own right. But I still like the fully imperative with-block far more than (b).) [1]: http://cr.openjdk.java.net/~jrose/values/iterator-vs-cursor.html [2]: https://github.com/openjdk/amber-docs/blob/master/eg-drafts/reconstruction-records-and-classes.md