On Sat, Nov 23, 2024, at 16:22, Rowan Tommins [IMSoP] wrote:
> On 23/11/2024 13:11, Rob Landers wrote:
>> Born from the Records RFC (https://wiki.php.net/rfc/records) discussion, I 
>> would like to introduce to you a competing RFC: Data Classes 
>> (https://wiki.php.net/rfc/dataclass).
> 
> 
> Thank you for continuing to think about this, and PoC code is always useful 
> to work through the implications.
> 
> It seems like this is going in a very similar direction to the work Ilija 
> shared in April: https://externals.io/message/122845 and 
> https://github.com/php/php-src/pull/13800
> 
> My knowledge of the engine isn't good enough to compare the two PRs, but the 
> descriptions seem very similar. The main differences seem to be details 
> mentioned in one draft and not the other:
> 
> 
> - You have described details for constructors and inheritance, which Ilija 
> left as open questions
> - Ilija had considered how instance methods should behave, proposing a 
> "mutating" keyword and "!" call-site marker. Your RFC doesn't discuss this - 
> the changeName example shows behaviour *inside* the method, but not behaviour 
> when *calling* it
> 
> Is it just an oversight that you didn't link to the previous discussion, or 
> had you not realised how similar the proposals would end up? Either way, this 
> looks like ripe ground for collaboration, unless there is some fundamental 
> disagreement about the approach.
> 
> 
> 
> -- 
> Rowan Tommins
> [IMSoP]

Yes, this is mostly about "composability" vs. dedicated syntax. A bare "data 
class" is very similar to struct while a "final readonly data class" is very 
similar to records.

> Is it just an oversight that you didn't link to the previous
>       discussion, or had you not realised how similar the proposals
>       would end up?

Yes, it is an oversight! I didn't even think to link to it. To be fair, I also 
didn't link to the records RFC. I've updated the RFC with links. While some 
behavior is similar to what Ilija described, it is mostly a natural progression 
of adding a `data` modifier to classes. There's no special syntax because 
classes already have a well-defined syntax.

> Your RFC
>       doesn't discuss this - the changeName example shows behaviour
>       *inside* the method, but not behaviour when *calling* it

An interesting observation, can you explain more as to what you mean? The 
changeName example is simply about constructors—whose behavior is mostly due to 
engine limitations. You can't very easily see what happens inside a constructor 
from outside a constructor (usually).

— Rob

Reply via email to