On Sun, Nov 17, 2024, at 08:21, Larry Garfield wrote:
> I would far prefer assembling record-ish behavior myself, using the smaller 
> parts above.  Eg:
> 
> final readonly data class Point(int $x, int $y);
> 
> "final" prevents extension.  "readonly" makes it immutable.  "data" gives it 
> value-passing semantics.  Any class can use an inline constructor.  "with" is 
> designed to work automatically on all objects.  Boom, I've just assembled a 
> Record out of its constituent parts, which also makes it easier for others to 
> learn what I'm doing, because the features opted-in to are explicit, not 
> implicit.

Sorry for the radio silence, but I found myself saying something was 
impossible. This is software, anything is possible...

Anyway, I think I figured out how to implement a "data" modifier, and it is 
quite excellent (for the exact reasons you give).

I'll break this up into multiple RFCs, pending some further tests to try and 
break my proof-of-concept:

- a "data" modifier on class for value semantics
- an "inline constructor"

As you mention, at that point, a "record" or "value" keyword can just be 
shorthand for "final readonly data class".

— Rob

Reply via email to