[libstdc++] Don't access fpos_t.__state on uClibc w/o wchar support
Bernardo Innocenti
bernie@develer.com
Fri Sep 26 17:02:00 GMT 2003
Pétur Runólfsson wrote:
> For the specific case of fpos<mbstate_t>::state(mbstate_t),
>
> void state(mbstate_t s) const
> {
> #ifdef __FOO__
> __state = s;
> #endif
> }
>
> is acceptable, because state() can be called unconditionally from
> basic_filebuf, but
>
> #ifdef __FOO__
> void state(mbstate_t s) const
> {
> __state = s;
> }
> #endif
>
> is not acceptable, because in this case all calls to state() must
> be guarded with #ifdef __FOO__. This would be very fragile,
> as someone testing on a system where __FOO__ is defined might
> add a call to state(), but forget to add the #ifdefs.
I do agree with you. But what shall we do for functions returning
a value? Clearly, returning 0, NULL or false is not always a sane
thing to do.
>>And even if some of them could be made to work somehow,
>>wouldn't it be useful to have a way to turn off advanced
>>functionality to make the library smaller or more efficient
>>for small systems?
>
> It would be useful, yes. But it would be even better to have
> this happen automatically. Nobody wants to maintain two versions
> of the library.
I understand and agree, but it's not always possible in all cases.
Il libstdc++ keeps ignoring the issues of smaller systems for
improved maintanability, lots of rogue patches will appear
everywhere.
>>If we unconditionally add a member variable of type mbstate_t in
>>class fpos, all instances will end up being bigger. Even worse, the
>>compiler won't be able to pass fpos objects around as scalars because
>>they would now be real structures with multiple fields.
>
> Sure, but remember the 80-20 rule of optimization. Is fpos really
> used so much that it is a problem?
Whenever a program uses iostreams, fpos will get linked in.
Actually, there are bigger outstanding problems in 3.4: the new
demangler gets linked in as soon as the program uses exceptions,
bringing 200KB worth of code with it.
> That said, you can implement whatever optimizations you like in
> code specific to your platform, so long as it conforms to the generic
> interface.
For the uClibc case, I think it would be wiser to use the gnu-linux/
code. uClibc aims to be 100% compatible with glibc, and is currently
very close.
--
// Bernardo Innocenti - Develer S.r.l., R&D dept.
\X/ http://www.develer.com/
Please don't send Word attachments - http://www.gnu.org/philosophy/no-word-attachments.html
More information about the Libstdc++
mailing list