Boost logo

Boost :

Subject: Re: [boost] request for comments in a new format library
From: Roberto Hinz (robhz786_at_[hidden])
Date: 2018-02-22 23:01:36

​Hi Frédéric​

On Thu, Feb 22, 2018 at 6:46 PM, Frédéric <ufospoke_at_[hidden]> wrote:

> Hi Roberto,
> After long time using boost::format, I searched for an efficient
> formatting library and ended using fmtlib which I found extremely
> quick and easy to use. From you benchmark, fmt is almost always the
> quickest solution. I also like very much the fact that I can provide
> some kind of printf format string as this is what is most suitable for
> translations. What would be the advantage to use your library instead?

I think the advantages are subtle:

​- you can extend it to write into your own output types
  ( like if you use some string type other than std::string)

- compile error instead of runtime errors:
  fmt throws an exception if there is something wrong in the format string.
  Since stringify use a composition of those format functions
you get
  compilation errors instead.

- In oder to customize numeric punctuation, fmt forces you to change the
  current locate. I find this bad because It means modifying a global state.
  Also, I presume that fmt delegate the job to std::ostream in this case,
  which I suspect must reduce the performance considerably.

- stringify decouples formatting from translation, for instance:

   namespace strf = boost::stringify::v0;

   auto str = strf::make_string
              [ gettext("your login is: {0}\n your access code is: {1}") ]
              &= { strf::right(login, 40) , strf::hex(code) > 40 };

    The message to be translated does not contain formatting. Hence:
     - There is less chances that the translator team ( which is usually not
       composed by programmers ) make some mistake.
     - Enables you to change the formatting without requesting the
       translators to update the translated strings.

> Side question: I am impressed by the very bad timing (x2) of the tests
> on Windows compared to linux. Are they the same kind of
> machines/processors? If yes, why such a difference?

​It's the same machine ( an intel NUC6i5SYH ). I'm impressed too.
​Maybe there is some inaccurateness in my benchmarks that is
dependent on the operating system. But It can't be just that.
Also, in order to copy strings stringify uses internally
I think gcc implementations uses some parallelism there, while msvc does

best regargs,

Boost list run by bdawes at, gregod at, cpdaniel at, john at