diff --git a/README.rst b/README.rst index b087ff0a..1724492d 100644 --- a/README.rst +++ b/README.rst @@ -8,6 +8,7 @@ Features * Format string syntax similar to the one used by `str.format `__ in Python. +* Support for user-defined types. * High speed: performance of the current proof-of-concept implementation is close to that of iostreams (see `Speed tests`_). * Small code size both in terms of source code (format consists of a single @@ -15,12 +16,13 @@ Features (see `Compile time and code bloat`_). * Easy deployment: small self-contained code base, no external dependencies, permissive license. -* Support for user-defined types. -Example -------- +Examples +-------- -fmt::Print("Hello, {0}!") << "world"; +This prints "Hello, world!" to stdout: + + fmt::Print("Hello, {0}!") << "world"; Benchmarks ---------- @@ -28,6 +30,34 @@ Benchmarks Compile time and code bloat ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Speed tests +~~~~~~~~~~~ + +The following speed tests results were generated by building +``tinyformat_test.cpp`` on Ubuntu GNU/Linux 12.10 with +``g++-4.7.2 -O3 -DSPEED_TEST -DHAVE_FORMAT``, and taking the best of three +runs. In the test, the format string ``"%0.10f:%04d:%+g:%s:%p:%c:%%\n"`` or +equivalent is filled 2000000 times with output sent to ``/dev/null``; for +further details see the `source +`__. + +============== ======== +test name run time +============== ======== +libc printf 1.26s +std::ostream 2.02s +format 2.20s +tinyformat 2.51s +boost::format 10.40s +============== ======== + +As you can see boost::format is much slower than the alternative methods; this +is confirmed by `other tests `__. +Tinyformat is quite good coming close to iostreams. Unfortunately tinyformat +cannot be faster than the iostreams because it uses them internally. +Performance of format is close to that of std::ostream but there is a room for +improvement since format is not based on iostreams. + The script ``bloat_test.sh`` from the `tinyformat `__ repository tests compile time and code bloat for nontrivial projects. It generates 100 translation units @@ -67,34 +97,6 @@ executable size is smaller with tinyformat then with format and for non-optimized build its the other way around. Boost::format has by far the largest overheads. -Speed tests -~~~~~~~~~~~ - -The following speed tests results were generated by building -``tinyformat_test.cpp`` on Ubuntu GNU/Linux 12.10 with -``g++-4.7.2 -O3 -DSPEED_TEST -DHAVE_FORMAT``, and taking the best of three -runs. In the test, the format string ``"%0.10f:%04d:%+g:%s:%p:%c:%%\n"`` or -equivalent is filled 2000000 times with output sent to ``/dev/null``; for -further details see the `source -`__. - -============== ======== -test name run time -============== ======== -libc printf 1.26s -std::ostream 2.02s -format 2.20s -tinyformat 2.51s -boost::format 10.40s -============== ======== - -As you can see boost::format is much slower than the alternative methods; this -is confirmed by `other tests `__. -Tinyformat is quite good coming close to iostreams. Unfortunately tinyformat -cannot be faster than the iostreams because it uses them internally. -Performance of format is close to that of std::ostream but there is a room for -improvement since format is not based on iostreams. - Running the tests ~~~~~~~~~~~~~~~~~