In-Reply-To: <[EMAIL PROTECTED]> On Thu, 19 Dec 2002 17:16:49 -0500 David Abrahams ([EMAIL PROTECTED]) wrote: > > This is interesting, but to me it mostly confirms that I don't want a > > reflection framework. It is at the wrong level of abstraction, in > > that it deals with methods and instance variables rather than fields. > > What's a "field"? In particular, please compare/contrast with > "instance variable".
A "field" is part of the interface - in this case, the serialisation interface. An "instance variable" is part of the implementation. Often fields will be represented by instance variables directly, but sometimes not. For example, a Rectangle might expose fields TopLeft and Size while using TopLeft and BottomRight internally. (Serialising as Size will often save space in variable-length formats; the high bits of BottomRight are probably the same as the high bits of TopLeft so we can save some space by not storing them.) Sometimes instance variables will not need to be stored because they are caches; ie they can be recalculated from data which is stored. For example, we might store the points of a polygon but not the bounding box. So not all instance variables correspond to published fields. Sometimes redundant fields may be wanted. For example, we might not cache the bounding box, but we might expose it as a field anyway. In general, there needs to be a degree of abstraction between the published format used for serialisation, and the concrete representation as instance variables. The serialisation form usually needs to be more stable, more invariant over time, so that we can continue to load old files easily. It also needs to be more minimal, to save space in the archive. Many reflection systems, especially automated ones, work by accessing language-level implementation details such as class names, method names and variable names. That is how it is in Java, for example. I gather Stroustrup's XTI will be the same. An automated system cannot tell fields from instance variables - you need the intent of the programmer for that. So I distrust solutions with a lot of automation. On the other hand, if it isn't automated, I am concerned about the amount of work I'll have to do. Will a general solution for reflection be more work than a more specific solution just for serialisation? Also... suppose we want to use reflection to connect UI widgets to application objects. It seems to me the fields I want to expose to the UI may not be the same as the ones I want to use for serialisation. (However, I can see that some components of a serialisation library, such as the mechanism to register object factories, ought to be sharable with a reflection library.) -- Dave Harris _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost