On Thu, May 9, 2024, at 1:10 PM, Andreas Hennings wrote:

>> Where all properties are readonly, and if an object those are *also* 
>> readonly, and all are assigned in the constructor...
>>
>> Yeah, that ideal case is kinda narrow, and likely will remain so for a long 
>> while yet.
>>
>> Whichever order it goes in, that should be documented explicitly and the 
>> reasoning for it included.  (Feel free to pilfer my examples above 
>> extensively if that helps.)
>>
>> As for the syntax itself, my preferences, in order, would be:
>>
>> 1. clone $foo with (...), where (...) follows named-argument syntax in all 
>> its variants and forms, which includes ...$arr.
>>
>> 2. clone $foo with $array, where $array is an honest to goodness assoc 
>> array/array literal, created by any means the developer wants.
>>
>> Either of those are equally expressive; the first is, IMO, cleaner and 
>> easier to read/type, and probably nicer on static analysis tools, but 
>> they're still both equally expressive.
>>
>> Anything less than that is, IMO, creating unnecessary confusion about how 
>> the syntax behaves that will trip up developers left and right.
>>
>> --Larry Garfield
>
> Hello list,
> First, I am very much in favor of the named-argument syntax `clone
> $obj with (key: $value, ...)`, with support for argument unpacking.
>
> The syntax is well suited for the most common case, which is regular
> wither methods for one or more known properties.
> I don't like the array syntax as a default. It has inferior DX for
> regular withers, and possible performance impact from the temporary
> array.

I agree.

> For the execution scope ideas:
> I kind of like the idea to have a special object state or scope effect
> where some properties are writable that otherwise wouldn't be.
> However, I don't like this kind of concept being introduced as a
> special case only for this clone execution scope.
> E.g. the current "readonly" implementations actually means write-once
> + write-private, applied on property level. But in the clone scope it
> would mean something different.

Yet again, readonly was badly designed and it's biting us. :-(  This is one of 
the reasons Ilija and I are planning to take another swing at asymmetric 
visibility, which solves nearly all of these issues.  Or, it will if we can 
avoid bikeshedding over the syntax again...

--Larry Garfield

Reply via email to