In these scheme, canonical constructor also acts as instance initializer,
since it is always called from other constructors. Classical instance
initializer is therefore not needed any more and could be prohibited in record
types.
I would agree that instance initializers in records are mostly useless,
and keeping them around adds some complexity. Any work that can be done
in an II could also be done in a compact ctor with about the same number
of keystrokes:
{ ++instanceCount; }
vs
Foo { ++instanceCount; }
The argument for keeping them is to minimize the number of gratuitous
differences between records and classes. But, "it is a compile-time
error for a record class to have an instance initializer" is a pretty
simple spec change... and probably no one will notice.