Draft Object Serialization Specification for records - construction/destruction

Brian Goetz brian.goetz at oracle.com
Wed Oct 9 18:52:41 UTC 2019

> 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.

I think there is room to support the future.  Here are some ways we 
could extract the state from a record for serialization:

  A. Scrape the fields.
  B. Call the field accessors.
  C. Invoke the canonical deconstructor (when we have them.)
  D. Invoke a serialization-specific pattern if there is one (when we 
support them.)

Note that in a case of `record R(...) { }`, these are all the same -- 
the default accessors return the field values, and the default canonical 
deconstructor invokes the accessors.

Clearly, if the user provides an explicit serialization member (whatever 
that looks like), we should use that in preference to "default" 
serialization; this is true for classes and records alike, it's just 
that the default behavior differs between classes and records.  So when 
we get to New And Improved Serialization, D presents no migration 
problem; we can say "if there is a serialization pattern, use that, 

We can make the same argument for C, since in the absence of an explicit 
dtor, which you can't write now, what you'd get from an implicit dtor is 
the result of B.  Same story: "if there is a canonical ctor, use that."

The real question is A vs B.  One can make an argument that 
serialization is about raw object state, which means that field-scraping 
is OK.  Or one can make the argument that we are trying to make 
serialization safer, so we should prefer the accessor (when there is 
one.)  Most of the time, though, if there is a nontrivial accessor, all 
it will do is make a copy (say, if the corresponding component is an 
array), so going through the accessor is a bit of a wasted effort.

More information about the amber-spec-experts mailing list