Draft Object Serialization Specification for records - construction/destruction

Chris Hegarty chris.hegarty at oracle.com
Mon Oct 7 13:31:51 UTC 2019


Peter,

> On 6 Oct 2019, at 22:38, Peter Levart <peter.levart at gmail.com> wrote:
> 
>> ...
> 
> Here's a snipped from above draft:
> 
> """The serialized form of a record object is a sequence of values derived from 
> the final instance fields of the object. The stream format of a record object 
> is the same as that of an ordinary object in the stream. During 
> deserialization, if the local class equivalent of the specified stream class 
> descriptor is a record class, then first the stream fields are read and 
> reconstructed to serve as the record's component values; and second, a record 
> object is created by invoking the record's canonical constructor with the 
> component values as arguments (or the default value for component's type if a 
> component value is absent from the stream).
> """
> 
> I think that if stream values deserialize into a record through its public API 
> (the canonical constructor which can be customized), then record components 
> that are serailzed must also be obtained from a record via its public API (the 
> accessors which can also be customized).
> 
> I think this is an important aspect which should be spelled out in the 
> specification. So instead of: "The serialized form of a record object is a 
> sequence of values derived from the final instance fields of the object.", the 
> text should go: "The serialized form of a record object is a sequence of 
> values derived from invoking the record component accessors.”

You are not wrong. In fact, I had the very same thought ( and the implementation does similar ), but we want to leave room here for deconstructors/extractors. With the wording in the current draft, it will be possible to switch the implementation without the need to update the specification.

-Chris.



More information about the amber-spec-experts mailing list