|
Boost : |
Subject: Re: [boost] [locale] Review
From: Artyom (artyomtnk_at_[hidden])
Date: 2011-04-21 14:06:57
> >> Inlining gives very good performance benefits.
> >
> > Some people (performance freaks would disagree with you)
> > see Linux kernel coding style.
> >
> > But this is other story.
>
> High-performance computing is my job, but whatever.
>
Mine too :-)
> > However token_iterator designed to create tokens.
> >
> > Note, if token iterator was returning a range
> > you wouldn't be able to call
> >
> > std::string s = *it;
>
> Is that a problem? Why would you want to do such
> a thing in the first place? You already have the
> data, why copy it?
Why? Because that what 99% of
programmers would actually do
if they want specific token.
> > I see, but sometimes I don't really agree that
> > the interface you suggest simplifies things,
> > sometimes it may but not always.
> >
> > But this is my point of view.
>
> I don't see how that kind of simplification
> can be subject to points or view.
>
> Not requiring users to convert to your format
> is simpler than requiring them to do so, it's a fact.
>
> If I wanted to use your library, it would be ironic
> if the first thing I had to do is write a wrapper
> around it. I thought it was a library that aimed
> at being a wrapper of ICU with a nice C++ interface.
>
It really depends on your use pattern.
See a small sample when I use collation in
my real application to display index of topics:
//
// note std::locale has
// bool operator()(std::string const &,std::string const &) const
//
typedef std::multimap<std::string,std::string,std::locale> mapping_type;
mapping_type mapping(context().locale());
cppdb::result r;
cppdb::session sql(conn);
r=sql<< "SELECT slug,title FROM pages WHERE lang=?" << locale_name;
while(r.next()) {
std::string slug,t;
r >> slug >> t;
mapping.insert(std::pair<std::string,std::string>(t,slug));
}
How easy and simple, isn't it?
How would it look like with ranges API?
>
>
> > You assume that "whatever" facet is stateful, and it is not
> > it is const and stateless, unless I provide some specific
> > state as additional parameter.
>
> No, I assumed it was stateless.
>
Your sample just took some two generic template pointers
that can't be passed to virtual functions that know
anything about them unless you use any_iterator
or something like that.
So at lease how it was written it was wrong.
> Your algorithm seems wrong.
> If the output buffer is too small, simply don't process
> the data that would require a larger buffer.
If you know that would it size be?
>
> Or you could design the code so that the output buffer is always
> statically guaranteed to be big enough.
>
What is the guarantee? Do you have specific suggestions for
Case handling where the charset is changed in runtime, locale
is changed in runtime and so on?
> And don't copy the whole input range to a contiguous
> buffer (that would need to be heap-allocated),
> copy it in bits to an automatic buffer.
>
Some operations require to have entire text and not
small part of it, you had written some Unicode
algorithms, you know it.
Now add a charset know in the run time to make it
even more fun.
>
> > But this is really "Dikumware STL" problem because other
> > normal libraries do it in big chunks as they should.
>
> If your library requires on codecvt facets to be
> efficient and the most popular implementation isn't,
> then it becomes your library's problem.
>
No, it does not requires, but if current implementation
is already bad, how can I do it better?
Artyom
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk