David Abrahams said:
> "William E. Kempf" <[EMAIL PROTECTED]> writes:
>
>> David Abrahams said:
>>> "Eric Woodruff" <[EMAIL PROTECTED]> writes:
>>>
>>>> type_info is not portable in the slightest.
>>>
>>> There are lots of applications where that doesn't matter. And with a
>>> little postprocessing, the type_info::name() produced by most
>>> compilers could easily be normalized into a common format.
>>
>> The trouble is that serialization requires an identifier that's
>> persistant across application runs.
>
> Not all uses of serialization depend on that.

Most of the cases I've ever had a need for do.  Either it's being used to
persist data, or it's being used to do IPC.  Are the other uses really
prevalent in your experience?

>> type_info by itself doesn't help here, because you can't persist the
>> type_info instance even if it were gauranteed to compare across runs
>> (obviously it's not).  type_info::name() is so underspecified that you
>> can't be sure it won't give you the same string for every type. More
>> importantly, in practice (i.e. implementations do this),
>> type_info::name() will often give you strings that are *not* unique,
>> rendering it worthless for this domain.
>
> Which implementations? Boost.Python v2 /depends/ on type_info::name()
> returning a usefully-unique string on many platforms (depending on their
> dynamic linking model). I've never seen an example of a platform which
> "often give you strings that are *not* unique", but if they're out
> there, I need to know about them.

OK, I may be wrong here.  However, it was my understanding that many
implementation returned nothing more than the type's name, minus the
namespace, which would mean you could easily get non-unique names.  I had
even heard a rumor once that there was a compiler that always returned a
null string, in order to save space in the executable, but I can't tell
you what compiler that was supposed to be or verify that it was anything
more than a bad rumor.

Regardless, however, you have to admit that all of this *IS* allowed by
the standard, making relying on this behavior to be shaky even if you
could confirm that all current implementations do something useful here.

>> Can type_info::name() be useful?  Yes, provided the implementation did
>> something useful, but it's not portable, and not useful for the task
>> at hand.
>
> There are lots of tasks you can do with a serialization library, and I
> submit that a reasonable proportion of those tasks can take advantage of
> type_info::name() on a useful number of compilers.

If type_info:name() doesn't return a unique string?

>> BTW, there's a LOT to be said for specifically supplying an
>> identifier when implementing a persistence/serialization library, even
>> though it means tedious busy work.  Specifically, it allows you to
>> insure the id is valid across multiple programs, regardless of how the
>> implementation might auto-magically generate an identifier. I'd
>> recommend choosing a "large integer" representation instead of a
>> string, however, since it will take less space to represent
>> externally.  The GUID type is actually a fairly good choice here.
>
> Maybe it would make sense to use Steve Dewhurst's typeof()
> technique. At least that could help reduce the number of user-supplied
> identifiers needed.

That may well be worth looking into, but I'm not familiar with the
technique.  I know he generates unique integer ids (or at least, I think I
know that), but will the generation produce consistent ids across
application runs?  If not, regardless of whether or not serialization can
be useful with out that, I would claim it cripples the serialization
library enough to not be a valid solution.

William E. Kempf



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to