By a peculiar coincidence, this move to add names to what used to be structural types is almost exactly the opposite of something I want to do to Delphi (Object Pascal) for reverse reasons.<p>When you have run-time type information (RTTI) in a language it turns out that having names for types is important, for data serialization in particular. But when you also have anonymous types (as Delphi does), you can end up with versioning problems, because you need to generate names for these things - and they usually end up involving numbers of some kind.<p>So you can see a type that looks like this:<p><pre><code> type
R = record
X: record
E: set of (a, b);
end;
end;
</code></pre>
Only R has a name; the names of the types of the field R.X, and the field R.X.E, etc. are anonymous and end up being something like ':1', ':2' etc. But change the order of declarations and you change the numbering. So probably the most robust option is a name generated from the structure of the type, a bit like a mangled C++ signature.